如何在 AWS CloudFormation 中从已删除或暂停的账户中删除 StackSets?

上次更新时间:2020 年 6 月 22 日

我想要从 AWS CloudFormation StackSet 中删除一个堆栈实例,但由于目标 AWS 账户被删除或暂停,删除失败。

简短描述

您无法删除引用已删除或暂停的目标账户中的堆栈的堆栈实例。删除操作失败,且该堆栈实例状态变为 INOPERABLE。删除操作失败是因为 AWSCloudFormationStackSetAdministrationRole 无法代入角色 AWSCloudFormationStackSetExecutionRole,当账户被删除或暂停时,该角色不可用。

要删除 INOPERABLE 堆栈实例,您必须执行 DeleteStackInstances 操作并将 RetainStacks 设置为 true。此操作会将堆栈实例从 StackSet 中解耦,以执行任何未来操作。

注意:以下解决方法仅在 StackSet 的 PermissionModel 被设置为 SELF-MANAGED 时适用。

解决方法

您可以使用 AWS CloudFormation 控制台或 AWS 命令行界面 (AWS CLI) 删除 INOPERABLE 堆栈实例。

AWS CloudFormation 控制台

1.    打开 AWS CloudFormation 控制台

2.    在导航窗格中,选择 StackSets

3.    从 StackSet 名称列中,选择包含您想要删除的实例的堆栈集。

4.    依次选择操作从 StackSets 中删除堆栈

5.    在设置部署选项页面的账号中,输入已暂停或删除的 AWS 账户的 12 位账号。

6.    在指定区域 部分中,选择您的堆栈实例的 AWS 区域。

7.    在部署选项部分中,打开保留堆栈,然后选择下一步

8.    在查看页面上,选择提交

AWS CLI

在 AWS CLI 中,运行 delete-stack-instances 命令:

$ aws cloudformation delete-stack-instances --stack-set-name awsstacksetname123 --accounts stackinstanceaccount --regions stackinstanceregion --retain-stacks

注意:awsstacksetname123 替换为您的 StackSet 名称。将 stackinstanceaccount 替换为已删除或暂停账户的 AWS 账号。将 stackinstanceregion 替换为堆栈实例所在的区域。


这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助?