我的 AWS CloudFormation 堆栈卡滞在 CREATE_IN_PROGRESS、UPDATE_IN_PROGRESS、UPDATE_ROLLBACK_IN_PROGRESS 或 DELETE_IN_PROGRESS 状态。
简短描述
大多数情况下,您必须等待 CloudFormation 堆栈超时。超时时间取决于 CloudFormation 等待达到所需状态的单个资源稳定要求。
您可以控制堆栈超时,并使用回滚触发器来控制 CloudFormation 等待的时长。有关回滚触发器的更多信息,请参阅使用 AWS CloudFormation 堆栈终止保护和回滚触发器来维持基础设施可用性。
解决方法
识别停滞的资源
完成以下步骤:
- 打开 CloudFormation 控制台。
- 在导航窗格中,选择 Stacks(堆栈),然后选择处于卡滞状态的堆栈。
- 选择 Resources(资源)选项卡。
- 在 Resources(资源)部分中,请参阅 Status(状态)列。查找卡滞在 CREATE_IN_PROGRESS、UPDATE_IN_PROGRESS 或 DELETE_IN_PROGRESS 状态的资源。
- 在 AWS 管理控制台中,检查您的资源,以查找与您的资源对应的服务。
**注意:**例如,如果 Amazon Elastic Container Service (Amazon ECS) 服务停留在创建状态,请在 Amazon ECS 控制台中检查该资源。
如果资源在其相应的控制台中没有显示任何错误,请使用 AWS CloudTrail 日志对此问题进行故障排除。有关查看 CloudTrail 日志的信息,请参阅使用 CloudTrail 事件历史记录查看事件。
查看 CloudTrail 日志
完成以下步骤:
- 打开 CloudFormation 控制台。
- 在导航窗格中,选择 Stacks(堆栈),然后选择处于卡滞状态的堆栈。
- 选择 Resources(资源)选项卡。
- 在 Resources(资源)部分中,请参阅 Status(状态)列。查找所有停滞在 CREATE_IN_PROGRESS、UPDATE_IN_PROGRESS 或 DELETE_IN_PROGRESS 状态的资源。
- 选择 Events(事件)选项卡,然后记下 CloudFormation 初始化该停滞资源创建的时间戳。
- 打开 CloudTrail 控制台。
- 在导航窗格中,选择 Event history(事件历史记录)。
- 对于 Time range(时间范围),输入您在步骤 5 中记下的时间戳的日期和时间,作为开始时间(从)。对于结束时间(至),输入比开始时间晚 5 分钟的日期和时间。
注意:例如,如果 CloudFormation 于 2020-01-01 上午 9 点初始化了停滞资源的创建,则输入 2020-01-01 的上午 9 点作为开始时间,输入 2020-01-01 的上午 9:05 作为结束时间。
- 选择 Apply(应用)。
- 在返回的事件列表中,查找与资源的创建或更新 API 调用相关的 API 调用。例如,您可以查找适用于 Amazon Elastic Block Store (Amazon EBS) 卷更新的 ModifyVolume。
**提示:**请等待几分钟,等待 API 调用显示在 CloudTrail 日志中。API 调用不总是会立即出现在日志中。
绕过超时
您可以绕过超时来解决堆栈的状态。有关详细信息,请参阅如何阻止我的 Amazon ECS 服务在 CloudFormation 中无法稳定?以及如何删除 CloudFormation 中停滞在 DELETE_FAILED 状态或 DELETE_IN_PROGRESS 状态的 Lambda 支持的自定义资源?
如果堆栈卡滞在 CREATE_IN_PROGRESS 或 UPDATE_IN_PROGRESS 状态,则可以使用以下堆栈操作来停止进程:
**注意:**要了解问题的根本原因,请参阅对 CloudFormation 进行故障排除。