1

我刚刚了解了 Terragrunt。虽然我看到了 Terraform 中缺少的一些好东西,但我并不完全理解 DRY 配置方面的真正好处(这似乎是 Terragrunt 最受推崇的方面)。

在我见过的所有这些示例中,HCL 文件(例如,用于各个阶段的文件)对我来说看起来相当多余——而且基本上包含的信息与module {}在普通 Terraform 中的块中传递的信息相同。

难道你不能通过在普通的 Terraform 中编写一个只实例化其他模块的“组合模块”,用大致相同数量的代码来实现同样的事情吗?我错过了什么吗?

4

2 回答 2

1

我想说的是,如今典型的设计模式是,您将拥有您所称的“组合模块”层,调用许多底层模块来完成它们的工作。这在其他世界中被称为其他东西——有些人称它们为蓝图,terraform cloud 称它为你的“配置”,但大多数设计都包含这些内容。

terragrunt 允许您做的是获取该“组合模块”并每次使用唯一变量多次实例化它。如果您没有使该模块非常可重用,这将是不可能的,但如果它是模式是:

  1. Terragrunt 使用来自 1 个目录的唯一值调用您的组合模块。这会调用其所有底层模块,为您提供该目录/工作区/无论您的工具感觉如何调用它的完整部署。这个区域有自己的远程状态。

  2. Terragrunt 使用不同的值从另一个目录调用您的组合模块。这再次调用所有底层模块,为您提供不同目录/工作区/您想要调用的任何内容的完整部署。该区域也有自己的远程状态。

您可以以完全独特的方式重复使用相同的组合模块 50/100/无限次,所有这些都不会相互冲突。

这是现在很常见的设计模式。你也可以在没有 terragrunt 的情况下达到同样的效果。这是一个很好的包装器,但它非常容易。

还有很多其他好处,但就执行上下文而言,这就是它的帮助方式。

于 2021-01-29T15:46:13.433 回答
1

我也是 Terragrunt 的新手,最初,我也有同样的想法。

你读过https://terragrunt.gruntwork.io/docs#features吗?

正如 Terragrunt 自己所说,它只是 Terraform 之上的一个薄层,用于在 TF 上添加某些功能。一些令我印象深刻的 DRY 功能:

  1. 生成远程后端配置
  2. 生成提供者配置代码
  3. 不需要在多模块设计中重复输入变量
  4. 可以同时在每个子模块以及所有模块上执行

如果您使用 Terraform 模块组合和 Terragrunt 创建相同的设计以查看差异,也许会更清楚。

于 2020-08-23T20:25:35.977 回答