模块和配置文件夹的树形图
Posted: Wed Jan 29, 2025 10:10 am
这就是典型的 YAML 文件的样子。此次发布包括我们的 Azure 生产环境中的两个资源组:
典型 YAML 配置文件的内容通过使用 YAML 文件而不是 tfvar 文件或硬编码值,您创建的 Terraform 项目对技术和非技术人员来说都更容易访问,这对您自己和其他人来说都是一个巨大的好处。
特拉格朗特
让我们看看创建干净、可访问且可维护的 Terraform 项目的最后一步:Terragrunt。据该网站称, Terragrunt 是一个包装器,它提供了额外的工具来实现较少重复的基础设施配置 (DRY)、与多个 Terraform 模块配合使用以及管理远程状态。
在我们的例子中,Terragrunt 通过大幅减少需要管理的文件数量来帮助创建更精简的 Terraform 项目。这不仅可以减少混乱,如果所有 Terraform 文件未以一致的方式更新,还可以降低配置漂移的风险。 Terragrunt 是免费的、开源的并且有完善的文档。
除其他外,该工具还具有以下优点:
动态生成后端配置
动态生成提供者配置
自动完成 Terraform CLI 参数
模块的一次性定义和多功能可重用性,无需重复代码
如果您管理三个存储桶和一个虚拟机,则无需 Terragrunt 即可。但如果您 旅行社电子邮件列表 逐渐向堆栈中添加越来越多的模块(云服务),Terragrunt 可能是值得的。如果您的 Terraform 代码跨越多个环境、区域或云,那么这是特别值得的。
我在此项目结构中使用了三种类型的 Terragrunt 文件。我所说的“类型”是指这些 Terragrunt 文件位于文件夹层次结构的不同级别,因此具有不同的用途。它们共同为您节省了大量重复代码,并有助于简化基础设施的配置、部署和管理。
模块级别 terragrunt.hcl 文件的内容
Terragrunt 根文件
最重要的是云提供商文件夹中的 terragrunt.hcl 文件或 Terragrunt 根文件。在这里,您可以集中指定要使用的 Terraform 提供程序、它们的版本和远程后端。每次部署模块时,Terragrunt 都会动态创建相应的 Terraform 文件并将它们放置在运行代码的目录中。这使您免去了一次又一次重新创建这些标准文件的烦人且容易出错的任务。
terragrunt.hcl 文件还允许设置对所有环境和模块都有效的全局变量 - 例如标签 Managed_by = terraform 或 location = westeurope。这非常适合定义一次变量然后在任何地方使用它们。
Terragrunt 环境文件
除了根 terragrunt.hcl 文件之外,每个环境文件夹中还有一个 env.hcl 文件 - dev、tst 和 prd。您可以在此处设置仅适用于环境级别并由其中的所有模块共享的变量。它们非常适合设置项目或订阅 ID、名称前缀或特定于环境的设置(例如计算和网络选项)。
Terragrunt 模块文件
最后,各个模块内有 terragrunt.hcl 文件。该文件将通用 Terraform 模块与其各自的配置文件连接起来,以在云环境中创建该模块的真实实例。在这里,将 Terraform 模块视为具有不同参数的可调用函数并将配置文件视为相应的参数是有帮助的。这个类比中的每个 terragrunt.hcl 模块都是使用参数值(配置文件)调用函数(通用模块)以产生输出(基础设施)的地方。
典型 YAML 配置文件的内容通过使用 YAML 文件而不是 tfvar 文件或硬编码值,您创建的 Terraform 项目对技术和非技术人员来说都更容易访问,这对您自己和其他人来说都是一个巨大的好处。
特拉格朗特
让我们看看创建干净、可访问且可维护的 Terraform 项目的最后一步:Terragrunt。据该网站称, Terragrunt 是一个包装器,它提供了额外的工具来实现较少重复的基础设施配置 (DRY)、与多个 Terraform 模块配合使用以及管理远程状态。
在我们的例子中,Terragrunt 通过大幅减少需要管理的文件数量来帮助创建更精简的 Terraform 项目。这不仅可以减少混乱,如果所有 Terraform 文件未以一致的方式更新,还可以降低配置漂移的风险。 Terragrunt 是免费的、开源的并且有完善的文档。
除其他外,该工具还具有以下优点:
动态生成后端配置
动态生成提供者配置
自动完成 Terraform CLI 参数
模块的一次性定义和多功能可重用性,无需重复代码
如果您管理三个存储桶和一个虚拟机,则无需 Terragrunt 即可。但如果您 旅行社电子邮件列表 逐渐向堆栈中添加越来越多的模块(云服务),Terragrunt 可能是值得的。如果您的 Terraform 代码跨越多个环境、区域或云,那么这是特别值得的。
我在此项目结构中使用了三种类型的 Terragrunt 文件。我所说的“类型”是指这些 Terragrunt 文件位于文件夹层次结构的不同级别,因此具有不同的用途。它们共同为您节省了大量重复代码,并有助于简化基础设施的配置、部署和管理。
模块级别 terragrunt.hcl 文件的内容
Terragrunt 根文件
最重要的是云提供商文件夹中的 terragrunt.hcl 文件或 Terragrunt 根文件。在这里,您可以集中指定要使用的 Terraform 提供程序、它们的版本和远程后端。每次部署模块时,Terragrunt 都会动态创建相应的 Terraform 文件并将它们放置在运行代码的目录中。这使您免去了一次又一次重新创建这些标准文件的烦人且容易出错的任务。
terragrunt.hcl 文件还允许设置对所有环境和模块都有效的全局变量 - 例如标签 Managed_by = terraform 或 location = westeurope。这非常适合定义一次变量然后在任何地方使用它们。
Terragrunt 环境文件
除了根 terragrunt.hcl 文件之外,每个环境文件夹中还有一个 env.hcl 文件 - dev、tst 和 prd。您可以在此处设置仅适用于环境级别并由其中的所有模块共享的变量。它们非常适合设置项目或订阅 ID、名称前缀或特定于环境的设置(例如计算和网络选项)。
Terragrunt 模块文件
最后,各个模块内有 terragrunt.hcl 文件。该文件将通用 Terraform 模块与其各自的配置文件连接起来,以在云环境中创建该模块的真实实例。在这里,将 Terraform 模块视为具有不同参数的可调用函数并将配置文件视为相应的参数是有帮助的。这个类比中的每个 terragrunt.hcl 模块都是使用参数值(配置文件)调用函数(通用模块)以产生输出(基础设施)的地方。