使用 CloudFormation 对现有资源进行管理 - AWS CloudFormation

使用 CloudFormation 对现有资源进行管理

AWS CloudFormation 提供了相应的功能,让您可以通过在模板中描述现有的 AWS 资源,从而将其导入新堆栈或现有堆栈。如果您想在无需删除和重新创建相关资源的情况下,开始使用 CloudFormation 来管理在 CloudFormation 之外创建的资源,此功能将非常实用。

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

注意

要改为扫描现有的资源并自动生成模板,以用于将现有资源导入 CloudFormation 或在新账户中复制资源,请参阅 使用 IaC 生成器为现有资源生成模板

概述

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

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

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

注意

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

资源标识符

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

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

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

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

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

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

资源导入验证

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

  • 要导入的资源存在。

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

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

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

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

重要

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

资源导入状态代码

下表描述了与 resource import 一起使用的各种状态类型。

导入操作状态 描述

IMPORT_IN_PROGRESS

正在执行导入操作。

IMPORT_COMPLETE

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

IMPORT_ROLLBACK_IN_PROGRESS

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

IMPORT_ROLLBACK_FAILED

导入回滚操作失败。

IMPORT_ROLLBACK_COMPLETE

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

导入操作期间的注意事项

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

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

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

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

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

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

其他 资源

有关侧重于应对特定导入场景的更多说明,请参阅以下主题: