我想删除一个 AWS CloudFormation 堆栈集中的一个堆栈实例,但由于目标 AWS 账户已关闭或暂停,删除失败。
简短描述
AWS 账户关闭或暂停后,CloudFormation StackSets 管理角色将不再能够访问该账户中的 StackSets 执行角色。这将导致无法在该账户的堆栈实例上运行堆栈集操作。如果您尝试删除已关闭或暂停账户中的堆栈实例,则可能会收到错误消息。然后,堆栈实例状态可能会更改为 INOPERABLE(不可操作)。
要删除已关闭或暂停账户的堆栈实例,您必须执行 DeleteStackInstances 操作并将 RetainStacks 选项设置为 true。这会将该堆栈实例与该堆栈集分离,但不会删除目标账户中的堆栈实例。
下面的解决步骤取决于堆栈集使用的权限模式:自行管理的权限还是 AWS Organizations 的服务托管权限。
注意:如果您在运行 AWS Command Line Interface(AWS CLI)命令时遇到错误,请确保您使用的是最新版的 AWS CLI。
解决方法
为使用自行管理的权限的堆栈集删除不可操作的堆栈实例
如果堆栈集使用自行管理的权限,您可以使用 CloudFormation 控制台或 AWS CLI 删除 INOPERABLE(不可操作的)堆栈实例。
CloudFormation 控制台:
1. 打开 CloudFormation 控制台。
2. 在导航窗格中,选择 StackSets。
3. 从 StackSet 名称列中,选择包含您想要删除的实例的堆栈集。
4. 依次选择操作和从 StackSets 中删除堆栈。
5. 在 Set deployment options(设置部署选项)页面上,对u有 Account numbers(账号),输入已关闭或暂停的 AWS 账户的 12 位账号。
6. 在指定区域 部分中,选择您的堆栈实例的 AWS 区域。
7. 在部署选项部分中,打开保留堆栈,然后选择下一步。
8. 在 Review(检查)页面上,选择 Submit(提交)。
AWS CLI:
在 AWS CLI 中,运行以下命令:
$ aws cloudformation delete-stack-instances --stack-set-name YourStackSetName --accounts YourStackInstanceAccount --regions YourStackInstanceRegion --retain-stacks
注意:请将 YourStackSetName 替换为您的堆栈集的名称。将 YourStackInstanceAccount 替换为已关闭或暂停的账户的 AWS 账号。将 YourStackInstanceRegion 替换为堆栈实例所在的区域。
为使用服务托管权限的堆栈集删除不可操作的堆栈实例
如果堆栈集使用服务托管权限,CloudFormation 控制台的操作只能针对整个组织部门(OU)。要删除单个账户中的特定堆栈实例,必须使用 AWS CLI。
在 AWS CLI 中,运行以下命令:
aws cloudformation delete-stack-instances --stack-set-name YourStackSetName --deployment-targets Accounts=YourStackInstanceAccount --regions YourStackInstanceRegion --retain-stacks
注意:请将 YourStackSetName 替换为您的堆栈集的名称。将 YourStackInstanceAccount 替换为已关闭或暂停的账户的 AWS 账号。将 YourStackInstanceRegion 替换为堆栈实例所在的区域。
相关信息
堆栈集的权限模式
堆栈集和堆栈实例状态代码