Terraform 8: Configurando el proveedor azurerm (features {})
easy⏱ 5 mincourseterraform
El bloque provider
Un bloque provider configura cómo Terraform se comunica con una plataforma: suscripción, tenant, credenciales y opciones de comportamiento. El proveedor azurerm requiere un bloque features {} — incluso vacío — o init/plan falla. Dejalo vacío para aceptar los valores por defecto, o definí bloques anidados para cambiar cómo se comportan ciertos recursos.
provider "azurerm" {
features {}
}
Ajustando el comportamiento dentro de features {}
features {} agrupa toggles de comportamiento por tipo de recurso. Uno común es resource_group.prevent_deletion_if_contains_resources — una red de seguridad para que destroy se niegue a borrar un resource group no vacío. Definí tu suscripción con subscription_id (o mejor, la variable de entorno ARM_SUBSCRIPTION_ID para que ningún ID quede en el código).
provider "azurerm" {
# subscription_id is read from ARM_SUBSCRIPTION_ID when omitted here
features {
resource_group {
prevent_deletion_if_contains_resources = true
}
key_vault {
purge_soft_delete_on_destroy = false
}
}
}
Nunca hardcodees secretos ni tenant IDs
Autenticá con variables de entorno (ARM_CLIENT_ID, ARM_CLIENT_SECRET, ARM_TENANT_ID, ARM_SUBSCRIPTION_ID) o una identidad administrada — no con literales en archivos .tf que se commitean. Mantené el bloque provider enfocado en el comportamiento (features {}) y dejá que el entorno provea la identidad.
Validá una config de proveedor
Modelá providerConfig con un booleano hasFeaturesBlock y un booleano preventRgDeletion. Escribí isValidAzurermConfig(cfg) que devuelva true solo cuando hasFeaturesBlock sea true (el requisito duro de azurerm). Logueá el resultado para una config que tiene el bloque features.