上次更新时间:2020 年 6 月 22 日
我想要从 AWS CloudFormation StackSet 中删除一个堆栈实例,但由于目标 AWS 账户被删除或暂停,删除失败。
简短描述您无法删除引用已删除或暂停的目标账户中的堆栈的堆栈实例。删除操作失败,且该堆栈实例状态变为 INOPERABLE。删除操作失败是因为 AWSCloudFormationStackSetAdministrationRole 无法代入角色 AWSCloudFormationStackSetExecutionRole,当账户被删除或暂停时,该角色不可用。
要删除 INOPERABLE 堆栈实例,您必须执行 DeleteStackInstances 操作并将 RetainStacks 设置为 true。此操作会将堆栈实例从 StackSet 中解耦,以执行任何未来操作。
注意:如果您在运行 AWS 命令行界面 (AWS CLI) 命令时遇到错误,请确保您运行的是最新版本的 AWS CLI。
解决方法注意:以下解决方法仅在 StackSet 的 PermissionModel 被设置为 SELF-MANAGED 时适用。
您可以使用 AWS CloudFormation 控制台 AWS CLI 删除 INOPERABLE 堆栈实例。
AWS CloudFormation 控制台1.打开 AWS CloudFormation 控制台。
2.在导航窗格中,选择 StackSets。
3.从 StackSet 名称列中,选择包含您想要删除的实例的堆栈集。
4.依次选择操作和从 StackSets 中删除堆栈。
5.在设置部署选项页面的账号中,输入已暂停或删除的 AWS 账户的 12 位账号。
6. 在 Specify regions(指定区域)部分中,选择您的堆栈实例的 AWS 区域。
7.在 Deployment options(部署选项)部分中,打开 Retain stacks(保留堆栈),然后选择 Next(下一步)。
8. 在 Review(查看)页面上,选择 Submit(提交)。
AWS CLI在 AWS CLI 中,运行以下命令:
$ aws cloudformation delete-stack-instances --stack-set-name awsstacksetname123 --accounts stackinstanceaccount --regions stackinstanceregion --retain-stacks
注意:将 awsstacksetname123 替换为 StackSet 的名称。将 stackinstanceaccount 替换为已删除或暂停账户的 AWS 账号。将 stackinstanceregion 替换为堆栈实例所在的区域。