Terraform 23: Qué es el state de Terraform y por qué existe
easy⏱ 5 mincourseterraform
El state es el mapa de la config a la realidad
Cuando corrés terraform apply, Terraform crea recursos reales pero además escribe el state: un archivo JSON que vincula cada dirección de recurso (como azurerm_resource_group.orders) con el id real del objeto y sus últimos atributos conocidos. En la corrida siguiente compara config deseada contra state registrado para calcular un plan mínimo. Sin state, Terraform no tendría memoria de lo que ya posee.
# Config you wrote
resource "azurerm_resource_group" "orders" {
name = "myorg-orders-dev-rg"
location = "westus2"
}
# What state records after apply (simplified terraform.tfstate)
# {
# "resources": [{
# "type": "azurerm_resource_group",
# "name": "orders",
# "instances": [{
# "attributes": {
# "id": "/subscriptions/.../resourceGroups/myorg-orders-dev-rg",
# "location": "westus2"
# }
# }]
# }]
# }
Nunca edites el state a mano
El archivo .tfstate es la fuente de verdad de Terraform, no tuya. Editarlo a mano corrompe el mapeo config↔realidad y puede hacer que Terraform recree u orfane recursos. Cambiá la infraestructura por los .tf y terraform apply; cambiá el state solo con comandos dedicados (terraform state ..., import, moved) que vemos más adelante en este tier.
El state puede tener secretos — mantenelo fuera de git
El state guarda cada atributo de cada recurso, incluidos valores que un provider marcó como sensibles (connection strings, contraseñas generadas). Agregá *.tfstate y *.tfstate.backup a .gitignore. Esta es una razón central por la que los equipos mueven el state a un backend remoto y protegido en vez de dejarlo en disco — las próximas lecciones.
Modelá una entrada de state
Completá el objeto stateEntry para que address sea "azurerm_resource_group.orders", type sea "azurerm_resource_group", name sea "orders", e id cualquier string de id de nube no vacío. Después logueá stateEntry.id.