

# 手动将 AWS 资源导入 CloudFormation 堆栈
<a name="import-resources-manually"></a>

借助资源导入功能，您可以将现有 AWS 资源导入到新的或现有的 CloudFormation 堆栈中。在导入操作期间，您创建一个更改集以将现有资源导入到堆栈中，或者从现有资源中创建新的堆栈。您在导入期间提供以下内容。
+ 描述整个堆栈的模板，包括原始堆栈资源和您要导入的资源。每个要导入的资源都必须具有 [DeletionPolicy 属性](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-attribute-deletionpolicy.html)。
+ 要导入的资源的标识符，CloudFormation 可以使用这些标识符将模板中的逻辑 ID 与现有资源进行映射。

**注意**  
使用资源导入功能时，CloudFormation 仅支持一层嵌套。这意味着，您无法将堆栈导入到子堆栈中，也无法导入具有子堆栈的堆栈。

**Topics**
+ [资源标识符](#resource-import-identifiers-unique-ids)
+ [验证](#resource-import-validation)
+ [状态代码](#resource-import-status-codes)
+ [注意事项](#resource-import-considerations)
+ [其他资源](#resource-import-additional-resources)
+ [从现有的资源中创建堆栈](resource-import-new-stack.md)
+ [将现有的资源导入到堆栈](resource-import-existing-stack.md)
+ [在堆栈之间移动资源](refactor-stacks.md)
+ [嵌套现有的堆栈](resource-import-nested-stacks.md)

## 资源标识符
<a name="resource-import-identifiers-unique-ids"></a>

提供两个值来标识正在导入的每个资源。
+ 标识符属性。这是一个资源属性，可用于标识每种资源类型。例如，可以使用 `BucketName` 标识 `AWS::S3::Bucket` 资源。

  用于标识要导入的资源的资源属性因资源类型而异。可在 CloudFormation 控制台中找到资源属性。创建包含要导入的资源的模板后，可以启动导入过程，您可以在其中找到要导入的资源的标识符属性。某些资源类型可能存在多种标识方式，您可以在下拉列表中选择要使用的属性。

  或者，您也可以通过调用 [get-template-summary](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/get-template-summary.html) CLI 命令并将堆栈模板的 S3 URL 指定为 `--template-url` 选项的值，获取要导入的资源的标识符属性。
+ 标识符值。这是资源的实际属性值。例如，`BucketName` 属性的实际值可能是 `MyS3Bucket`。

  可从资源的服务控制台获取标识符属性的值。

## 资源导入验证
<a name="resource-import-validation"></a>

在导入操作期间，CloudFormation 执行以下验证。
+ 要导入的资源存在。
+ 每个要导入的资源的属性和配置值符合资源类型架构要求，该架构定义了它接受的属性、必需的属性和支持的属性值。
+ 在模板中指定了必需的属性。每种资源类型的必需属性如 [AWS 资源和属性类型参考](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-template-resource-type-ref.html)中所述。
+ 要导入的资源不属于同一区域中的其他堆栈。

CloudFormation 不检查模板配置与资源属性的实际配置是否匹配。

**重要**  
验证模板中定义的资源及其属性是否与资源导入的预期配置相匹配，以避免意外更改。

## 资源导入状态代码
<a name="resource-import-status-codes"></a>

下表描述了可与资源导入功能一起使用的各种状态类型。


| 导入操作状态 | 说明 | 
| --- | --- | 
|  `IMPORT_IN_PROGRESS`  |  正在执行导入操作。  | 
|  `IMPORT_COMPLETE`  |  堆栈中所有资源的导入操作均已完成。  | 
|  `IMPORT_ROLLBACK_IN_PROGRESS`  |  回滚导入操作正在回滚以前的模板配置。  | 
|  `IMPORT_ROLLBACK_FAILED`  |  导入回滚操作失败。  | 
|  `IMPORT_ROLLBACK_COMPLETE`  |  导入已回滚到以前的模板配置。  | 

## 导入操作期间的注意事项
<a name="resource-import-considerations"></a>
+ 在导入完成后以及执行后续堆栈操作之前，我们建议对导入的资源运行偏差检测。偏差检测确保模板配置与实际配置匹配。有关更多信息，请参阅 [在整个 CloudFormation 堆栈上检测偏差](detect-drift-stack.md)。
+ 导入操作不允许创建新资源，删除资源或更改属性配置。
+ 要导入的每个资源必须具有 `DeletionPolicy` 属性，才能成功完成导入操作。`DeletionPolicy` 可以设置为任何可能的值。只有要导入的资源才需要 `DeletionPolicy`。已属于堆栈的资源不需要使用 `DeletionPolicy`。
+ 您不能将同一资源导入多个堆栈。
+ 您可以使用 `cloudformation:ImportResourceTypes` IAM policy 条件控制用户可以在导入操作期间使用的资源类型。有关更多信息，请参阅 [CloudFormation 的策略条件键](control-access-with-iam.md#using-iam-conditions)。
+ CloudFormation 堆栈限制在导入资源时适用。有关限制的更多信息，请参阅 [了解 CloudFormation 配额](cloudformation-limits.md)。

## 其他 资源
<a name="resource-import-additional-resources"></a>

要通过资源导入解决堆栈偏差问题，请参阅[通过导入操作消除偏差](resource-import-resolve-drift.md)。