Terraform 28: 1: Organizando tus archivos .tf
easy⏱ 5 mincourseterraform
Un directorio, muchos archivos, un módulo
Terraform concatena todos los .tf de un directorio en un único módulo raíz antes de evaluar nada. El orden y los límites de archivo no le importan al motor — un recurso en main.tf puede referenciar una variable declarada en variables.tf. La división existe solo para que quien revisa encuentre las cosas rápido.
# The conventional layout of a single root module:
#
# .
# ├── main.tf # resources & data sources
# ├── variables.tf # input variable declarations
# ├── outputs.tf # output values
# ├── providers.tf # provider + required_providers
# └── backend.tf # remote state backend config
Qué vive en cada archivo
providers.tf fija el origen y las versiones del provider. variables.tf declara entradas (sin valores). main.tf tiene los recursos reales. outputs.tf expone valores que otros módulos o personas necesitan. backend.tf dice dónde se guarda el estado.
# providers.tf
terraform {
required_version = ">= 1.6.0"
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = "~> 4.0"
}
}
}
provider "azurerm" {
features {}
}
# variables.tf
variable "location" {
type = string
description = "Azure region for all resources."
default = "westus2"
}
# main.tf
resource "azurerm_resource_group" "orders" {
name = "myorg-orders-dev-rg"
location = var.location
}
# outputs.tf
output "resource_group_name" {
value = azurerm_resource_group.orders.name
}
¿Archivos grandes? Dividí por tema, no por cantidad
Cuando main.tf crece, dividilo por dominio — network.tf, storage.tf, keyvault.tf — en vez de arbitrariamente. Terraform igual los fusiona, y el nombre del archivo se vuelve documentación. Evitá un archivo gigante y evitá cien archivos diminutos.
Modelá la división de archivos
Construí un objeto fileRoles que mapee cada nombre de archivo (main.tf, variables.tf, outputs.tf, providers.tf, backend.tf) a una descripción de una línea de lo que va en él. Logueá fileRoles["variables.tf"].