CloudFormation 的超时配置
Posted
技术标签:
【中文标题】CloudFormation 的超时配置【英文标题】:Timeout configuration for CloudFormation 【发布时间】:2020-05-02 20:59:33 【问题描述】:我正在对 ECS 运行 CloudFormation 更新。由 CodePipeline 触发。我想在超时后中止 CloudFormation 部署并回滚到以前的版本。
完成此任务的最佳方法是什么?我看到了一些关于 WaitConditions 的东西,但我不确定这是正确的机制。
我还发现您可以在嵌套堆栈 https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-stack.html#cfn-cloudformation-stack-timeoutinminutes 上配置 TimeoutInMinutes
- 但听起来您不能在堆栈的顶层或任意资源上应用类似的属性?
如果没有成功,我是否可以使用另一种方法在几分钟后中止 Codepipeline->Cloudformation->ECS 部署?
【问题讨论】:
【参考方案1】:这是对 CodePipeline ECS Deploy 操作(ECS,而不是 ECS B/G)的普遍抱怨,如果您推送错误的图像,则必须等待 1 小时才能发生超时,然后才能重试管道。
目前,CodePipeline 不支持回滚。您可以使用 CloudWatch [1] 检测失败的管道并采取一些措施。该操作可能会前滚到一个好的版本。
[1] 使用 Amazon CloudWatch 事件检测管道状态的变化并做出反应 - https://docs.aws.amazon.com/codepipeline/latest/userguide/detect-state-changes-cloudwatch-events.html
【讨论】:
【参考方案2】:我们不使用 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
【讨论】:
以上是关于CloudFormation 的超时配置的主要内容,如果未能解决你的问题,请参考以下文章
Spring Cloud 源码解读之 如何配置好OpenFeign的各种超时时间!
《Spring Cloud 》Eureka服务调用服务超时重试机制
Spring Cloud Alibaba - 14 OpenFeign自定义配置 + 调用优化 + 超时时间
笔记:Spring Cloud Feign Hystrix 配置