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 配置

springcloud openFeign 请求超时问题解决

Spring Cloud gateway 30s 超时,