cloudformation ecs强制进行新部署

时间:2020-03-04 13:38:56

标签: amazon-web-services amazon-cloudformation

cloudformation中的--force-new-deployment标志等效于什么? (aws ecs update-service --cluster --service --force-new-deployment)

在我的cloudformation模板中,我的docker image标签是最新的。但是,如果我重播堆栈,我希望能够强制重新部署。

谢谢

3 个答案:

答案 0 :(得分:1)

将CloudFormation看作是预配置服务或协调器。

Image指定为repository-url/image:tag肯定会从您的存储库中获取带有特定标签的指定图像,但仅在进行堆栈操作时才可以。堆栈操作完成后,对服务的任何更改将取决于下一个堆栈操作。

您可以在这里做任何一个

  • Cloudwatch Event based rule targeting a Lambda Function,只要有图像上传到ECR。
  • 或者在使用ECR以外的其他仓库的情况下,请配置钩子,使其在每次上传新图片时都会调用update-service --cluster --service --force-new-deployment ...命令。

注意事项

  • 这可能导致您的堆栈处于DRIFTED状态。
  • 每当您计划更新堆栈时,只要确保使堆栈的Image属性值与服务中运行的最新值保持同步即可。

答案 1 :(得分:1)

如果需要,这是我想在堆栈更新后强制部署的方法。服务名称与堆栈名称相同,因此如果您的服务名称不同,则需要相应调整。

START_TIME=`date +%s`
aws cloudformation deploy --stack-name $STACK_NAME [other options]
LAST_DEPLOY=`aws ecs describe-services --services $STACK_NAME --query "services[0].deployments[?status=='PRIMARY'].createdAt" --output text`
if [ "$START_TIME" -gt "${LAST_DEPLOY%.*}" ]; then aws ecs update-service --service $STACK_NAME --force-new-deployment; fi

答案 2 :(得分:0)

我能想到的最好方法是将我的健康检查从 curl -f 更改为 curl --fail 并返回以强制进行新的部署。不理想,但有效。

我对更好的方式感兴趣,最好也内置到 CloudFormation 中。