如何将 terraform 文件 (main.tf) 拆分为多个文件(无模块)?

Jos*_*dez 26 google-cloud-platform terraform

我有一个通过 Terraform 部署的 GCP 基础设施:存储桶、服务帐户、计算引擎、VPC、云 SQL、BigTable、BigQuery、Composer 等。

Terraform v0.11.10 提供程序“google”(2.15.0)

最近客户要求我将我们仅有的一个 terraform 文件(例如 main.tf)拆分为多个文件。例如:一个文件用于存储桶,另一个用于服务帐户,另一个用于数据库服务等。

我只有一个 terraform 状态文件位于 GCP 存储桶中。

我怎样才能以最小的影响做到这一点?地形状态怎么样?(是否还会有多个状态文件?或者是只保留一个 TF 文件的想法,即使我们将代码拆分出来?)

注意:这与 Terraform 模块无关,它只是将单个 terraform 文件 (.tf) 分成多个文件 (.tf)

提前致谢!

Mar*_*ins 27

Terraform 不会为您使用的文件名和您拥有的文件数量赋予任何特殊含义。相反,Terraform 读取所有.tf文件并将它们的内容一起考虑。

因此,您可以自由地将main.tf文件中的块移动到.tf您喜欢的同一目录中任意数量的单独文件中,并且 Terraform 会认为配置完全等效,只要您在执行此操作时不更改这些块的内容即可。

Override Files有一个特殊情况,使上述内容不完全正确。只要您避免命名任何文件override.tf或使用_override.tf后缀,则该特殊情况将不适用,但我只是为了完整性才提到它。)


gui*_*ere 9

根据文档terraform apply,该命令可以应用于文件或目录。因此,将所有文件放在一个目录中并应用它们。

tfstate 文件与部署相关。你将只有一个。

关于最低的影响......很难说。一切都取决于您的变量和资源依赖项。如果您必须搜索多个文件以了解如何创建资源或设置变量的位置,则多个文件不是一个好主意……但是,这是您的客户要求,并且为了可读性而这样做要简单得多。


Rya*_* Lv 7

即使您的项目中尚未包含任何模块。Terraform 始终在单个根模块的上下文中运行。该.tf文件位于root模块下。

基于 Terraform 文档:

Terraform 评估模块中的所有配置文件,有效地将整个模块视为单个文档。将各个块分成不同的文件纯粹是为了方便读者和维护者,对模块的行为没有影响。

https://www.terraform.io/docs/language/files/index.html#directories-and-modules