

# CloudFormation StackSets 的自行管理堆栈导入
<a name="self-managed-import"></a>

CloudFormation 堆栈导入操作可以将现有堆栈导入新的或现有的 StackSet，因此您通过一次操作就可以将现有堆栈迁移到 StackSet。通过使用堆栈导入，您可以避免停机和中断，而无需删除和重新创建这些资源。将堆栈导入 StackSet后，原来的堆栈将成为指定的 StackSet 的堆栈实例。

**自行管理式堆栈导入的注意事项**
+ 堆栈导入操作需要在其中创建 StackSet 的管理员账户和包含堆栈的目标账户。
+ 目标账户必须有权使用 `GetTemplate` 操作，输入堆栈 ID 或 ARN。因此，您的管理员账户必须被授予 **AWSCloudFormationStackSetAdministrationRole** 或 **AWSCloudFormationStackSetsExectionRole** 权限。

**Topics**
+ [将现有堆栈导入新 StackSet（控制台）](#import-stacks-to-stack-set)
+ [将现有堆栈导入现有 StackSet（控制台）](#import-stack-to-existing-stackset)
+ [将堆栈导入 StackSet（AWS CLI）](#importing-stack-to-stackset.cli)

## 将现有堆栈导入新 StackSet（控制台）
<a name="import-stacks-to-stack-set"></a>

开始之前，请标识要导入的堆栈。

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

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

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

1. 在**选择模板**页面上，通过以下选项之一指定模板，然后选择**下一步**。
   + 选择 **Amazon S3 URL**，然后在文本框中指定您的模板的 URL。
   + 选择 **Upload a template file**（上传模板文件），然后浏览您的模板。
   + 选择 **From stack ID**（从堆栈 ID），然后输入堆栈 ID。

1. 在**指定 StackSet 详细信息**页面中，输入要创建的 StackSet 的名称，然后选择**下一步**。

   （可选）输入 StackSet 的描述。

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

1. 在**设置部署选项**页面上，选择**将堆栈导入堆栈集**。

1. 在 **Stacks to import**（要导入的堆栈）字段中，输入要导入的堆栈的堆栈 ID。例如 `arn:aws:cloudformation:us-east-1:123456789012:stack/StackToImport/f449b250-b969-11e0-a185-5081d0136786`。

   （可选）选择**添加另一个堆栈 ID**，然后输入您要导入的另一个堆栈的堆栈 ID。每个堆栈导入操作最多可添加 10 个堆栈。

1. 查看您的部署选项，然后选择**下一步**。

1. 在**审核**页面上，检查您的选择和 StackSet 的属性。准备好将堆栈导入 StackSet 后，选择**提交**。

**结果**：导入的堆栈现在是指定 StackSet 的堆栈实例。要了解有关堆栈导入状态的更多信息，请参阅 [StackSets 状态代码](stacksets-concepts.md#stackset-status-codes)。

## 将现有堆栈导入现有 StackSet（控制台）
<a name="import-stack-to-existing-stackset"></a>

开始之前，请标识要导入的堆栈。

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

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

1. 在 **StackSet** 页面中，选择要导入堆栈的 StackSet。

1. 选择 StackSet 后，从**操作**菜单中选择**将堆栈添加到 StackSet**。

1. 在**设置部署选项**页面中，选择**将堆栈导入堆栈集**，然后在**要导入的堆栈**字段中输入要导入的堆栈的堆栈 ID。例如 `arn:aws:cloudformation:us-east-1:123456789012:stack/StackToImport/f449b250-b969-11e0-a185-5081d0136786`。

   （可选）选择**添加另一个堆栈 ID**，然后输入您要导入的另一个堆栈的堆栈 ID。每个堆栈导入操作最多可添加 10 个堆栈。

1. 选择**下一步**。

1. 在**指定覆盖**页面上，查看您的选择，然后选择**下一步**。

1. 在**审核**页面上，检查您的选择和 StackSet 的属性。准备好创建 StackSet 后，选择**提交**。

**结果**：导入的堆栈现在是指定 StackSet 的堆栈实例。要了解有关堆栈导入状态的更多信息，请参阅 [StackSets 状态代码](stacksets-concepts.md#stackset-status-codes)。

## 将堆栈导入 StackSet（AWS CLI）
<a name="importing-stack-to-stackset.cli"></a>

**将现有堆栈导入新 StackSet**  
以下 `create-stack-set` 命令将创建一个 StackSet 并导入指定堆栈。要导入的堆栈由其 ARN 标识。将占位符文本替换为您自己的信息。

```
aws cloudformation create-stack-set \
  --stack-set-name MyStackSet \
  --stack-id arn:aws:cloudformation:us-east-1:123456789012:stack/StackToImport/466df9e0-0dff-08e3-8e2f-5088487c4896 \
  --administration-role-arn arn:aws:iam::123456789012:role/AWSCloudFormationStackSetAdministrationRole \
  --execution-role-name AWSCloudFormationStackSetExecutionRole
```

**将现有堆栈导入现有 StackSet**  
以下 `import-stacks-to-stack-sets` 命令会将指定堆栈导入到 *MyStackSet* StackSet。要导入的堆栈由其 ARN 标识。将占位符文本替换为您自己的信息。

```
aws cloudformation import-stacks-to-stack-set \
  --stack-set MyStackSet \
  --stack-ids arn:aws:cloudformation:us-east-1:123456789012:stack/StackToImport/f449b250-b969-11e0-a185-5081d0136786
```

要指定多个堆栈，请使用以下格式作为 `--stack-ids` 选项的值。

```
--stack-ids "arn_1" "arn_2"
```

**将导入的堆栈克隆到其他区域和账户**  
运行 `create-stack-instances` 命令会将堆栈实例添加到 StackSet。将占位符文本替换为您自己的信息。

```
aws cloudformation create-stack-instances \
  --stack-set-name MyStackSet \
  --accounts '["account_ID_1","account_ID_2"]' \
  --regions '["region_1","region_2"]'
```