【问题标题】:AWS Fargate deploy: "Invalid action configuration The AWS ECS container ***** does not exist"AWS Fargate 部署:“无效的操作配置 AWS ECS 容器 ***** 不存在”
【发布时间】:2018-10-07 12:38:55
【问题描述】:

我正在使用 terraform 来提供所需的资源。

我有一个 terraform 代码管道 resourceProduction stage 读取 imagedefinitions.json 文件以了解要部署哪些图像:

resource "aws_codepipeline" "pipeline" {
  stage {
    name = "Build"
    action {
      name             = "Build"
      category         = "Build"
      owner            = "AWS"
      provider         = "CodeBuild"
      version          = "1"
      input_artifacts  = ["source"]
      output_artifacts = ["imagedefinitions"]
      configuration {
        ProjectName = "${var.project_prefix}-codebuild"
      }
    }
  }
 stage {
    name = "Production"
    action {
      name            = "Deploy"
      category        = "Deploy"
      owner           = "AWS"
      provider        = "ECS"
      input_artifacts = ["imagedefinitions"]
      version         = "1"
      configuration {
        ClusterName = "${var.ecs_cluster_name}"
        ServiceName = "${var.ecs_service_name}"
        FileName    = "imagedefinitions.json"
      }
    }
  }

imagedefinitions.json 文件是在构建阶段构建的,来自buildspec.yml

build:
  commands:
    - echo Build started on 'date'
    - echo Building the Docker image...
    - docker build -t $REPOSITORY_URI:latest .
    - docker tag $REPOSITORY_URI:latest $REPOSITORY_URI:$IMAGE_TAG
post_build:
  commands:
    - echo Build completed on 'date'
    - echo Pushing the Docker images...
    - docker push $REPOSITORY_URI:latest
    - docker push $REPOSITORY_URI:$IMAGE_TAG
    - echo Writing image definitions file...
    - printf '[{"name":"docker-image-name","imageUri":"%s"}]' $REPOSITORY_URI:$IMAGE_TAG > imagedefinitions.json  

我不确定该行中图像的名称应该是什么:

  • printf '[{"name":"docker-image-name","imageUri":"%s"}]' $REPOSITORY_URI:$IMAGE_TAG > imagedefinitions.json

我得到的错误重复了这一行的“名称”值:

“无效的操作配置AWS ECS容器docker-image-name不存在”

我应该在这里取什么名字?

【问题讨论】:

    标签: amazon-web-services deployment terraform amazon-ecs aws-fargate


    【解决方案1】:

    您似乎正在使用Continuous Deployment with AWS CodePipeline 教程。从Prerequisites 开始,您应该有一个任务定义,以及一个使用该任务定义的服务。

    当 CodePipeline 中的 ECS 部署 步骤运行时,它会查找您指定的服务的任务定义,并创建一个新的任务定义,并在其中使用与您的imagedefinition.json 文件中的一个。

    因此,根据您的示例,我希望与您的管道正在更新的 ECS 服务关联的任务定义具有名称为 docker-image-name 的容器。

    【讨论】:

    • 谢谢!我正在阅读一个教程,其中包含了一些代码,但没有解释它。读原著就好多了。我在task_definition.json 中的name 与我写入imagedefinitions.json 文件的name 不同。
    • 非常感谢!
    • 这正是我的问题。我在 TaskDefinition 中将容器命名为“app”,但是当我从 CodeBuild 创建 imagedefinition,json 文件时,它使用的是容器名称“api”,因为我从另一个项目中处理了该代码。谢谢老哥
    【解决方案2】:

    您已经创建了一个 ERC 存储库并且您已经上传了一张图片到它? 这可能会有所帮助,我看到这看起来有点类似于您想要实现的部分目标: https://github.com/aws-samples/amazon-ecs-catsndogs-workshop/blob/master/Lab-6-Artifacts/dogs/buildspec.yml

    【讨论】:

      猜你喜欢
      • 2020-10-08
      • 2021-01-24
      • 1970-01-01
      • 2017-07-30
      • 2020-12-04
      • 1970-01-01
      • 2020-11-22
      • 2020-07-29
      • 2020-10-06
      相关资源
      最近更新 更多