使用 AWS Management Console或 AWS CLI 导入服务托管堆栈
AWS CloudFormation 堆栈导入操作可以将现有堆栈导入新的或现有的堆栈集,因此您可以通过一次操作将现有堆栈迁移到堆栈集。StackSets 扩展了堆栈的功能,因此您可以在一次操作中跨多个账户和区域创建、更新或删除堆栈。
堆栈导入的服务托管要求
除了 堆栈导入的要求 部分外,服务托管堆栈导入还需要以下内容。
-
堆栈导入操作需要一个管理账户或委派管理员账户,您可以在其中管理关联的 AWS Organizations 组织,例如使用 StackSets 启用信任访问。
-
目标账户必须是由管理账户或委派管理员账户管理的 AWS Organizations 成员。
-
目标堆栈位于其中一个目标 OU 中。
-
目标账应为 AWS Organizations 的成员。
-
AWS Organizations 访问对于 Organizations 应处于
ACTIVATED
状态。 -
所导入的堆栈应位于任意成员账户中,而不是管理账户中。
将服务托管堆栈导入新堆栈集(控制台)
使用 AWS Management Console 将堆栈导入新堆栈集
要将新堆栈导入堆栈集,请标识包含要导入资源的堆栈。
登录到 AWS Management Console 并打开 AWS CloudFormation 控制台 https://console.aws.amazon.com/cloudformation
。 -
从导航窗格中,选择 StackSets (堆栈集)。
-
在 StackSets (堆栈集) 页面顶部,选择 Create StackSet (创建堆栈集)。
-
将以下信息添加到 Choose a template(选择模板)页面。
-
对于 StackSet permission model(堆栈集权限模型),选择 Service-managed permissions(服务托管权限)。
-
对于 Prerequisite - Prepare template(先决条件 - 准备模板),请选择 Template is ready(模板已就绪)。
-
对于 Amazon S3 URL,请在“Amazon S3 URL”字段中输入您的 Amazon S3 URL。
-
对于上传模板文件,请选择本地计算机中的 CloudFormation 模板。
-
接受您的设置并选择 Next(下一步)。
-
-
将以下信息添加到 Specify StackSet details(指定堆栈集详细信息)页面。
-
在 StackSet name(堆栈集名称)框中输入堆栈集名称。
-
(可选)在 StackSet description(堆栈集描述)部分中输入描述。
在 Configure StackSet options(配置堆栈集选项)页面上,查看您的选项,然后选择 Next(下一步)。
-
-
将以下信息添加到 Set deployment options(设置部署选项)页面。
-
对于 Add stacks to stack set(将堆栈添加到堆栈集),选择 Import stacks to stack set(将堆栈导入堆栈集)。
-
对于 Stacks to import(要导入的堆栈),选择堆栈导入方法。
-
对于 Stack ID(堆栈 ID),输入您的堆栈 ID。
-
对于堆栈 URL,请输入该 Amazon S3 URL。
-
-
-
将以下信息添加到 Associate organizational units(关联组织单位)部分。
-
选择 Associate with organization(与组织关联)以使用根 OU。
-
选择 Associate with organizational units (OUs) [与组织单位(OU)关联] 以输入要导入堆栈的父 OU ID。例如,如果
Stack 1
和Stack 2
位于OU1
下,而Stack 3
位于OU2
下,则输入OU1
和OU2
。
接受您的设置并选择 Next(下一步)。
-
-
在 Review(审核)页面上,检查您的设置,然后选择 Submit(提交)。
创建服务托管堆栈并将其导入现有堆栈集(控制台)
要将现有堆栈导入新堆栈集,请标识包含要导入资源的堆栈。
创建堆栈集并导入堆栈
登录到 AWS Management Console 并打开 AWS CloudFormation 控制台 https://console.aws.amazon.com/cloudformation
。 -
从导航窗格中,选择 StackSets (堆栈集)。
-
在 StackSets (堆栈集) 页面顶部,选择 Create StackSet (创建堆栈集)。
-
将以下信息添加到 Choose a template(选择模板)页面。
-
对于 StackSet permission model(堆栈集权限模型),选择 Service-managed permissions(服务托管权限)。
-
对于 Prerequisite - Prepare template(先决条件 - 准备模板),请选择 Template is ready(模板已就绪)。
-
对于 Amazon S3 URL,请在“Amazon S3 URL”字段中输入您的 Amazon S3 URL。
-
对于上传模板文件,请选择本地计算机中的 CloudFormation 模板。
-
接受您的设置并选择 Next(下一步)。
-
-
将以下信息添加到 Specify StackSet details(指定堆栈集详细信息)页面。
-
在 StackSet name(堆栈集名称)框中输入堆栈集名称。
-
(可选)在 StackSet description(堆栈集描述)部分中输入描述。
在 Configure StackSet options(配置堆栈集选项)页面上,查看您的选项,然后选择 Next(下一步)。
-
-
将以下信息添加到 Set deployment options(设置部署选项)页面。
-
对于 Add stacks to stack set(将堆栈添加到堆栈集),请选择 Deploy new stacks(部署新堆栈)。
-
-
将以下信息添加到 Associate organizational units(关联组织单位)部分。
-
选择 Associate with organization(与组织关联)以使用根 OU。
-
选择 Associate with organizational units (OUs) [与组织单位(OU)关联] 以输入要导入堆栈的父 OU ID。例如,如果
Stack 1
和Stack 2
位于OU1
下,而Stack 3
位于OU2
下,则输入OU1
和OU2
。
-
-
对于 Specify regions(指定区域)和 Deployment options(部署选项),查看您的选择。
接受您的设置并选择 Next(下一步)。
-
在 Review(审核)页面上,检查您的设置,然后选择 Submit(提交)。
将服务托管堆栈导入现有堆栈集(控制台)
选择堆栈集并确定您要导入的堆栈。
将堆栈导入现有堆栈集
登录到 AWS Management Console 并打开 AWS CloudFormation 控制台 https://console.aws.amazon.com/cloudformation
。 -
从导航窗格中,选择 StackSets (堆栈集)。
-
选择要将堆栈导入到的堆栈集,然后从 Actions(操作)下拉列表中选择 Add stacks to StackSet(将堆栈添加到堆栈集)。
-
将以下信息添加到 Set deployment options(设置部署选项)页面。
-
对于 Add stacks to stack set(将堆栈添加到堆栈集),选择 Import stacks to stack set(将堆栈导入堆栈集)。
-
将以下信息添加到 Stacks to import(要导入的堆栈)部分。
-
对于 Stack ID(堆栈 ID),输入您的堆栈 ID。
-
对于堆栈 URL,请输入该 Amazon S3 URL。
-
-
将以下信息添加到 Associate organizational units(关联组织单位)部分。
-
选择 Associate with organization(与组织关联)以使用根 OU。
-
选择 Associate with organizational units (OUs) [与组织单位(OU)关联] 以输入要导入堆栈的父 OU ID。例如,如果
Stack 1
和Stack 2
位于OU1
下,而Stack 3
位于OU2
下,则输入OU1
和OU2
。
接受您的设置并选择 Next(下一步)。
-
-
-
查看 Specify overrides(指定覆盖)页面,然后选择 Next(下一步)。
-
确认并检查 Review(审核)页面,然后选择 Submit(提交)。
将服务托管堆栈导入堆栈集(AWS CLI)
创建堆栈集后,可以通过传递所导入堆栈的堆栈 ID 来导入堆栈。您还可以传递要将其映射到的 OU ID 列表。
StackSets 将在这些 OU 中导入用户提供的堆栈,并将这些 OU 用作堆栈集的部署目标。输入中显示的堆栈 ID 将在内部映射到 OU ID 列表输入中最近的 OU。如果堆栈不属于输入列表中的现有 OU ID,则 AWS CLI 将返回 StackNotFoundException
错误。
import-stacks-to-stack-set
操作为 OU ID 输入中的堆栈创建堆栈实例。以下 AWS CLI 示例使用 import-stacks-to-stack-set
操作将堆栈导入堆栈集。
-
要使用
import-stacks-to-stack-sets
操作,请指定要导入到堆栈集的stack-ids
或stack-ids-url
。aws cloudformation import-stacks-to-stack-set \ --stack-set-name
ServiceMangedStackSet
\ --stack-ids "arn:123456789012:us-east-1:Stack1
" \ --organizational-unit-idsou-examplerootid111-exampleouid111
aws cloudformation import-stacks-to-stack-set \ --stack-set-name
ServiceMangedStackSet
\ --stack-ids-urlhttps://amzn-s3-demo-bucket.s3.us-west-2.amazonaws.com/file-name.json
\ --organizational-unit-idsou-examplerootid111-exampleouid111
注意
import-stacks-to-stack-sets
操作要求您指定至少一个组织单位 ID(OU ID),以便它可以将要导入的堆栈关联到该特定 OU。此操作不会为关联 OU 中的其他成员账户创建堆栈实例。要更新关联 OU 的成员账户,请使用 create-stack-instances
或 update-stack-instances
。
create-stack-set
使用用户提供的模板(直接上传或来自 Amazon S3)为 OU 下的所有账户创建堆栈实例。以下 AWS CLI 示例使用 create-stack-set
操作将堆栈导入新堆栈集。
-
要使用
create-stack-set
操作,请指定堆栈集名称并将堆栈导入新创建的堆栈集。aws cloudformation create-stack-set \ --template-url
https://amzn-s3-demo-bucket.s3.us-west-2.amazonaws.com/file-name.json
\ --permission-model SERVICE_MANAGED \ --auto-deployment Enabled=true
恢复堆栈实例导入操作
要恢复堆栈导入操作,请完成以下任务:
-
将堆栈实例删除后要保留的每个资源的
DeletionPolicy
属性指定为Retain
。有关更多信息,请参阅 恢复导入操作。 -
从堆栈集中删除堆栈实例。有关更多信息,请参阅 使用 CloudFormation 控制台或 AWS CLI 删除堆栈实例。
-
删除堆栈集。有关更多信息,请参阅 使用 CloudFormation 控制台或 AWS CLI 删除堆栈集。
结果:恢复操作删除了堆栈实例并保留了堆栈的资源。