'What is the correct way to setup multiple logically organized sub folders in a terraform repo?

Currently I am working on a infrastructure in azure that comprises of the following:

  • resource group
  • application gateway
  • app service
  • etc

everything I have is in one single main.tf file which I know was a mistake however I wanted to start from there. I am currently trying to move each section into its own sub folder in my repo. Which would look something like this:

terraform-repo/
├── applicationGateway/
│   ├── main.tf
│   ├── vars.tf
├── appService/
│   ├── main.tf
│   └── vars.tf
├── main.tf
└── vars.tfvars

However when I create this while trying to move over from the single file structure I get issues with my remote state where it wants to delete anything that isn't a part of the currently worked on sub folder. For example if I wanted to run terraform apply applicationGateway I will get the following:

  # azurerm_virtual_network.prd_vn will be destroyed

Plan: 0 to add, 2 to change, 9 to destroy.

What is the correct way to setup multiple logically organized sub folders in a terraform repo? Or do I have to destroy my current environment to get it to be setup like this ?



Solution 1:[1]

You are seeing this issue because terraform ignores subfolders, so those resources are not being included at all anymore. You would need to configure the subfolders to be Terraform Modules, and then include those modules in your root main.tf

Solution 2:[2]

One option for maintaining a DRY environment this way is using Terragrunt

Terragrunt is a wrapper for Terraform that allows organization and reusable components in a slightly different way than Terraform handles environments.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1
Solution 2 0bel1sk