如何在 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 替换为堆栈实例所在的区域。