使用资源导入将 AWS 资源导入 CloudFormation 堆栈 - AWS CloudFormation

使用资源导入将 AWS 资源导入 CloudFormation 堆栈

借助资源导入功能,您可以将现有 AWS 资源导入新的或现有 CloudFormation 堆栈中。如果您想在无需删除和重新创建相关资源的情况下,开始使用 CloudFormation 来管理在 CloudFormation 之外创建的资源,此功能将非常实用。

CloudFormation 提供了两种将现有资源导入堆栈的方法:

  • IaC 生成器是一种导入工具,它可自动扫描现有资源并根据其当前状态生成 CloudFormation 模板,然后可以使用此模板将这些资源导入堆栈。

  • 资源导入是一种手动过程,您可以在其中描述 CloudFormation 模板中的现有资源,然后将其导入堆栈。这种方法要求您在模板中手动指定资源属性和配置。

除将现有资源纳入 CloudFormation 管理范围之外,资源导入功能对于下列场景也非常实用:

  • 在堆栈之间移动资源 – 您可以将资源从一个堆栈导入另一个堆栈,从而可以根据需要重新组织基础设施。

  • 嵌套现有堆栈 – 您可以将现有堆栈作为嵌套堆栈导入另一个堆栈,从而实现模块化和可重复使用的基础设施设计。

CloudFormation 支持导入广泛的资源。有关更多信息,请参阅 资源类型支持

概述

在导入操作期间,您创建一个更改集以将现有资源导入到堆栈中,或者从现有资源中创建新的堆栈。您在导入期间提供以下内容。

  • 描述整个堆栈的模板,包括原始堆栈资源和您要导入的资源。每个要导入的资源都必须具有 DeletionPolicy 属性

  • 要导入的资源的标识符,CloudFormation 可以使用这些标识符将模板中的逻辑 ID 与现有资源进行映射。

注意

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

资源标识符

提供两个值来标识正在导入的每个资源。

  • 标识符属性。这是一个资源属性,可用于标识每种资源类型。例如,可以使用 BucketName 标识 AWS::S3::Bucket 资源。

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

    或者,您也可以通过调用 get-template-summary CLI 命令并将堆栈模板的 S3 URL 指定为 --template-url 选项的值,获取要导入的资源的标识符属性。

  • 标识符值。这是资源的实际属性值。例如,BucketName 属性的实际值可能是 MyS3Bucket

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

资源导入验证

在导入操作期间,CloudFormation 执行以下验证。

  • 要导入的资源存在。

  • 每个要导入的资源的属性和配置值符合资源类型架构要求,该架构定义了它接受的属性、必需的属性和支持的属性值。

  • 在模板中指定了必需的属性。AWS 资源和属性类型参考 中列出了每种资源类型所需的属性。

  • 要导入的资源不属于同一区域中的其他堆栈。

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

重要

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

资源导入状态代码

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

导入操作状态 描述

IMPORT_IN_PROGRESS

正在执行导入操作。

IMPORT_COMPLETE

堆栈中所有资源的导入操作均已完成。

IMPORT_ROLLBACK_IN_PROGRESS

回滚导入操作正在回滚以前的模板配置。

IMPORT_ROLLBACK_FAILED

导入回滚操作失败。

IMPORT_ROLLBACK_COMPLETE

导入已回滚到以前的模板配置。

导入操作期间的注意事项

  • 在导入完成后以及执行后续堆栈操作之前,我们建议对导入的资源运行偏差检测。偏差检测确保模板配置与实际配置匹配。有关更多信息,请参阅 在整个 CloudFormation 堆栈上检测偏差

  • 导入操作不允许创建新资源,删除资源或更改属性配置。

  • 要导入的每个资源必须具有 DeletionPolicy 属性,才能成功完成导入操作。DeletionPolicy 可以设置为任何可能的值。只有要导入的资源才需要 DeletionPolicy。已属于堆栈的资源不需要使用 DeletionPolicy

  • 您不能将同一资源导入多个堆栈。

  • 您可以使用 cloudformation:ImportResourceTypes IAM policy 条件控制用户可以在导入操作期间使用的资源类型。有关更多信息,请参阅 CloudFormation 条件

  • CloudFormation 堆栈限制在导入资源时适用。有关限制的更多信息,请参阅 了解 CloudFormation 配额

其他 资源

要通过资源导入解决堆栈偏差问题,请参阅通过导入操作消除偏差