我的 AWS CloudFormation 堆栈停滞在 UPDATE_ROLLBACK_FAILED 状态。
简短描述
如果您的堆栈在更新失败之后停滞在 UPDATE_ROLLBACK_FAILED 状态,则您只能在堆栈上执行 ContinueUpdateRollback 或 DeleteStack 操作。这是因为 CloudFormation 需要您提供进一步的输入,以确认堆栈不与其尝试回滚到的模板同步。要重试回滚并解决错误,您可以使用 ContinueUpdateRollback。
**提示:**要解决此错误,您可能需要提高限制,更改权限或修改其他设置。有关导致更新回滚失败的常见错误的信息,请参阅更新回滚失败。
在某些情况下,重试回滚操作不会解决该错误。在这些情况下,您必须跳过资源,并且还要确认这些资源不再反映 CloudFormation 模板中的所需状态。要跳过导致回滚失败的资源,请完成解决方法部分中的以下步骤。
解决方法
您可以使用 CloudFormation 控制台或 AWS 命令行界面 (AWS CLI) 将堆栈回滚到某个工作状态。
**注意:**如果在运行 AWS CLI 命令时收到错误,请确保您使用的是最新的 AWS CLI 版本。
CloudFormation 控制台
1. 打开 CloudFormation 控制台。
2. 在导航窗格中,选择堆栈。
3. 在 Stack name(堆栈名称)列中,选择停滞在 UPDATE_ROLLBACK_FAILED 状态的堆栈。
4. 如果您不想跳过资源,请依次选择 Stack Actions(堆栈操作)和 Continue update rollback(继续更新回滚)。
-或者-
如果要在回滚期间跳过 FAILED 资源,请完成以下操作:
1. 在 Stack name(堆栈名称)列中,选择停滞在 UPDATE_ROLLBACK_FAILED 状态的堆栈。
2. 选择 Stack Actions(堆栈操作),然后选择 Continue update rollback(继续更新回滚)。
3. 在 Continue update rollback(继续更新回滚)对话框中,展开 Advanced troubleshooting(高级故障排除)。
4. 在 Resources to skip - optional(跳过的资源 - 可选)部分中,选择您要跳过的资源。
5. 选择 Continue update rollback(继续更新回滚)。
AWS CLI
在 AWS CLI 中,运行 continue-update-rollback 命令。例如:
$ aws cloudformation continue-update-rollback --stack-name awsstackname123 --resources-to-skip awsfaultyresource123
**注意:**将 awsstackname123 替换为您的堆栈名称。将 awsfaultyresource123 替换为您的资源的逻辑 ID。
**重要提示:**CloudFormation 会将指定资源的状态设置为 UPDATE_COMPLETE。然后,CloudFormation 将继续回滚堆栈。回滚完成后,跳过的资源的状态将与堆栈模板中资源的状态不一致。在执行另一个堆栈更新之前,请更新堆栈或资源以使其互相保持一致。如果没有这样做,后续堆栈更新可能失败,并且堆栈将无法恢复。
如果您的嵌套堆栈必须回滚到某个工作状态,请参阅使用 ResourcesToSkip 恢复嵌套的堆栈层次结构。