输出和导出之间的区别

2024-05-13

在 CloudFormation 中,我们能够从模板输出一些值,以便其他进程、堆栈等可以检索它们。这通常是某个名称,可能是 URL 或在堆栈创建(部署)过程中生成的名称等。

我们还能够从模板“导出”。返回值作为“输出”与“导出”之间有什么区别?


常规输出值不能被其他堆栈引用。当您chain or nest您的堆栈及其范围/可见性是本地的。导出的输出在帐户和区域内全局可见,并且可供您将来要部署的任何堆栈使用。

Chaining

当您链接堆栈时,您可以部署一个堆栈,获取其输出,并将其用作要部署的第二个堆栈的输入参数。

例如,假设您有两个名为instance.yaml and eip.yaml. The instance.yaml输出其实例 ID(不导出),同时eip.yaml将实例 id 作为输入参数。

要部署它们,您必须将它们链接起来:

  1. Deploy instance.yaml并等待其完成。
  2. 请注意,它输出值(即实例 ID)——通常以编程方式完成,而不是手动完成。
  3. Deploy eip.yaml并将实例 ID 作为其输入参数传递。

Nesting

当您嵌套堆栈时,您将拥有一个父模板和一个子模板。子堆栈将从父堆栈内部创建。在这种情况下,子堆栈将产生一些输出(而不是导出)供父堆栈使用。

例如,让我们再次使用instance.yaml and eip.yaml。但这一次eip.yaml将成为父母并且instance.yaml将是孩子。还eip.yaml不接受任何输入参数,但是instance.yaml输出其实例 ID(不导出)

在这种情况下,要部署它们,您需要执行以下操作:

  1. 上传子模板(instance.yaml) to s3
  2. In eip.yaml使用创建子实例堆栈AWS::CloudFormation::堆栈 https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-stack.html以及步骤 1 中的 s3 url。

这边走eip.yaml将能够使用以下命令从嵌套堆栈的输出中访问实例 IDGetAtt.

交叉引用

当您交叉引用堆栈时,您将拥有一个导出其输出的堆栈,以便同一区域和帐户中的任何其他堆栈都可以使用它们。

例如,让我们再次使用instance.yaml and eip.yaml. instance.yaml将导出其输出(实例 ID)。使用实例 IDeip.yaml将不得不使用进口值 https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-importvalue.html在其模板中,不需要任何输入参数或嵌套堆栈。

在这种情况下,要部署它们,您需要执行以下操作:

  1. Deploy instance.yaml并等待它完成。
  2. Deploy eip.yaml这将导入实例 ID。

Altough 交叉引用看起来很有用,但它有一个主要问题,那就是更新或删除交叉引用非常困难stacks https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-stack-exports.html:

另一个堆栈导入输出值后,您无法删除正在导出输出值的堆栈或修改导出的输出值。必须先删除所有导入,然后才能删除导出堆栈或修改输出值。

如果您正在开始设计并且模板可能经常更改,那么这是非常有问题的。

什么时候用哪个?

当您有一些数据时,请使用交叉引用(导出的值)全球资源这些数据将在给定区域和帐户中的许多堆栈之间共享。此外,它们不应该经常更改,因为它们很难修改。常见的示例有:用于集中日志记录位置的全局存储桶、VPC。

当您有一些时,请使用嵌套堆栈(不导出输出)通用组件您经常部署,但每次它们可能会有所不同。示例包括:ALB、堡垒主机实例、vpc 接口端点。

最后,链式堆栈(不是导出的输出)对于设计很有用松耦合模板,您可以在其中根据新要求混合和匹配模板。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

输出和导出之间的区别 的相关文章

