AWS CloudFormation
User Guide (API Version 2010-05-15)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

演练:引用另一个 AWS CloudFormation 堆栈中的资源输出

要将资源从一个 AWS CloudFormation 堆栈导出到另一个堆栈,可创建跨堆栈引用。利用跨堆栈引用,您可以使用分层架构或面向服务的架构。您可以在单独的堆栈中创建相关的 AWS 资源,而不是在单个堆栈中包含所有资源;然后您可以引用其他堆栈中的必需资源输出。通过限制对输出的跨堆栈引用,您可以控制由其他堆栈引用的堆栈部分。

例如,您可以将一个带 VPC、安全组和子网的网络堆栈用于公有 Web 应用程序,并且有一个单独的公有 Web 应用程序堆栈。为确保 Web 应用程序能使用网络堆栈中的安全组和子网,可以创建一个使 Web 应用程序堆栈能够引用网络堆栈中的资源输出的跨堆栈引用。借助跨堆栈引用,Web 应用程序堆栈的所有者无需创建或维护联网规则或资产。

要创建跨堆栈引用,可使用 Export 输出字段标记要导出的资源输出的值。然后,使用 Fn::ImportValue 内部函数导入该值。有关更多信息,请参阅 输出Fn::ImportValue

先决条件

在开始此演练之前,请检查您是否具有使用以下所有服务的 AWS Identity and Access Management (IAM) 权限:Amazon VPC、Amazon EC2 和 AWS CloudFormation。

注意

AWS CloudFormation 是一项免费服务。但是,对于堆栈中包含的 AWS 资源,您需要按各自的现有费率付费。有关 AWS 定价的更多信息,请参阅每种产品的详细信息页

以下限制适用于跨堆栈引用:

  • 对于每个 AWS 账户,Export 名称在一个区域内必须是唯一的。

  • 不能在区域之间创建跨堆栈引用。您只能使用内部函数 Fn::ImportValue 导入在同一区域内已经导出的值。

  • 对于输出,ExportName 属性值不能使用依赖于资源的函数 (RefGetAtt)。

    同样,ImportValue 函数不能包括依赖于资源的函数 (RefGetAtt)。

  • 如果另一个堆栈引用一个堆栈的其中一个输出,则您无法删除被引用堆栈。

  • 您无法修改或删除由另一个堆栈引用的输出值。

步骤 1:使用示例模板创建网络堆栈

网络堆栈包含您将在 Web 应用程序堆栈中使用的 VPC、安全组和子网。除了这些资源之外,网络堆栈还将创建 Internet 网关和路由表来实现公共访问。

注意

您必须先创建此堆栈,然后才能创建 Web 应用程序堆栈。如果先创建 Web 应用程序堆栈,则它没有安全组或子网。

创建网络堆栈

  1. 打开 AWS CloudFormation 控制台并选择 Create Stack

  2. Select Template 部分中,选择 Upload a template to Amazon S3,再选择 Specify an Amazon S3 template URL,然后将以下 URL 复制并粘贴到文本框中:https://s3.amazonaws.com/cloudformation-examples/user-guide/cross-stack/SampleNetworkCrossStack.template

    该链接提供网络堆栈模板的位置。要查看堆栈将创建的资源,请选择该链接,这将打开模板。在输出部分中,您可看到示例模板导出的联网资源。如果您从其他堆栈导出联网资源,则已导出资源的名称将以堆栈的名称为前缀。当用户导入联网资源时,他们可指定从中导入资源的堆栈。

  3. 在查看模板后,选择 Next

  4. 对于 Stack name,键入 SampleNetworkCrossStack,然后选择 Next

    注意

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

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

  6. 确保堆栈名称和模板 URL 正确,然后选择 Create

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

  7. 要监控进度,可查看堆栈事件。有关更多信息,请参阅 查看堆栈数据和资源

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

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

注意

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

创建 Web 应用程序堆栈

  1. 打开 AWS CloudFormation 控制台并选择 Create Stack

  2. Select Template 部分中,选择 Specify an Amazon S3 template URL,然后将以下 URL 复制并粘贴到文本框中:https://s3.amazonaws.com/cloudformation-examples/user-guide/cross-stack/SampleWebAppCrossStack.template

    该链接提供了 Web 应用程序模板的位置。要查看堆栈将创建的资源,请选择该链接,这样会打开模板。在资源部分中,查看 EC2 实例的属性。您可查看如何使用 Fn::ImportValue 函数从其他堆栈导入联网资源。

  3. 在查看模板后,选择 Next

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

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

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

  6. 确保堆栈名称和模板 URL 正确,然后选择 Create

    AWS CloudFormation 创建堆栈可能需要花费几分钟时间。

  7. 创建该堆栈后,查看其资源并记下实例 ID。有关查看堆栈资源的更多信息,请参阅查看堆栈数据和资源

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

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

步骤 3:清除资源

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

删除堆栈

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

  2. 选择 Actions,然后选择 Delete Stack

  3. 在确认消息中,选择 Yes, Delete

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

    注意

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

    将删除您之前创建的所有资源。

使用本演练中的示例模板可构建您自己的跨引用堆栈。