Amazon ecs 在ECS部署中更新Docker映像

Amazon ecs 在ECS部署中更新Docker映像,amazon-ecs,Amazon Ecs,我通过命令在AWS ECS上部署了一个CloudFormation堆栈,比如说teststack aws cloudformation deploy --template-file ./CloudFormationTemplate.yml --stack-name teststack --force-upload 我的堆栈执行某个Docker映像,比如说myname/myimage:latest 我想通过管道部署和更新堆栈(我使用的是GitLab,但我想这与这里感兴趣的问题无关) 在此设置中,

我通过命令在AWS ECS上部署了一个CloudFormation堆栈,比如说
teststack

aws cloudformation deploy --template-file ./CloudFormationTemplate.yml --stack-name teststack --force-upload
我的堆栈执行某个Docker映像,比如说
myname/myimage:latest

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

在此设置中,我可以修改我的Docker图像,而无需触摸CloudFormation模板文件;然后我构建并将新图像
myname/myimage:latest
推送到我的注册表;最后,我触发了一个新的管道,它再次启动命令
aws cloudformation deploy--强制上载

执行aws cloudformation部署时--强制上载,管道返回
无需部署的更改。堆栈名称是最新的

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


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

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

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

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

我希望能够避免使用与最新版本不同的标签,因为这意味着我需要在每次更新堆栈时更新CloudFormation模板,以更改图像版本。但是我正在考虑一个程序,通过一些脚本自动执行这个程序。。。感谢您的建议,我将尝试一下。我选择了标记解决方案,因为编辑CloudFormation模板插入环境变量非常简单。谢谢你的提示。