引用其他 CloudFormation 堆栈中的资源输出 - AWS CloudFormation

引用其他 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.template。要查看堆栈将创建的资源,请选择该链接,这将打开模板。在 Outputs 部分中,您可看到示例模板导出的联网资源。如果您从其他堆栈导出联网资源,则已导出资源的名称将以堆栈的名称为前缀。当用户导入联网资源时,他们可指定从中导入资源的堆栈。

创建网络堆栈
  1. 登录到 AWS Management Console 并打开 AWS CloudFormation 控制台 https://console.aws.amazon.com/cloudformation

  2. 堆栈页面,选择右上角的堆栈,然后选择使用新资源(标准)

  3. 选择模板已准备就绪,然后在指定模板部分选择 Amazon S3 URL

  4. Amazon S3 URL 中,粘贴以下 URL:https://s3.amazonaws.com/cloudformation-examples/user-guide/cross-stack/SampleNetworkCrossStack.template

  5. 选择下一步

  6. 对于 Stack name (堆栈名称),键入 SampleNetworkCrossStack,然后选择 Next (下一步)

    注意

    记录此堆栈的名称。您在启动 Web 应用程序堆栈时需要此堆栈名称。

  7. 选择下一步。在本演练中,您无需添加标记或指定高级设置。

  8. 确保堆栈名称和模板 URL 正确,然后选择 Create stack (创建堆栈)

    CloudFormation 可能需要几分钟的时间创建堆栈。请耐心等待,直到成功创建所有资源,然后再继续创建 Web 应用程序堆栈。

  9. 要监控进度,可查看堆栈事件。有关更多信息,请参阅 监控堆栈进度

步骤 2:使用示例模板创建 Web 应用程序堆栈

Web 应用程序堆栈将创建一个使用网络堆栈中的安全组和子网的 EC2 实例。

您必须在网络堆栈所在的同一 AWS 区域中创建该堆栈。

该堆栈模板可通过以下 URL 获取:https://s3.amazonaws.com/cloudformation-examples/user-guide/cross-stack/SampleWebAppCrossStack.template。要查看堆栈将创建的资源,请选择该链接,这样会打开模板。在 Resources 部分中,查看 EC2 实例的属性。您可查看如何使用 Fn::ImportValue 函数从其他堆栈导入联网资源。

创建 Web 应用程序堆栈
  1. 堆栈页面,选择右上角的创建堆栈,然后选择使用新资源(标准)

  2. 选择模板已准备就绪,然后在指定模板部分选择 Amazon S3 URL

  3. Amazon S3 URL 中,粘贴以下 URL:https://s3.amazonaws.com/cloudformation-examples/user-guide/cross-stack/SampleWebAppCrossStack.template

  4. 选择下一步

  5. 对于 Stack name,键入 SampleWebAppCrossStack。在 Parameters 部分中,让 NetworkStackName 参数使用默认值,然后选择 Next

    示例模板使用参数值指定要从中导入值的堆栈。

  6. 选择下一步。在本演练中,您无需添加标记或指定高级设置。

  7. 确保堆栈名称和模板 URL 正确,然后选择 Create stack (创建堆栈)

    CloudFormation 可能需要几分钟的时间创建堆栈。

第 3 步:验证堆栈的运行符合设计

创建该堆栈后,查看其资源并记下实例 ID。有关查看堆栈资源的更多信息,请参阅从 CloudFormation 控制台查看堆栈信息

要验证实例的安全组和子网,请在 Amazon EC2 控制台中查看实例的属性。如果实例使用 SampleNetworkCrossStack 堆栈中的安全组和子网,则表示您已成功创建跨堆栈引用。

使用控制台可查看堆栈输出和示例网站 URL 以验证 Web 应用程序是否正在运行。有关更多信息,请参阅 从 CloudFormation 控制台查看堆栈信息

步骤 4:清理资源

为了确保不因任何不必要的服务而产生费用,请删除堆栈。

删除堆栈
  1. 在 CloudFormation 控制台中,选择 SampleWebAppCrossStack 堆栈。

  2. 选择 Actions)(操作),然后选择 Delete Stack(删除堆栈)。

  3. 在确认消息中,选择 Delete (删除)

  4. 在删除堆栈后,对 SampleNetworkCrossStack 堆栈重复相同的步骤。

    注意

    等到 CloudFormation 完全删除 SampleWebAppCrossStack 堆栈。如果 EC2 实例仍在 VPC 中运行,则 CloudFormation 不会删除 SampleNetworkCrossStack 堆栈中的 VPC。