在 ECS 部署中更新 Docker 镜像

时间:2021-01-18 14:46:42

标签: amazon-ecs

我在 AWS ECS 上部署了 CloudFormation 堆栈,例如 teststack,通过命令

aws cloudformation deploy --template-file ./CloudFormationTemplate.yml --stack-name teststack --force-upload

我的堆栈执行某个 Docker 映像,例如 myname/myimage:latest

我想通过管道部署和更新堆栈(我正在使用 GitLab,但我想这与这里感兴趣的问题无关)。

在此设置中,我可以在不接触 CloudFormation 模板文件的情况下修改我的 Docker 映像;然后我构建并推送 new 镜像 myname/myimage:latest 到我的注册表;最后,我触发了一个新管道,它再次启动命令 aws cloudformation deploy ... --force-upload

执行 aws cloudformation deploy ... --force-upload 时,管道返回 No changes to deploy. Stack stack-name is up to date

显然,由于堆栈正在执行 latest 标记的图像,因此它返回所有内容都是最新的,而无需拉取新的 latest 图像。

有没有办法强制 AWS CloudFormation 从我的注册表中提取新的 Docker 映像?

1 个答案:

答案 0 :(得分:1)

此处是否可以选择使用 latest 以外的标签?如果是这样,那么您可以标记要更新的最新更改,例如 myname/myimage:0-0-1,然后更新 cloudformation 模板中的容器定义以使用此新标记。

如果您希望继续使用 latest 标记,您可能无法通过 cloudformation 模板更新强制部署。在我的项目中,当我不想更改标签时,我最终使用 AWS CLI 进行了更新:

aws ecs update-service --service ${ecsService}  --cluster ${ecsCluster} --region ${region} --force-new-deployment