Terraform 30: 3: Convención de nombres y tags (env-service-type)
easy⏱ 5 mincourseterraform
Nombrá por env-service-type
Un nombre predecible te dice de un vistazo qué es un recurso y dónde vive. El patrón {env}-{service}-{type} produce nombres como dev-orders-rg, prod-billing-kv, uat-widgets-sa. Construí los nombres en un solo lugar (un local o un módulo) para que todo recurso sea consistente.
# variables.tf
variable "environment" { type = string } # dev | uat | prod
variable "service" { type = string } # orders | billing | widgets
# main.tf — build the name prefix once
locals {
name_prefix = "${var.environment}-${var.service}"
}
resource "azurerm_resource_group" "this" {
name = "${local.name_prefix}-rg" # dev-orders-rg
location = var.location
}
Un mapa de tags compartido
Definí los tags comunes una vez en un local y esparcilos en cada recurso con tags = local.common_tags. Los tags alimentan reportes de costos, propiedad y limpieza automatizada. Incluí siempre al menos environment, service y managed_by = "terraform".
locals {
common_tags = {
environment = var.environment
service = var.service
managed_by = "terraform"
cost_center = var.cost_center
}
}
resource "azurerm_storage_account" "this" {
name = "${var.environment}${var.service}sa" # no dashes allowed
resource_group_name = azurerm_resource_group.this.name
location = var.location
account_tier = "Standard"
account_replication_type = "LRS"
tags = local.common_tags
}
Cuidá las reglas de nombre por recurso
Algunos recursos rechazan guiones o tienen límites de longitud estrictos — los nombres de storage account son alfanuméricos en minúscula, 3-24 caracteres, sin guiones. Mantené tu esquema genérico pero quitá separadores donde el provider lo exija, ej. devorderssa en vez de dev-orders-sa.
Construí un nombre estandarizado
Escribí resourceName(env, service, type) que devuelva "{env}-{service}-{type}". Logueá resourceName("prod", "billing", "kv") — debe imprimir prod-billing-kv.