首页 > 解决方案 > Terraform 模块子目录放置

问题描述

我是 terraform 的新手,我正在考虑编码新环境的最佳结构。

假设我的每个环境 dev、staging 和 production 都有一个根目录。

我想知道是否最好将模块目录定位为根目录之外的子目录,或者将模块目录定位在与根目录相同的级别。

官方指南将模块目录显示为每个根目录下的子目录(即,一个用于开发的模块目录,另一个用于暂存等),但这使得共享每个环境的模块变得困难。这似乎是官方的建议,虽然https://www.terraform.io/docs/modules/index.html

你通常在你的仓库中的哪里有内部模块?

问候肖恩

标签: terraform

解决方案


我们尽量不创建“内部”模块,因为它们不能跨 repos 重用,因此我们使用 git 源而不是文件系统源。我觉得这种方法更好,因为

  1. 模块不绑定到单个存储库
  2. 您可以版本化您的模块和来源特定的参考

从 git 获取模块时,您只需为每个模块创建一个新的存储库。然后你可以用你的模块文件保持干净

  • 主文件
  • 变量.tf
  • 输出.tf
  • 版本.tf

其中versions.tf 用于固定模块所需的Terraform 核心和提供程序版本。

IE

terraform {
    version = "= 0.12.9"
    required_providers {
        aws = ">= 2.7.0"
    }
}

推荐阅读