为什么我的 CloudFormation 堆栈停滞在 IN_PROGRESS 状态?

2 分钟阅读
0

我的 AWS CloudFormation 堆栈停滞在 CREATE_IN_PROGRESS、UPDATE_IN_PROGRESS、UPDATE_ROLLBACK_IN_PROGRESS 或 DELETE_IN_PROGRESS 状态。

简短描述

大多数情况下,您必须等待 CloudFormation 堆栈超时。超时时间各不相同,并且基于 CloudFormation 等待达到所需状态的单个资源稳定要求。

您可以控制堆栈超时,并使用回滚触发器来控制 CloudFormation 等待的时长。有关回滚触发器的更多信息,请参阅 Use AWS CloudFormation stack termination protection and rollback triggers to maintain infrastructure availability

解决方案

识别停滞的资源

1.    打开 CloudFormation 控制台

2.    在导航窗格中,选择堆栈,然后选择处于停滞状态的堆栈。

3.    选择资源选项卡。

4.    在资源部分中,请参阅状态列。查找在创建、更新或删除过程中停滞的任何资源。
**注意:**这些资源可能处于 CREATE_IN_PROGRESS、UPDATE_IN_PROGRESS 或 DELETE_IN_PROGRESS 状态。

5.    在 AWS 管理控制台中,检查您的资源,以查找与您的资源对应的服务。
**注意:**控制台因卡滞的资源而异。例如,如果 Amazon Elastic Container Service(Amazon ECS)服务停留在创建状态,请在 Amazon ECS 控制台中检查该资源。

查看 AWS CloudTrail 日志

如果资源在其相应的控制台中没有显示任何错误,请使用 AWS CloudTrail 日志排查该问题。有关查看 CloudTrail 日志的信息,请参阅 Viewing events with CloudTrail Event history

1.    打开 CloudFormation 控制台

2.    在导航窗格中,选择堆栈,然后选择处于停滞状态的堆栈。

3.    选择资源选项卡。

4.    在资源部分中,请参阅状态列。查找在创建、更新或删除过程中停滞的任何资源。
**注意:**这些资源可能处于 CREATE_IN_PROGRESS、UPDATE_IN_PROGRESS 或 DELETE_IN_PROGRESS 状态。

5.    选择事件选项卡,然后记下 CloudFormation 初始化该停滞资源创建的时间戳。

6.    打开 CloudTrail 控制台

7.    在导航窗格中,选择事件历史记录

8.    对于时间范围,输入您在步骤 5 中记下的时间戳的日期和时间,作为开始时间()。对于结束时间(),输入比开始时间晚五分钟的日期和时间。
注意:例如,假设 CloudFormation 在 2020-01-01 上午 9:00 初始化了您的停滞资源的创建。在这种情况下,输入 2020-01-01上午 09:00 作为开始时间,输入 2020-01-01上午 9:05 作为结束时间。

9.    选择应用

10.    在返回的事件列表中,找到与资源的创建或更新 API 调用相关的 API 调用。例如,您可以找到适用于 Amazon Elastic Block Store(Amazon EBS)卷更新的 ModifyVolume
**提示:**请等待几分钟,等待 API 调用显示在 CloudTrail 日志中。API 调用不总是会立即出现在日志中。

绕过超时

堆栈停滞的原因有很多。因此,解决方案因停滞的资源而异。在某些情况下,可以绕过超时来快速解决堆栈的状态。例如,您可以绕过自定义资源和 Amazon ECS 服务的超时。有关更多信息,请参阅以下文章:

如果堆栈停滞在 CREATE_IN_PROGRESSUPDATE_IN_PROGRESS 状态,则可以使用堆栈操作来停止进程:

**注意:**要了解问题的根本原因并在将来的部署中避免该问题,请参阅 Troubleshooting CloudFormation 指南。


AWS 官方
AWS 官方已更新 1 年前