Terraform基于Azure上使用模块(五)

这是我参与11月更文挑战的第5天,活动详情查看:2021最后一次更文挑战

七、使用Terraform Registry

Terraform 模块 repo 推荐的文件夹结构如下所示。根模块配置文件位于存储库目录的根目录中,在本例中是 storage-account。我们在根文件夹中还有一个 README.md。这是一个包含有关模块信息的 markdown 文件。

建议为每个 Terraform 配置都配置 README.md 文件,以描述它是什么以及如何使用它。下一步,我们有我们的模块文件夹,其中包含任何子模块,将需要执行额外的任务,例如,配置私人链接或设置一个静态网站。我们还有示例目录,其中应该包含模块的每个可能场景的示例。

最后,我们有我们的测试文件夹,其中包括在 Golang 编写的测试文件,用示例文件夹中的示例来测试我们的模块:

storage-account
    └── README.md
    └── main.tf
    └── variables.tf
    └── outputs.tf
    ├───modules 
    │     ├──private-link
    │     │       └── README.md
    │     │       └── main.tf
    │     │       └── outputs.tf
    │     │       └── variables.tf
    │     └──static-website
    │             └── README.md
    │             └── main.tf
    │             └── outputs.tf
    │             └── variables.tf 
    ├───examples
    │     ├───public
    │     │       └── README.md
    │     │       └── main.tf
    │     │       └── outputs.tf
    │     │       └── variables.tf
    │     ├──private-link
    │     │       └── README.md
    │     │       └── main.tf
    │     │       └── outputs.tf
    │     │       └── variables.tf 
    │     └──static-website
    │             └── README.md
    │             └── main.tf
    │             └── outputs.tf
    │             └── variables.tf
    └───test
         └── sa_public_test.go
         └── sa_private_test.go
         └── sa_static_website_test.go
复制代码

这个模块结构是我们如何创建可用于每个项目的生产级 Terraform 模块。创建一个模块似乎有很多工作要做,而且可能会非常繁重; 但是,从小处着手,慢慢构建您的模块。一个复杂的模块可能需要一个有经验的开发人员几个月的时间来构建。

构建一个模块可能会花费很长的时间; 但是,您可以通过使用它们作为基础或者单独使用它们来利用社区共享的数千个模块。Terraform 注册中心是社区制作的 Terraform 模块的集中场所。

在构建自己的模块之前检查 Terraform Registry是一个好主意,可以节省时间。这也是一个很好的学习工具,因为您还可以在 GitHub 上查看项目,了解模块是如何完成的以及模块背后使用的逻辑。

一个 Terraform 注册表也可以是私有的,并通过 Terraform cloud使用。在公共 Terraform Registry 中的模块可以通过在 < namespace >/< name >/< provider > 格式中引用它们来使用。在下面的例子中,我们使用一个模块从 Terraform 注册中心部署 Azure 功能:

resource "azurerm_resource_group" "rg" {
  name     = "rg-MyFirstTerraform"
  location = "westus"
}

module "function-app" {
  source  = "InnovationNorway/function-app/azurerm"
  version = "0.1.2"

  function_app_name = "func-terrademo"
  resource_group_name = azurerm_resource_group.rg.name
  location = azurerm_resource_group.rg.location
}
复制代码

当我们运行 Terraform init 时,模块将自动下载并在 Terraform 应用期间使用。

八、结论

在本文中,我们了解了模块以及如何使用它们来抽象 Terraform 配置。我们讨论了如何创建模块以及如何引用模块的输出。

我们还研究了如何将模块存储在 git 仓库中,比如 GitHub 和 Azure Repos。最后,我们了解了 Terraform 注册表和存储在那里的社区制作模块。


少年,没看够?点击石头的主页,随便点点看看,说不定有惊喜呢?欢迎支持点赞/关注/评论,有你们的支持是我更文最大的动力,多谢啦!