随机推荐

  • 批量归一化,是还是否?

    我使用 Tensorflow 1 14 0 和 Keras 2 2 4 以下代码实现了一个简单的神经网络 import numpy as np np random seed 1 import random random seed 2 imp
  • 在VBA中将字符串文本拆分为单独的行

    我的 excel 或 csv 文件 中有 2 个文本框 如下所示 文本框 1 包含 11111 22222 33333 文本框 2 包含 55555 11111 22222 33333 55555 我希望 之间的文本位于 3 个不同的行上
  • 在 Elastic Beanstalk SSH 上运行 Django 命令 -> 缺少环境变量

    所以这对我来说是一个长期存在的问题 我很想解决它 我也认为这会帮助很多其他人 我希望在 Elastic Beanstalk EC2 实例上进行 ssh 操作后运行 Django 命令 例如 python manage py dumpdata
  • 如何在Android中正确找到本机lib路径?

    我正在尝试遵循以下建议https issuetracker google com issues 128554619 comment4 https issuetracker google com issues 128554619 commen
  • iPhone CGContext:用两种不同颜色绘制两条线

    我在 iPhone 应用程序中使用 CGContext 时遇到一些问题 我试图用不同的颜色绘制几条线 但所有线最终总是具有最后使用的颜色 我尝试了几种方法 但并不幸运 我建立了一个小型示例项目来处理这个问题 这是我的代码 我在drawRec
  • 增量SQL查询

    我的应用程序有一组固定的 SQL 查询 这些查询以轮询模式运行 每 10 秒一次 由于数据库的大小 gt 100 GB 和设计 超级规范化 我遇到了性能问题 每当数据库上发生更改查询结果的 CRUD 事件时 是否可以对给定查询进行增量更改
  • Phoenix 中的 web/static 和 priv/static 有什么区别?

    我对长生不老药和凤凰是新手 现在我在凤凰城的静态资产方面遇到了麻烦 我想在我的页面中添加一个js文件 我在我的模板中添加以下代码 js test js gt gt 然后创建一个js文件web static js test js 但是 我收到
  • 应用于整个 HTML 的 BODY 标签的背景颜色[重复]

    这个问题在这里已经有答案了 我对 html 中 body 标签的大小感到困惑 我有一个艰难的代码如下 body padding 0px height 100px background color e5e5e5 为什么背景覆盖整个页面 我认为
  • 向 jQuery 函数 Interval 添加动画

    我的问题是如何向倒计时器添加一些动画 我的意思是每次调用 Function Interval 时都需要添加一些动画 如下所示 youtube 视频链接 https www youtube com watch v A9fnvhcWPRo 第二
  • 根据窗口大小调整 div 及其内部内容的大小

    我已经查找了一百万种技术 但我无法让它发挥作用 我知道还有其他类似的帖子 如果它给任何人带来麻烦 我很抱歉 但我需要针对我的代码的具体说明 因为我很愚蠢 提前非常感谢 我希望 div 容器 contentContactBox 以及其中的所有
  • 使用特定 HTTP 方法链接到页面 (DELETE)

    如何像 Rails 那样链接到页面并让浏览器使用 DELETE 方法调用它 我试过 a href DELETE ME a 但不起作用 我使用 Node js 所以我可以用它来处理 DELETE 方法 你不能 链接只会触发 GET 请求 您可
  • R ifelse 错误地用整数替换文本

    我正在使用 Udacity 课程中的一些数据 链接 Reddit 调查回复 https s3 amazonaws com udacity hosted downloads ud651 reddit csv 我试图通过使用单个单词替代替换任何
  • 无法在 Eclipse 中连接到虚拟机

    想要改进这篇文章吗 提供此问题的详细答案 包括引用和解释为什么你的答案是正确的 不够详细的答案可能会被编辑或删除 当我尝试在 Eclipse 上调试任何项目时 我突然开始遇到这个奇怪的错误 我不记得有什么改变让这个问题突然出现 Launch
  • File.delete 上的 Ruby (Errno::EACCES)

    我试图在使用完一些 XML 文件后删除它们 其中一个文件给了我这个错误 delete Permission denied monthly builds xml Errno EACCES Ruby 声称该文件受到写保护 但我在尝试删除它之前设
  • 将此 XML 反序列化为对象的最佳方法

    在我见过的与我的类似的其他示例中 有一个根节点 然后是一个数组节点 然后是一堆数组项 我的问题是 我的根节点is我的数组节点 所以我见过的示例似乎不适合我 而且我无法更改 XML 架构 这是 XML
  • ASP.Net 的最佳免费文件管理器 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • MySQL 全文搜索之谜

    我们的网站上有一个使用 MySQL 全文搜索的简单搜索 但由于某种原因 它似乎没有返回正确的结果 我不知道这是否是 Amazon RDS 我们的数据库服务器所在的位置 或我们请求的查询的某种问题 这是数据库表的结构 CREATE TABLE
  • 如何在 kivy FileChooser Python 中访问所有硬盘

    如何使用 kivy 1 11 1 中的列表视图或图标视图在 kivy FileChooser 中显示系统 C X J 中安装的所有硬盘驱动器 我遇到了同样的问题 最终通过为驱动器添加 快捷方式 按钮解决了这个问题 我首先使用以下命令获取所有
  • SQL Server 表中最多可以有多少行

    通常我们可以给出更多的值 在SQL Server中一个表最多可以有多少行 之后我们就无法添加新行了 有一些边缘情况 除了明显的磁盘空间问题之外 SQL Server 会阻止您添加更多行 而不是确切的行数 但值得一提 你有一个IDENTITY
  • 输出和导出之间的区别

    在 CloudFormation 中 我们能够从模板输出一些值 以便其他进程 堆栈等可以检索它们 这通常是某个名称 可能是 URL 或在堆栈创建 部署 过程中生成的名称等 我们还能够从模板 导出 返回值作为 输出 与 导出 之间有什么区别