我的 AWS CloudFormation 堆栈目前停滞在以下状态之一:
CREATE_IN_PROGRESS
UPDATE_IN_PROGRESS
UPDATE_ROLLBACK_IN_PROGRESS
DELETE_IN_PROGRESS
如何修复此问题?
解决方法
在大多数情况下,您必须等待您的 CloudFormation 堆栈超时。超时长度各不相同,它取决于 CloudFormation 等待达到所需状态的单个资源稳定要求。
您可以控制堆栈超时并使用回滚触发器来控制 CloudFormation 等待的时长。有关回滚触发器的更多信息,请参阅使用 AWS CloudFormation 堆栈终止保护和回滚触发器以维护基础设施可用性。
您可以绕过某些自定义资源和 Amazon Elastic Container Service (Amazon ECS) 资源的超时。要验证哪个资源停滞并确定是否必须等待,或者是否可以绕过超时,请执行以下操作:
识别停滞的资源
- 打开 CloudFormation 控制台。
- 在导航窗格中,选择堆栈,然后选择处于停滞状态的堆栈。
- 选择资源选项卡。
- 在资源部分的状态列中,查找已启动但未完成创建、更新或删除进程的堆栈中的资源。
**注意:**您正在查找的资源可能处于 CREATE_IN_PROGRESS、UPDATE_IN_PROGRESS 或 DELETE_IN_PROGRESS 状态下。
- 在 AWS 管理控制台中,检查您的资源的服务是否与您的资源对应。
**注意:**控制台会因处于停滞状态的资源不同而有所区别。例如,如果 Amazon ECS 服务停滞在创建状态,则在 Amazon ECS 控制台中检查该资源。
检查 AWS CloudTrail 日志
如果资源在其对应的控制台中未显示任何错误,则您可以对 CloudTrail 日志中的问题进行排查。有关查看 CloudTrail 日志的信息,请参阅使用 CloudTrail 事件历史记录来查看事件。
- 打开 CloudFormation 控制台。
- 在导航窗格中,选择堆栈,然后选择处于停滞状态的堆栈。
- 选择资源选项卡。
- 在资源部分的状态列中,查找已启动但未完成创建、更新或删除进程的堆栈中的资源。
**注意:**您正在查找的资源可能处于 CREATE_IN_PROGRESS、UPDATE_IN_PROGRESS 或 DELETE_IN_PROGRESS 状态下。
- 选择事件选项卡,然后记录 CloudFormation 对该停滞资源创建进行初始化的时间戳。
- 打开 CloudTrail 控制台。
- 在导航窗格中,选择事件历史记录。
- 对于时间范围的开始时间(开始时间),输入您在第 5 步中记下的日期和时间。对于结束时间(至),输入超过开始时间 5 分钟的日期和时间。
**注意:**例如,如果 CloudFormation 在 2020 年 1 月 1 日上午 9:00 对您的停滞资源创建进行初始化,则输入 2020 年 1 月 1 日 上午09:00 作为开始时间,输入 2020 年 1 月 1 日 上午 9:05 作为结束时间。
- 选择应用。
- 在返回的事件列表中,查找与创建或更新资源的 API 调用相关的 API 调用。例如,您可以查找用于 Amazon Elastic Block Store (Amazon EBS) 卷更新的 ModifyVolume。
**提示:**尝试等待几分钟,以便该 API 调用显示在 CloudTrail 日志中。API 调用并不会总是立即显示在日志中。
绕过自定义资源和 Amazon ECS 服务的超时
在某些情况下,您可以绕过超时并使您的堆栈快速退出停滞状态。这些情况包括自定义资源和 Amazon ECS 服务。有关更多信息,请参阅以下内容: