我在 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 映像?
答案 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