【问题标题】:How to arrange terraform files/modules properly如何正确安排 terraform 文件/模块
【发布时间】:2021-03-19 07:37:59
【问题描述】:

我有多个可重复使用的terraform 模块。我正在重用这些模块来创建具有不同配置的相同资源。

所以我的文件夹结构是这样的:

modules/
    vpc
    subnet
    lb
    s3
main.tf
variables.tf

所以在我的main.tf 中,我一次又一次地使用上述模块(即每个模块重复/重复使用超过 10 次)

所以我想知道有没有更好的方法在main.tf 中安排这些模块?

作为建议,我是否可以在不同的 terraform 文件中重复使用这些模块,如下所示,并在 main.tf 中调用这些 terraform 文件以获得更好的可读性和理解?

modules/
    vpc
    subnet
    lb
    s3
service_one.tf
service_two.tf
.
.
service_ten.tf
main.tf
variables.tf

main.tf 中,我可以调用这些service_*.tf 文件,这样main.tf 会更干净。

谢谢

【问题讨论】:

    标签: terraform


    【解决方案1】:

    不确定我是否正确。一般关于结构:TF Modules Structure.

    Terraform 将文件夹中的所有内容视为模块的内容。当然,您可以根据需要创建任意数量的 *.tf 文件。您甚至不必在 main.tf 中引用/调用它们。主文件夹(不包括子文件夹)中的所有 *.tf 文件构成主模块,每个子文件夹自动成为子模块。可以把它想象成一个文件夹中的所有 *.tf 文件都合并为一个大文件。

    一般来说,我只在 main.tf 中定义 terraform 操作所需的东西,例如后端、terraform 和提供程序版本等。 除此之外,我根据更适合项目的内容将资源分组为主题或服务/产品,例如:

    rds.tf
    ecs.tf
    networking.tf
    

    product1.tf (includes rds, lambdas etc. for product1)
    product2.tf (includes rds, lambdas etc. for product2)
    

    【讨论】:

    • 非常感谢,这很有帮助。顺便说一句,既然我已经把所有东西都放在了main.tf 中,如果我将服务 1 相关的 terraform 代码移动到另一个 tf 文件,它会不会弄乱我的远程状态?
    • 只要您不将它们移动到不同的模块(即子文件夹)或重命名资源,状态文件应该没问题。 Terraform 从字面上将所有内容合并到一个大文件中,因此没有区别... ;) 但是尝试使用一项服务并检查 terraform plan 的输出。只是为了避免错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-23
    • 1970-01-01
    • 2017-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-01
    相关资源
    最近更新 更多