我是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-modules
GitHub组织存储库,了解如何正确编写单个模块并在其他高级模块中重用它们。
由于这是一门艺术,每个人的需求都因其项目和团队的组织方式而异,因此GitHub上托管了许多Terraform项目,您可以通过在HCL文件中搜索terraform
块来找到这些项目。我还想指出的是,现有的一些项目配置可能受益于使用Terraform工作区,有利于为单独的测试/阶段/生产环境等提供单独的项目配置,因此涵盖这一概念可能会很有用。