将映像推送到ECR时如何部署到ECS?

时间:2020-05-20 17:25:34

标签: amazon-web-services amazon-ecs amazon-ecr

我的用例非常简单,但是我发现的所有教程都完成了整个push→build→push to ecr→部署。我已经有一个构建图像并将其推送到ECR的位桶管道,我需要的是某种方法来检测是否推送了新图像,然后用新图像更新ECS任务。到目前为止,这就是我的CodePipeline管道的样子:

enter image description here

这是我的“部署”步骤的样子:

enter image description here

这是我得到的错误:

enter image description here

此外,如何连续更新ECS任务以使用最新图像?

1 个答案:

答案 0 :(得分:0)

当您使用ECR作为源时,ECR会生成一个名为'imageDetail.json'的工件文件,其格式为[1]。但是ECS部署阶段需要一个名为'imagedefinitions.json'的文件,其格式不同[2]。

要提供所需的文件,请在源代码之间添加一个CodeBuild步骤,并使用以下buildspec进行部署:(基本转换文件)

version: 0.2
phases:
    install:
        runtime-versions:
            docker: 18
    build:
        commands:
            - apt-get install jq -y
            - ContainerName="todo"
            - ImageURI=$(cat imageDetail.json | jq -r '.ImageURI')
            - printf '[{"name":"CONTAINER_NAME","imageUri":"IMAGE_URI"}]' > imagedefinitions.json
            - sed -i -e "s|CONTAINER_NAME|$ContainerName|g" imagedefinitions.json
            - sed -i -e "s|IMAGE_URI|$ImageURI|g" imagedefinitions.json
            - cat imagedefinitions.json

artifacts:
    files:
        - imagedefinitions.json

重要1:更新任务定义中存在的“ ContainerName”

重要2:确保部署操作的输入工件是BuildArtifact。

  1. https://docs.aws.amazon.com/codepipeline/latest/userguide/file-reference.html#file-reference-ecs-bluegreen
  2. https://docs.aws.amazon.com/codepipeline/latest/userguide/file-reference.html#pipelines-create-image-definitions