AWS Fargate 部署:"Invalid action configuration The AWS ECS container ***** does not exist"

AWS Fargate deploy: "Invalid action configuration The AWS ECS container ***** does not exist"

我正在使用 Terraform 来配置所需的资源。

我有一个 terraform codepipeline resource 并且 Production 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

我得到的错误重复了这一行的 "name" 值:

"Invalid action configuration The AWS ECS container docker-image-name does not exist"

我应该在这里输入什么名字?

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

看起来您正在使用 Continuous Deployment with AWS CodePipeline tutorial. From Prerequisites,您应该有一个任务定义,以及一个使用该任务定义的服务。

当 CodePipeline 中的 ECS Deploy 步骤运行时,它会查找您指定的服务的任务定义,创建一个新的任务定义,并在其中更新容器name 作为您 imagedefinition.json 文件中的那个。

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

的容器