使用资源导入将 AWS 资源导入 CloudFormation 堆栈
借助资源导入功能,您可以将现有 AWS 资源导入新的或现有 CloudFormation 堆栈中。如果您想在无需删除和重新创建相关资源的情况下,开始使用 CloudFormation 来管理在 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 不检查模板配置与资源属性的实际配置是否匹配。
重要
验证模板中定义的资源及其属性是否与资源导入的预期配置相匹配,以避免意外更改。
资源导入状态代码
下表描述了可与资源导入功能一起使用的各种状态类型。
导入操作状态 | 描述 |
---|---|
|
正在执行导入操作。 |
|
堆栈中所有资源的导入操作均已完成。 |
|
回滚导入操作正在回滚以前的模板配置。 |
|
导入回滚操作失败。 |
|
导入已回滚到以前的模板配置。 |
导入操作期间的注意事项
-
在导入完成后以及执行后续堆栈操作之前,我们建议对导入的资源运行偏差检测。偏差检测确保模板配置与实际配置匹配。有关更多信息,请参阅 在整个 CloudFormation 堆栈上检测偏差。
-
导入操作不允许创建新资源,删除资源或更改属性配置。
-
要导入的每个资源必须具有
DeletionPolicy
属性,才能成功完成导入操作。DeletionPolicy
可以设置为任何可能的值。只有要导入的资源才需要DeletionPolicy
。已属于堆栈的资源不需要使用DeletionPolicy
。 -
您不能将同一资源导入多个堆栈。
-
您可以使用
cloudformation:ImportResourceTypes
IAM policy 条件控制用户可以在导入操作期间使用的资源类型。有关更多信息,请参阅 CloudFormation 条件。 -
CloudFormation 堆栈限制在导入资源时适用。有关限制的更多信息,请参阅 了解 CloudFormation 配额。
其他 资源
要通过资源导入解决堆栈偏差问题,请参阅通过导入操作消除偏差。