Solución de problemas comunes al usar Terraform en Azure

En este artículo se enumeran los problemas comunes y las posibles soluciones al usar Terraform en Azure.

Si se produce un problema específico de Terraform, use uno de los canales de soporte técnico de la comunidad de HashiCorp.

Canales de soporte técnico específicos de HashiCorp Terraform

No se puede enumerar el estado de registro del proveedor

Mensaje de error:

Error: No se puede enumerar el estado de registro del proveedor. Este error puede producirse debido a credenciales no válidas o porque la entidad de servicio no tiene permiso para usar la API de Resource Manager. Error de Azure: resources.ProvidersClient#List: Error al responder a la solicitud: StatusCode=403 -- Error original: autorest/azure: El servicio devolvió un error. Status=403 Code="AuthorizationFailed" Message="El cliente '00000000-0000-0000-0000-000000000000' con el id. de objeto '00000000-0000-0000-0000-000000000000' no tiene autorización para realizar la acción 'Microsoft.Resources/subscriptions/providers/read' en el ámbito '/subscriptions/00000000-0000-0000-0000-000000000000' o bien el ámbito no es válido." Si se te ha concedido acceso recientemente, actualiza tus credenciales.

Fondo: Si ejecuta comandos de Terraform desde el Cloud Shell y define determinadas variables de entorno de Terraform/Azure, es posible que vea conflictos. En la tabla siguiente se enumeran las variables de entorno y los valores de Azure que representan:

Variable del entorno valor de Azure
ARM_SUBSCRIPTION_ID Identificador de suscripción de Azure
ARM_TENANT_ID id. de inquilino de la cuenta de Microsoft
ARM_CLIENT_ID Identificador de aplicación de la entidad de servicio de Azure
ARM_CLIENT_SECRET Contraseña de la entidad de servicio de Azure

Causa: En el momento de redactar este texto, el script de Terraform que se ejecuta en Cloud Shell sobrescribe las variables de entorno ARM_SUBSCRIPTION_ID y ARM_TENANT_ID usando valores de la suscripción actual de Azure. Como resultado, si la entidad de servicio a la que hacen referencia las variables de entorno no tiene derechos para la suscripción de Azure actual, se producirá un error en las operaciones de Terraform.

Error al adquirir el bloqueo de estado

Mensaje de error:

Error al adquirir el bloqueo del estado; Mensaje de error: se produjeron 2 errores:
* el blob de estado ya está bloqueado
* Los metadatos de blob "terraformlockid" están vacíos
Terraform establece un bloqueo del estado para evitar que varios usuarios escriban en el estado al mismo tiempo. Resuelva el problema anterior e inténtelo de nuevo. Para la mayoría de los comandos, puede deshabilitar el bloqueo con la marca "-lock=false", pero no se recomienda.

Fondo: Si está ejecutando comandos de Terraform en un archivo de estado de Terraform y este error es el único mensaje que aparece, es posible que se apliquen las siguientes causas. Este error se aplica a los archivos de estado local y remoto.

Causa: Hay dos posibles causas de este error. La primera causa es que ya se está ejecutando un comando de Terraform sobre el archivo de estado y este ha forzado un bloqueo del archivo, por lo que no se produce ningún error. La segunda causa potencial es que se produjo una interrupción de la conexión entre el archivo de estado y la CLI cuando se estaban ejecutando comandos. Esta interrupción suele producirse cuando se usan archivos de estado remoto.

Resolución: En primer lugar, asegúrese de que aún no está ejecutando ningún comando en el archivo de estado. Si está trabajando con un archivo de estado local, compruebe si tiene terminales que ejecutan comandos. Como alternativa, compruebe las canalizaciones de implementación para ver si algo en ejecución podría usar el archivo de estado. Si esta condición no resuelve el problema, es posible que la segunda causa desencadene el error. Para un archivo de estado remoto almacenado en un contenedor de la cuenta de Azure Storage, puede buscar el archivo y usar el botón Interrumpir concesión.

Captura de pantalla que muestra el botón Interrumpir arrendamiento del contenedor de Azure Storage.

Si utiliza otros sistemas de almacenamiento para guardar el archivo de estado, consulte la documentación de HashiCorp para obtener recomendaciones.

Errores de VPN

Para obtener información sobre cómo resolver errores de VPN, consulte el artículo Solución de problemas de una conexión VPN híbrida.

Terraform planea eliminar y volver a crear una cuenta de almacenamiento

Terraform podría planear eliminar y volver a crear una cuenta de almacenamiento de Azure después de Azure cambiar la cuenta de almacenamiento fuera de Terraform. Este comportamiento puede producirse durante una conversión de redundancia de cuenta de Azure Storage admitida, donde account_replication_type cruza el límite entre el conjunto no zonal (LRS, GRS, RA-GRS) y el conjunto zonal (ZRS, GZRS, RA-GZRS).

Antes de aplicar el plan, revise los cambios propuestos y confirme por qué Terraform considera necesario reemplazar la cuenta de almacenamiento. La recreación de una cuenta de almacenamiento puede provocar un tiempo de inactividad de la aplicación o una pérdida de datos.

Para reducir este riesgo:

  • Deshabilite la aprobación automática de las implementaciones que administran cuentas de almacenamiento y revise cada terraform plan.
  • Configure prevent_destroy = true en el bloque lifecycle del recurso de la cuenta de almacenamiento.
  • Antes de iniciar la conversión, agregue account_replication_type temporalmente a ignore_changes.
  • Después de la conversión, ejecute terraform apply -refresh-only para actualizar el estado de Terraform y, a continuación, actualice la configuración de Terraform para que coincida con la cuenta de almacenamiento implementada.
  • Elimine ignore_changes solo después de ejecutar terraform plan y confirmar que no muestra cambios inesperados.

Para obtener instrucciones detalladas sobre la conversión, consulte Evitar el desfase de Terraform para recursos con estado Azure.