Page 1 of 1

复杂 Terraform 项目的模板

Posted: Wed Jan 29, 2025 10:10 am
by suchona.kani.z
编写 Terraform 代码很容易。然而,处理它可能很棘手。这是我在专业使用 Terraform 三年后总结的经验。老实说,编写好的 Terraform 代码也很困难。但在我看来,更大的挑战是组织代码,使其干净、可访问和可维护。

对于所谓的企业项目尤其如此。这些是跨越多个帐户、区域、服务甚至云的大型项目。此类项目很快就会变得广泛且复杂。在企业环境中,仔细考虑 Terraform 项目的结构非常重要。


基础设施即代码项目的管理很快就会变得复杂,来源:Unsplash.com

在这篇博文中,我想描述一下我在几个企业项目中获得的一些经验。下面我介绍了一个 Terraform 项目结构,事实证明,它可以作为组织代码和配置文件的起点。我想为想要专业化 Terraform 代码的开发人员提供指导,尤其是那些刚刚发现基础设施即代码的开发人员。

Terraform 项目的结构化选项
模块
开发干净、可访问且可维护的 Terraform 项目的第一步是使用模块。

模块是 Terraform 代码的可重用配置。这些模块形成了基 旅行社电子邮件列表 础设施单元,例如服务器、数据库或托管服务。为了充分利用它们,模块应该尽可能通用。模块通常对应于特定服务,例如 GCP BigQuery 或 Azure SQL Server。

在我们的示例存储库中,有一个名为“modules”的文件夹,该文件夹由云提供商(在我们的示例中为 azure 和 gcp)划分。在这些子文件夹中,您将找到每个提供商的通用 Terraform 模块。


模块文件夹的树形图

每个模块由三个文件组成:main.tf、variables.tf 和outputs.tf。例如,我建议坚持这种约定,即使您的模块没有输出。在这种情况下只需插入一个空文件。

模块非常重要,因为它们有助于将我们的基础设施配置分解为标准化的构建块,我们可以在不同的项目或实现中重用这些构建块。此外,它们还可以大大简化复杂的基础设施建设。无论您是为自己的团队还是为其他团队创建模块,您都可以根据模块用户的需求精确定制它们。

我基本上想说的是,如果您采用一致的模块化方法来编写 Terraform 代码,那么创建干净的 Terraform 项目会更容易,因为您可以避免代码重复并跨不同需求抽象代码。

YAML 文件
构建干净、可访问且可维护的 Terraform 项目的另一个步骤是模块配置。

配置 Terraform 模块的方法有很多种。您可以直接在 Terraform 代码中对配置值进行编码,或者将它们组织到 tfvar、YAML 或 JSON 文件中。我推荐 YAML 文件,因为它们提供三个主要好处:

它们易于阅读,因此即使不熟悉 Terraform 的团队成员也可以快速理解和更新它们。
它们将所有相关配置捆绑在一个固定位置。这意味着您不必在 Terraform 代码中搜索信息。此外,与 JSON 文件不同,您可以插入注释和说明。
Terraform 可以识别您对文件所做的任何更改。您想添加另一个数据集、用户或其他名称吗?您所需要做的就是向 YAML 添加另一个块。任何人都可以做到,而且速度很快。 Terraform 应用更改而无需编辑底层代码。
如果您查看 config 文件夹,您会发现它按云提供商和模块划分。就像模块文件夹一样!因此,每个通用 Terraform 模块都有一组针对不同云和环境的相应配置文件。例如,Terraform云存储模块在gcp配置文件夹中有相应的云存储配置文件。这是因为模块是中央组织单元。