CloudFormation 的超时配置



我正在运行 ECS 的 CloudFormation 更新。由 CodePipeline 触发。我想中止 CloudFormation 部署并在超时后回滚到以前的版本。

实现这一目标的最佳方法是什么?我看到了一些关于WaitConditions的东西,但我不确定这是正确的机制。

我还发现您可以在嵌套堆栈上配置TimeoutInMinuteshttps://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-stack.html#cfn-cloudformation-stack-timeoutinminutes - 但听起来您不能在堆栈的顶层或任意资源上应用类似的属性?

有没有另一种方法可以使用组合,如果代码管道->Cloudformation->ECS 部署不成功,我可以在几分钟后中止它?

这是 CodePipeline ECS 部署操作(ECS,而不是 ECS B/G(的普遍抱怨,即如果推送错误映像,则必须等待 1 小时超时,然后才能重试管道。

目前,CodePipeline 不支持回滚。您可以使用 CloudWatch [1] 检测失败的管道并采取一些措施。该操作可能会前滚到一个好的版本。

[1] 使用 Amazon CloudWatch Events 检测管道状态的变化并做出反应 - https://docs.aws.amazon.com/codepipeline/latest/userguide/detect-state-changes-cloudwatch-events.html

我们不使用 CodePipeline,我们使用的是 Sceptre。但我想我的解决方法仍然有效。 我的解决方法是,在触发部署之前,请在后台运行脚本。

./deployment-breaker.sh &

而对于剧本

#!/bin/bash
sleep 600
$deploymentStatus = (aws cloudformation describe-stack --stack-name STACK_NAME | jq XXX)
if [[ $deploymentStatus == YOUR_TERMINATE_CONDITION ]]then
aws cloudformation cancel-update-stack --stack-name STACK_NAME
fi

最新更新