Terraform 9: Tu primer recurso — azurerm_resource_group
easy⏱ 5 mincourseterraform
Anatomía de un bloque resource
Un bloque resource tiene dos etiquetas: el tipo (azurerm_resource_group) y un nombre local (orders) que vos elegís. El nombre local es cómo referenciás este recurso en el resto de la config — nunca aparece en Azure. Dentro, argumentos como name, location y tags describen el recurso deseado.
resource "azurerm_resource_group" "orders" {
name = "myorg-orders-dev-rg"
location = "westus2"
tags = {
environment = "dev"
service = "orders"
managed_by = "terraform"
}
}
Nombrar de forma consistente es una convención, no una función
Terraform no nombra las cosas por vos. Los equipos adoptan un esquema como {org}-{service}-{env}-{type} y lo codifican una vez — normalmente en locals — para que cada nombre sea predecible. Una convención estable hace los recursos buscables en el portal y evita colisiones entre entornos.
locals {
org = "myorg"
service = "orders"
env = "dev"
prefix = "${local.org}-${local.service}-${local.env}"
}
resource "azurerm_resource_group" "orders" {
name = "${local.prefix}-rg"
location = "westus2"
}
Renombrar fuerza un reemplazo
El argumento name de un resource group es inmutable — cambiarlo hace que Terraform planee destruir-y-recrear, no una edición in situ. Definí tu esquema de nombres desde el principio. Cambiar solo el nombre local (la segunda etiqueta) mueve el recurso en el state y también dispara destroy/create salvo que hagas terraform state mv.
Construí un nombre de resource group estandarizado
Escribí rgName(org: string, service: string, env: string) que devuelva "{org}-{service}-{env}-rg", en minúsculas. Logueá rgName("myorg", "orders", "dev") — debe imprimir myorg-orders-dev-rg.