theme: condensed-night-purple

在创建生产级Terraform配置时,模块是绝对的。使用它们的更明显的效益之一是他们允许我们的代码干燥。干燥是一种软件开发术语,代表不要重复自己。

一、前言

使用模块这个想法是减少我们代码中的重复量。在Terraform中,我们可以创建模块来构建基础架构的可重用组件。例如,我们可以为SQL服务器和用于虚拟机的单独安装一个模块。然后,我们可以重新使用每个模块来部署服务并构建各种环境的基础架构。

模块还应该用作将大型环境拆分为较小组件的一种方法。我们不希望拥有一个具有超过1000行代码的main.tf文件。将我们的代码分成较小的模块允许我们安全地对我们的环境进行更改而不会影响大块代码。

此外,通过将我们的环境拆分为模块,我们现在可以将我们的基础架构分开到可测试模块中。使用软件开发测试实践来测试我们的Terraform代码的能力是首先在代码中定义的基础架构的巨大效益。

最后,模块还为Terraform用户提供了一种方式,以私下或在Terraform社区中共享他们的配置。2019年,HCL是GitHub上的第3最快的编程语言,验证了Hashicorp产品堆栈的加速采用。

在本指南中,我们将创建一个模块并了解如何将其集成到我们的Terraform配置中。

二、环境准备

在开始之前,您需要设置以下内容: 1. 订阅Azure 2. 配置Terraform环境,并设置Azure认证

三、模块结构

在真实的 Terraform 环境中,我们不希望为了部署基础设施而反复重新创建相同的代码。这将在我们的 Terraform 代码中创建大量冗余。相反,我们希望将 Terraform 配置拆分为模块; 通常,最佳实践是为每个组件提供一个模块。

例如,我们可以为 SQL 数据库创建一个模块,其中包含根据需要部署 SQL 的所有配置。然后,只要需要 SQL 数据库,我们就可以重用该模块,并在 Terraform 配置中调用它。

下图展示了通过组件模块分配各种Azure服务的策略。通过在此环境中为每个服务创建四个模块,我们还可以在DEV,QA和PROS中重新使用相同的代码。

terraform 如何output modules 内 resource terraform模块_数据库

这种做法确保了在每个开发阶段的每个环境之间准确的基础设定比较。我们不再将我们的代码从DEV转到QA复制和粘贴到QA。相反,我们将模块参数化为允许我们为每个环境略微自定义,例如资源名称和网络子网。

为每个云服务创建模块还允许我们在其他项目中重新使用模块。我们的Terraform模块变成了可重复使用的构建块,用于构建基础架构。