【问题标题】:Timeout configuration for CloudFormationCloudFormation 的超时配置
【发布时间】: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 部署?

【问题讨论】:

    标签: amazon-cloudformation amazon-ecs aws-codepipeline


    【解决方案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
      

      【讨论】:

        猜你喜欢
        • 2017-08-08
        • 2018-03-11
        • 2013-02-06
        • 1970-01-01
        • 2017-06-04
        • 1970-01-01
        • 2019-08-04
        • 1970-01-01
        • 2012-02-23
        相关资源
        最近更新 更多