AWS Fargate部署:“无效的操作配置AWS ECS容器*****不存在”

时间:2018-10-05 10:36:04

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

我正在使用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不存在”

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

2 个答案:

答案 0 :(得分:3)

您似乎正在使用Continuous Deployment with AWS CodePipeline教程。在Prerequisites中,您应该具有任务定义和使用该任务定义的服务。

运行CodePipeline中的 ECS部署步骤时,它将查找您指定服务的任务定义,创建新的任务定义,并在其中使用相同的name更新容器作为imagedefinition.json文件中的文件。

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

答案 1 :(得分:0)

您已经创建了ERC存储库,并且已将图像上传到其中? 这可能会有所帮助,我发现这看起来与您要实现的目标有些相似: https://github.com/aws-samples/amazon-ecs-catsndogs-workshop/blob/master/Lab-6-Artifacts/dogs/buildspec.yml