Search code examples
terraformterraform-provider-aws

Terraform folder structure


I am new to terraform, moving from cloudformation and need a help in folder structure. I am creating bunch of aws services and have the folders structured as below. Is this the right way?

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

Question is, if we import existing VPC information, should it be in each layers? like a separate tf? or part of main.tf. There are many services who having the folder structure will help rather 3000 lines of single main.tf. Thanks


Solution

  • Like Filip Dupanović said, read the best practice guide on Hashicorp's site, but for folder structure, the gist of them are:

    • put your resources in a main.tf file
    • put inputs in variables.tf
    • put outputs in outputs.tf
    • put any private sub-modules you make (private means they are not intended for use in other modules) in a modules sub-folder.
    • create an examples folder that contains examples in subfolders.
    • create a README that describes the module's use. Consider using terraform-docs to generate part of it.

    Example for mymodule in the git repo terraform-aws-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