es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  , , ,

Answer

  1. Avatar for 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 API gcloud.

    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) de gcloud 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 proveedor local-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:

    data "external" "promoted_instance_status" {
      program = ["bash", "${path.module}/check_instance_status.sh"]
    }
    
    resource "null_resource" "update_state_file" {
      triggers = {
        promoted_instance_status = "${data.external.promoted_instance_status.result}"
      }
    
      provisioner "local-exec" {
        command = "echo '${jsonencode(data.external.promoted_instance_status.result)}' >> promoted_instance.json"
      }
    }
    

    El recurso data.external.promoted_instance_status consulta el script check_instance_status.sh, que utilizaría el comando gcloud para producir la salida del estado de la instancia promovida en un formato como el siguiente:

    {
      "name": "my-promoted-instance",
      "region": "us-west1",
      "zone": "us-west1-b",
      "status": "RUNNABLE",
      ...
    }
    

    El recurso null_resource.update_state_file utiliza la salida promoted_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 salida promoted_instance_status en un archivo promoted_instance.json en el directorio del proyecto Terraform.

    Al utilizar la fuente de datos external y el recurso null_resource junto con el proveedor local-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.

Comments are closed.