Cómo promover una réplica de Cloud SQL a primaria utilizando Terraform, de modo que la instancia promovida esté bajo el control de Terraform.
Estoy creando una instancia de GCP Cloud SQL utilizando Terraform con una réplica de Cloud SQL entre regiones. Estoy probando el escenario de recuperación ante desastres (disaster recovery, DR) porque, en caso de que se produzca un DR, promuevo la réplica de lectura a la instancia principal mediante la API de gcloud (no hay ajustes/recursos disponibles en Terraform para promocionar una réplica). Como estoy utilizando el comando gcloud, la instancia promovida y el archivo de estado no están sincronizados y, por lo tanto, la instancia promovida no está bajo el control de Terraform después.
davy.ai
Solución
Para asegurarnos de que la instancia promovida está bajo el control de Terraform, podemos utilizar la fuente de datos
external
en Terraform para consultar el estado de la instancia GCP Cloud SQL después de la promoción, utilizando la APIgcloud
.La fuente de datos
external
permite a Terraform consultar un programa externo y usar la salida como atributo de recursos. En nuestro caso, podemos usar la interfaz de línea de comandos (CLI) degcloud
para consultar el estado de la instancia promovida y producir la salida en un formato que Terraform pueda entender.Una vez que tengamos el estado de la instancia promovida en Terraform, podemos utilizar el recurso
null_resource
junto con el proveedorlocal-exec
para actualizar el archivo de estado con los detalles de la nueva instancia. Esto garantizará que la nueva instancia esté ahora bajo el control de Terraform.Aquí hay un ejemplo de cómo se vería el código de Terraform:
El recurso
data.external.promoted_instance_status
consulta el scriptcheck_instance_status.sh
, que utilizaría el comandogcloud
para producir la salida del estado de la instancia promovida en un formato como el siguiente:El recurso
null_resource.update_state_file
utiliza la salidapromoted_instance_status
como un disparador para actualizar el archivo de estado con los detalles de la nueva instancia. El proveedor ejecuta un comando que ingresa la salidapromoted_instance_status
en un archivopromoted_instance.json
en el directorio del proyecto Terraform.Al utilizar la fuente de datos
external
y el recursonull_resource
junto con el proveedorlocal-exec
, podemos asegurarnos de que la instancia promovida permanezca bajo el control de Terraform incluso después de un escenario de recuperación ante desastres.