

# Amazon CloudFormation StackSets 的服务托管堆栈导入
<a name="service-managed-import"></a>

CloudFormation 堆栈导入操作可以将现有堆栈导入新的或现有的 StackSet，因此您通过一次操作就可以将现有堆栈迁移到 StackSet。StackSets 扩展了堆栈的功能，因此您可以在一次操作中跨多个账户和区域创建、更新或删除堆栈。

**服务托管式堆栈导入的注意事项**
+ 堆栈导入操作需要一个管理账户或委派管理员账户，您可以在其中管理关联的 Amazon Organizations 组织，例如使用 StackSets 启用信任访问。
+ 目标账户必须是由管理账户或委派管理员账户管理的 Amazon Organizations 成员。
+ 目标堆栈位于其中一个目标 OU 中。
+ 目标账应为 Amazon Organizations 的成员。
+ Amazon Organizations 访问对于 Organizations 应处于 `ACTIVATED` 状态。
+ 所导入的堆栈应位于任意成员账户中，而不是管理账户中。

**Topics**
+ [将服务托管堆栈导入新 StackSet（控制台）](#import-service-managed-stack-to-new-stackset)
+ [创建服务托管堆栈并将其导入现有 StackSet（控制台）](#import-service-managed-stack-to-existing-stackset)
+ [将服务托管堆栈导入现有 StackSet（控制台）](#import-service-managed-stack-to-existing-stackset-console)
+ [将服务托管堆栈导入 StackSet（Amazon CLI）](#import-service-managed-stack-to-stackset.cli)

## 将服务托管堆栈导入新 StackSet（控制台）
<a name="import-service-managed-stack-to-new-stackset"></a>

使用 Amazon Web Services 管理控制台 将堆栈导入新 StackSet

要将新堆栈导入 StackSet，请标识包含要导入资源的堆栈。

1. 登录到 Amazon Web Services 管理控制台 并打开 Amazon CloudFormation 控制台 [https://console.aws.amazon.com/cloudformation](https://console.amazonaws.cn/cloudformation/)。

1. 从导航窗格中，选择 **StackSets**。

1. 在 **StackSets (堆栈集)** 页面顶部，选择 **Create StackSet (创建堆栈集)**。

1. 在**选择模板**页面上，执行以下操作：

   1. 在**堆栈集权限模型**中，选择**服务托管权限**。

   1. 在**先决条件 – 准备模板**中，选择**模板已准备就绪**，然后使用以下选项之一选择您的模板：
      + 对于 **Amazon S3 URL**，请在“Amazon S3 URL”字段中输入您的 **Amazon S3 URL**。
      + 在**上传模板文件**中，选择本地计算机中的 CloudFormation 模板。

   接受您的设置并选择 **Next**（下一步）。

1. 在**指定堆栈集详细信息**页面上，执行以下操作：

   1. 在 **StackSet 名称**框中输入 StackSet 名称。

   1. （可选）在 **StackSet description**（堆栈集描述）部分中输入描述。

   在**配置堆栈集选项**页面上，查看您的选项，然后选择**下一步**。

1. 在**设置部署选项**页面上，执行以下操作：

   1. 在**将堆栈添加到堆栈集**中，选择**将堆栈导入堆栈集**。

   1. 对于 **Stacks to import**（要导入的堆栈），选择堆栈导入方法。

      1. 对于 **Stack ID**（堆栈 ID），输入您的堆栈 ID。

      1. 对于**堆栈 URL**，请输入该 Amazon S3 URL。

1. 在**关联组织单位**下，执行以下操作：

   1. 选择**与组织关联**以使用根 OU。

   1. 选择**与组织单位（OU）关联**以输入要导入堆栈的父 OU ID。例如，如果 `Stack 1` 和 `Stack 2` 位于 `OU1` 下，而 `Stack 3` 位于 `OU2` 下，则输入 `OU1` 和 `OU2`。

   接受您的设置并选择 **Next**（下一步）。

1. 在 **Review**（审核）页面上，检查您的设置，然后选择 **Submit**（提交）。

## 创建服务托管堆栈并将其导入现有 StackSet（控制台）
<a name="import-service-managed-stack-to-existing-stackset"></a>

要将现有堆栈导入新 StackSet，请标识包含要导入资源的堆栈。

**创建 StackSet 并导入堆栈**

1. 登录到 Amazon Web Services 管理控制台 并打开 Amazon CloudFormation 控制台 [https://console.aws.amazon.com/cloudformation](https://console.amazonaws.cn/cloudformation/)。

1. 从导航窗格中，选择 **StackSets**。

1. 在 **StackSets (堆栈集)** 页面顶部，选择 **Create StackSet (创建堆栈集)**。

1. 在**选择模板**页面上，执行以下操作：

   1. 在**堆栈集权限模型**中，选择**服务托管权限**。

   1. 在**先决条件 – 准备模板**中，选择**模板已准备就绪**，然后使用以下选项之一选择您的模板：
      + 对于 **Amazon S3 URL**，请在“Amazon S3 URL”字段中输入您的 **Amazon S3 URL**。
      + 在**上传模板文件**中，选择本地计算机中的 CloudFormation 模板。

   接受您的设置并选择 **Next**（下一步）。

1. 在**指定堆栈集详细信息**页面上，执行以下操作：

   1. 在 **StackSet 名称**框中输入 StackSet 名称。

   1. （可选）在 **StackSet description**（堆栈集描述）部分中输入描述。

   在**配置堆栈集选项**页面上，查看您的选项，然后选择**下一步**。

1. 在**设置部署选项**页面上，执行以下操作：

   1. 对于 **Add stacks to stack set**（将堆栈添加到堆栈集），选择 **Deploy new stacks**（部署新堆栈）。

1. 在**关联组织单位**部分，执行以下操作：

   1. 选择**与组织关联**以使用根 OU。

   1. 选择**与组织单位（OU）关联**以输入要导入堆栈的父 OU ID。例如，如果 `Stack 1` 和 `Stack 2` 位于 `OU1` 下，而 `Stack 3` 位于 `OU2` 下，则输入 `OU1` 和 `OU2`。

1. 对于 **Specify regions**（指定区域）和 **Deployment options**（部署选项），查看您的选择。

   接受您的设置并选择 **Next**（下一步）。

1. 在 **Review**（审核）页面上，检查您的设置，然后选择 **Submit**（提交）。

## 将服务托管堆栈导入现有 StackSet（控制台）
<a name="import-service-managed-stack-to-existing-stackset-console"></a>

选择 StackSet 并确定您要导入的堆栈。

**将堆栈导入现有 StackSet**

1. 登录到 Amazon Web Services 管理控制台 并打开 Amazon CloudFormation 控制台 [https://console.aws.amazon.com/cloudformation](https://console.amazonaws.cn/cloudformation/)。

1. 从导航窗格中，选择 **StackSets**。

1. 选择要将堆栈导入到的 StackSet，然后从**操作**下拉列表中选择**将堆栈添加到 StackSet**。

1. 在**设置部署选项**页面上，执行以下操作：

   1. 在**将堆栈添加到堆栈集**中，选择**将堆栈导入堆栈集**。

   1. 在**要导入的堆栈**下，执行以下操作：

      1. 对于 **Stack ID**（堆栈 ID），输入您的堆栈 ID。

      1. 对于**堆栈 URL**，请输入该 Amazon S3 URL。

   1. 在**关联组织单位**下，执行以下操作：

      1. 选择**与组织关联**以使用根 OU。

      1. 选择**与组织单位（OU）关联**以输入要导入堆栈的父 OU ID。例如，如果 `Stack 1` 和 `Stack 2` 位于 `OU1` 下，而 `Stack 3` 位于 `OU2` 下，则输入 `OU1` 和 `OU2`。

      接受您的设置并选择 **Next**（下一步）。

1. 查看 **Specify overrides**（指定覆盖）页面，然后选择 **Next**（下一步）。

1. 确认并检查 **Review**（审核）页面，然后选择 **Submit**（提交）。

## 将服务托管堆栈导入 StackSet（Amazon CLI）
<a name="import-service-managed-stack-to-stackset.cli"></a>

创建 StackSet 后，可以通过传递所导入堆栈的堆栈 ID 来导入堆栈。您还可以传递要将其映射到的 OU ID 列表。

CloudFormation 将在这些 OU 中导入用户提供的堆栈，并将这些 OU 用作 StackSet 的部署目标。输入中显示的堆栈 ID 将在内部映射到 OU ID 列表输入中最近的 OU。如果堆栈不属于输入列表中的现有 OU ID，则 Amazon CLI 将返回 `StackNotFoundException` 错误。

`import-stacks-to-stack-set` 操作为 OU ID 输入中的堆栈创建堆栈实例。以下 Amazon CLI 示例使用 `import-stacks-to-stack-set` 操作将堆栈导入 StackSet。
+ 要使用 `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-ids ou-examplerootid111-exampleouid111
  ```

  ```
  aws cloudformation import-stacks-to-stack-set \
    --stack-set-name ServiceMangedStackSet \
    --stack-ids-url https://amzn-s3-demo-bucket.s3.us-west-2.amazonaws.com/file-name.json \
    --organizational-unit-ids ou-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 下的所有账户创建堆栈实例。以下 Amazon CLI 示例使用 `create-stack-set` 操作将堆栈导入新 StackSet。
+ 要使用 `create-stack-set` 操作，请指定 StackSet 名称并将堆栈导入新创建的 StackSet。

  ```
  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
  ```