引用其他 CloudFormation 堆栈中的资源输出
本演练演示了如何在一个堆栈中引用另一个 CloudFormation 堆栈的输出,以创建更多模块化和可重复使用的模板。
您可以在单独的堆栈中创建相关的 AWS 资源,而不是在单个堆栈中包含所有资源。然后,您可以引用其他堆栈中的所需资源输出。通过限制对输出的跨堆栈引用,您可以控制由其他堆栈引用的堆栈部分。
例如,您可以将一个带 VPC、安全组和子网的网络堆栈用于公有 Web 应用程序,并且有一个单独的公有 Web 应用程序堆栈。为确保 Web 应用程序能使用网络堆栈中的安全组和子网,可以创建一个使 Web 应用程序堆栈能够引用网络堆栈中的资源输出的跨堆栈引用。借助跨堆栈引用,Web 应用程序堆栈的所有者无需创建或维护联网规则或资产。
要创建跨堆栈引用,可使用 Export
输出字段标记要导出的资源输出的值。然后,使用 内置函数导入该值。有关更多信息,请参阅 获取从已部署的 CloudFormation 堆栈导出的输出。
注意
CloudFormation 是一项免费服务。但是,对于堆栈中包含的 AWS 资源,您需要按各自的现有费率付费。有关 AWS 定价的更多信息,请参阅每种产品的详细信息页
步骤 1:使用示例模板创建网络堆栈
在开始此演练之前,请确认您具有使用以下所有服务的 IAM 权限:Amazon VPC、Amazon EC2 和 CloudFormation。
网络堆栈包含您将在 Web 应用程序堆栈中使用的 VPC、安全组和子网。除了这些资源之外,网络堆栈还将创建互联网网关和路由表来实现公共访问。
您必须先创建此堆栈,然后才能创建 Web 应用程序堆栈。如果先创建 Web 应用程序堆栈,则它没有安全组或子网。
该堆栈模板可通过以下 URL 获取:https://s3.amazonaws.com/cloudformation-examples/user-guide/cross-stack/SampleNetworkCrossStack.templateOutputs
部分中,您可看到示例模板导出的联网资源。如果您从其他堆栈导出联网资源,则已导出资源的名称将以堆栈的名称为前缀。当用户导入联网资源时,他们可指定从中导入资源的堆栈。
创建网络堆栈
登录到 AWS Management Console 并打开 AWS CloudFormation 控制台 https://console.aws.amazon.com/cloudformation
。 -
在堆栈页面,选择右上角的堆栈,然后选择使用新资源(标准)。
-
选择模板已准备就绪,然后在指定模板部分选择 Amazon S3 URL。
-
在 Amazon S3 URL 中,粘贴以下 URL:
https://s3.amazonaws.com/cloudformation-examples/user-guide/cross-stack/SampleNetworkCrossStack.template
。 -
选择下一步。
-
对于 Stack name (堆栈名称),键入
SampleNetworkCrossStack
,然后选择 Next (下一步)。注意
记录此堆栈的名称。您在启动 Web 应用程序堆栈时需要此堆栈名称。
-
选择下一步。在本演练中,您无需添加标记或指定高级设置。
-
确保堆栈名称和模板 URL 正确,然后选择 Create stack (创建堆栈)。
CloudFormation 可能需要几分钟的时间创建堆栈。请耐心等待,直到成功创建所有资源,然后再继续创建 Web 应用程序堆栈。
-
要监控进度,可查看堆栈事件。有关更多信息,请参阅 监控堆栈进度。
步骤 2:使用示例模板创建 Web 应用程序堆栈
Web 应用程序堆栈将创建一个使用网络堆栈中的安全组和子网的 EC2 实例。
您必须在网络堆栈所在的同一 AWS 区域中创建该堆栈。
该堆栈模板可通过以下 URL 获取:https://s3.amazonaws.com/cloudformation-examples/user-guide/cross-stack/SampleWebAppCrossStack.templateResources
部分中,查看 EC2 实例的属性。您可查看如何使用 Fn::ImportValue
函数从其他堆栈导入联网资源。
创建 Web 应用程序堆栈
-
在堆栈页面,选择右上角的创建堆栈,然后选择使用新资源(标准)。
-
选择模板已准备就绪,然后在指定模板部分选择 Amazon S3 URL。
-
在 Amazon S3 URL 中,粘贴以下 URL:
https://s3.amazonaws.com/cloudformation-examples/user-guide/cross-stack/SampleWebAppCrossStack.template
。 -
选择下一步。
-
对于 Stack name,键入
SampleWebAppCrossStack
。在 Parameters 部分中,让 NetworkStackName 参数使用默认值,然后选择 Next。示例模板使用参数值指定要从中导入值的堆栈。
-
选择下一步。在本演练中,您无需添加标记或指定高级设置。
-
确保堆栈名称和模板 URL 正确,然后选择 Create stack (创建堆栈)。
CloudFormation 可能需要几分钟的时间创建堆栈。
第 3 步:验证堆栈的运行符合设计
创建该堆栈后,查看其资源并记下实例 ID。有关查看堆栈资源的更多信息,请参阅从 CloudFormation 控制台查看堆栈信息。
要验证实例的安全组和子网,请在 Amazon EC2 控制台SampleNetworkCrossStack
堆栈中的安全组和子网,则表示您已成功创建跨堆栈引用。
使用控制台可查看堆栈输出和示例网站 URL 以验证 Web 应用程序是否正在运行。有关更多信息,请参阅 从 CloudFormation 控制台查看堆栈信息。
步骤 4:清理资源
为了确保不因任何不必要的服务而产生费用,请删除堆栈。
删除堆栈
-
在 CloudFormation 控制台中,选择
SampleWebAppCrossStack
堆栈。 -
选择 Actions)(操作),然后选择 Delete Stack(删除堆栈)。
-
在确认消息中,选择 Delete (删除)。
-
在删除堆栈后,对
SampleNetworkCrossStack
堆栈重复相同的步骤。注意
等到 CloudFormation 完全删除
SampleWebAppCrossStack
堆栈。如果 EC2 实例仍在 VPC 中运行,则 CloudFormation 不会删除SampleNetworkCrossStack
堆栈中的 VPC。