如何删除已关闭或暂停的 AWS 账户中 CloudFormation 堆栈集的堆栈实例?

1 分钟阅读
0

我想删除一个 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 替换为堆栈实例所在的区域。


相关信息

堆栈集的权限模式

堆栈集和堆栈实例状态代码

AWS 官方
AWS 官方已更新 2 年前