Terraform文件夹结构



我是terraform的新手,从cloudformation开始,需要文件夹结构方面的帮助。我正在创建一堆aws服务,文件夹结构如下。这是正确的路吗?

Development
|
services
|
lambda_function
|
main.tf
vars.tf
output.tf
ecs
|
main.tf
vars.tf
output.tf

问题是,如果我们导入现有的VPC信息,它应该在每一层中吗?像一个单独的tf?或main.tf的一部分。有许多服务谁拥有文件夹结构将帮助3000行的单个main.tf。谢谢

正如Filip Dupanović所说,阅读Hashicorp网站上的最佳实践指南,但对于文件夹结构,其要点是:

  • 将资源放在main.tf文件中
  • 将输入放入变量.tf
  • 将输出放入outputs.tf
  • 将您制作的任何私有子模块(私有表示它们不用于其他模块)放在modules子文件夹中
  • 创建一个包含子文件夹中示例的示例文件夹
  • 创建一个自述文件,描述模块的使用。考虑使用terraform文档生成其中的一部分

数字回购terraform-aws-mymodule:中mymodule的示例

terraform-aws-mymodule
+- examples
|   +- simple
|      + main.tf
+- modules
|   +- lambda_function
|       + main.tf
|       + variables.tf
|       + outputs.tf
|   +- ecs
|       + main.tf
|       + variables.tf
|       + outputs.tf
+ main.tf
+ variables.tf
+ outputs.tf
+ README.md

我绝对建议阅读模块概述教程和相关资源,因为重用本地模块实际上是管理Terraform项目配置的核心。

根据这一点,如果您正确地将每个服务抽象为一个模块,并且声明这些服务的实例将与Terraform项目配置非常匹配,那么您似乎就走上了实现重用的正确轨道。您还可以查看terraform-google-modulesGitHub组织存储库,了解如何正确编写单个模块并在其他高级模块中重用它们。

由于这是一门艺术,每个人的需求都因其项目和团队的组织方式而异,因此GitHub上托管了许多Terraform项目,您可以通过在HCL文件中搜索terraform块来找到这些项目。我还想指出的是,现有的一些项目配置可能受益于使用Terraform工作区,有利于为单独的测试/阶段/生产环境等提供单独的项目配置,因此涵盖这一概念可能会很有用。