当我尝试部署 AWS Amplify 应用程序时,我收到类似如下的 AWS CloudFormation 错误消息:“Resource is not in the state stackUpdateComplete”。我该如何解决此问题?
简短描述
要解决 Amplify 项目中的 CloudFormation 堆栈问题,请先查看 CloudFormation 控制台中的以下内容,确定导致问题的原因:
- 后端堆栈的 Status code(状态代码)和 Status reason(状态原因)。
- 后端堆栈近期 Events(事件)的 Status(状态)、Status reason(状态原因)和 Logical ID(逻辑 ID)值。
- 后端堆栈 Resources(资源)的 Status(状态)、Status reason(状态原因)和 Logical ID(逻辑 ID)值。
**注意:**Status reason(状态原因)值包含 CloudFormation 返回的错误消息,用于确定导致错误的原因。
然后,根据控制台中列出的 Status(状态)、Status reason(状态原因)和 Logical ID(逻辑 ID)值修复问题。
解决方法
**注意:**Amplify 预置或更新的 CloudFormation 堆栈可能会出于许多原因返回错误。以下是 CloudFormation 堆栈返回 Amplify 项目相关错误的最常见原因:
在 CloudFormation 控制台中查看堆栈的状态代码和状态原因,确定导致问题的原因
1. 打开 Amplify 控制台。
2. 选择 Backend environments(后端环境)选项卡。然后,选择应用程序的后端环境。
3. 选择 Overview(概览)选项卡。然后,选择 View in CloudFormation(在 CloudFormation 中查看)。后端环境的关联 CloudFormation 堆栈的 Stack info(堆栈信息)页面会在 CloudFormation 控制台中打开。
4. 在 Overview(概览)窗格中,查看 Status(状态)和 Status reason(状态原因)值。这是后端堆栈的状态代码 Status reason(状态原因)。
**注意:**如果项目的根堆栈处于 UPDATE_ROLLBACK_FAILED 状态,请按照下文中的说明操作:CloudFormation 堆栈停滞在 UPDATE_ROLLBACK_FAILED 状态时如何对其进行更新?
5. 选择 Events(事件)选项卡。查看处于故障状态的所有近期事件的 Status(状态)、Status reason(状态原因)和 Logical ID(逻辑 ID)值。
**注意:**请务必确定所有处于 UPDATE_FAILED 状态的事件。
6. 选择 Resources(资源)选项卡。查看处于故障状态的所有资源的 Status(状态)、Status reason(状态原因)和 Logical ID(逻辑 ID)值。
7. (仅适用于嵌套堆栈)在 Resources(资源)窗格上,寻找类型为 AWS::CloudFormation::Stack 的资源。然后,查看处于故障状态的嵌套堆栈的 Status reason(状态原因)值。
**重要提示:**进行故障排除时,请忽略状态为 Resource update cancelled(资源更新已取消)的故障资源。此状态表示依赖的下游资源未发生故障,但因其他资源故障也未更新。
根据控制台中列出的 Status(状态)、Status reason(状态原因)和 Logical ID(逻辑 ID)值修复问题
按照 Amplify CLI 问题排查指南中的说明进行操作。有关更多信息,您还可以在 GitHub 的 Amplify CLI 问题页面中搜索特定的 Status reasons(状态原因)。
**注意:**最佳做法是先在非生产环境中测试解决方案。