Clonar instancias

En esta página se explica la clonación y cómo clonar una instancia.

Descripción general

En la clonación de una instancia de Cloud SQL, se crea una instancia nueva que es una copia de la de origen. La instancia nueva es completamente independiente de la instancia de origen.

Preguntas frecuentes

Pregunta Respuesta
¿La clonación afecta el rendimiento? No. La clonación no afecta el rendimiento en la instancia de origen.
¿Las copias de seguridad se copian en la instancia nueva? No. La instancia nueva crea copias de seguridad automáticas nuevas. Las copias de seguridad manuales no se copian desde la instancia de origen.
¿La instancia nueva tiene la misma dirección IP? No. La instancia nueva tiene una dirección IP nueva.
¿La instancia nueva tiene la misma configuración? Sí. La instancia nueva tendrá la misma configuración, como las marcas de base de datos, las opciones de conectividad, el tipo de máquina y la configuración de almacenamiento y memoria.
¿Las réplicas se copian en la instancia nueva? No. Debes crear réplicas nuevas para la instancia nueva.
¿Se puede clonar una réplica? No. No puedes clonar una réplica.
¿Se puede hacer una clonación de un momento anterior? Sí. La recuperación de un momento determinado usa la clonación para restablecer una instancia desde un momento anterior. Esto te permite recuperar la base de datos en caso de un evento destructivo.
¿La configuración de mantenimiento de la instancia de origen se copia de forma automática en la instancia de clonación? No. Debes establecer la configuración de mantenimiento para la instancia de clonación.
¿Se puede clonar una instancia cuando la zona de la instancia no está disponible? Sí. Si clonas una instancia zonal, puedes especificar una zona principal diferente para la instancia. Si clonas una instancia de alta disponibilidad (regional), puedes especificar diferentes zonas principales y secundarias para la instancia.
¿Se puede clonar una base de datos en otro proyecto? No. No puedes clonar una base de datos en otro proyecto.
¿Puedes clonar una instancia que antes era una clonación? Sí. Puedes clonar una instancia que se clonó a partir de otra instancia.
¿Los usuarios de la base de datos se copian en la instancia nueva? Sí, los usuarios de la base de datos se copian en la instancia nueva. Las contraseñas de estos usuarios también se copian para que no se tengan que volver a crear.

Clonar una instancia

Para clonar una instancia de Cloud SQL, puedes usar la consola de Google Cloud, gcloud CLI, Terraform o la API.

Console

  1. En la consola de Google Cloud, ve a la página Instancias de Cloud SQL.

    Ir a Instancias de Cloud SQL

  2. Encuentra la fila de la instancia para clonar.
  3. En la columna Acciones, haz clic en el menú Más acciones .
  4. Haz clic en Crear clon.
  5. En la página Crear una clonación, actualiza el ID de la instancia si es necesario, haz clic en Crear clon y deja Clonar el estado actual de la instancia seleccionado.

    Volverás a la página del listado de instancias mientras se inicializa el clon.

gcloud

Para clonar una instancia, usa el comando gcloud sql instances clone:

gcloud sql instances clone SOURCE_INSTANCE_NAME DESTINATION_INSTANCE_NAME \
--project PROJECT_ID \
--preferred-zone ZONE_NAME \
--preferred-secondary-zone SECONDARY_ZONE_NAME

Realiza los siguientes reemplazos:

  • SOURCE_INSTANCE_NAME: el nombre de la instancia de Cloud SQL que se clonará
  • DESTINATION_INSTANCE_NAME: el nombre de la instancia clonada.
  • PROJECT_ID: el ID o el número del proyecto de Google Cloud que contiene las instancias de origen y destino
  • ZONE_NAME: Opcional El nombre de la zona principal de la instancia de destino. Úsalo si deseas que la instancia de destino esté en una zona principal diferente a la de la instancia de Cloud SQL que clonas. En una instancia regional, esta zona reemplaza la zona principal, pero la zona secundaria sigue siendo la misma que la instancia de origen.
  • SECONDARY_ZONE_NAME: Opcional El nombre de la zona secundaria de la instancia de destino. Úsalo para especificar una zona secundaria diferente para la instancia regional de Cloud SQL que deseas clonar.

Si usas los parámetros --preferred-zone y --preferred-secondary-zone, se aplican las siguientes condiciones:

  • Tanto la zona principal como la secundaria deben ser zonas válidas.
  • Ambas zonas deben pertenecer a la misma región que la instancia de origen.
  • Las zonas principal y secundaria deben ser diferentes.
  • En el caso de las instancias zonales, no puedes usar el parámetro --preferred-secondary-zone. Si lo haces, el proceso para clonar la instancia fallará.
  • Si no especificas valores para los parámetros --preferred-zone o --preferred-secondary-zone, la instancia clonada tendrá las mismas zonas principal y secundaria que la instancia de origen.

Para ejecutar el comando gcloud sql instances clone, debes tener el permiso cloudsql.instances.clone. Si quieres obtener más información sobre los permisos necesarios para ejecutar comandos de gcloud CLI, consulta Permisos de Cloud SQL.

Terraform

Para clonar la instancia, usa un recurso de Terraform.

resource "google_sql_database_instance" "clone" {
  name             = "postgres-instance-clone-name"
  region           = "us-central1"
  database_version = "POSTGRES_12"
  clone {
    source_instance_name = google_sql_database_instance.source.id
  }
  # set `deletion_protection` to true, will ensure that one cannot accidentally delete this instance by
  # use of Terraform whereas `deletion_protection_enabled` flag protects this instance at the GCP level.
  deletion_protection = false
}

Aplica los cambios

Para aplicar tu configuración de Terraform en un proyecto de Google Cloud, completa los pasos de las siguientes secciones.

Prepara Cloud Shell

  1. Inicia Cloud Shell
  2. Establece el proyecto de Google Cloud predeterminado en el que deseas aplicar tus configuraciones de Terraform.

    Solo necesitas ejecutar este comando una vez por proyecto y puedes ejecutarlo en cualquier directorio.

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    Las variables de entorno se anulan si configuras valores explícitos en el archivo de configuración de Terraform.

Prepara el directorio

Cada archivo de configuración de Terraform debe tener su propio directorio (también llamado módulo raíz).

  1. En Cloud Shell, crea un directorio y un archivo nuevo dentro de ese directorio. El nombre del archivo debe tener la extensión .tf, por ejemplo, main.tf. En este instructivo, el archivo se denomina main.tf.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. Si sigues un instructivo, puedes copiar el código de muestra en cada sección o paso.

    Copia el código de muestra en el main.tf recién creado.

    De manera opcional, copia el código de GitHub. Esto se recomienda cuando el fragmento de Terraform es parte de una solución de extremo a extremo.

  3. Revisa y modifica los parámetros de muestra que se aplicarán a tu entorno.
  4. Guarda los cambios.
  5. Inicializa Terraform. Solo debes hacerlo una vez por directorio.
    terraform init

    De manera opcional, incluye la opción -upgrade para usar la última versión del proveedor de Google:

    terraform init -upgrade

Aplica los cambios

  1. Revisa la configuración y verifica que los recursos que creará o actualizará Terraform coincidan con tus expectativas:
    terraform plan

    Corrige la configuración según sea necesario.

  2. Para aplicar la configuración de Terraform, ejecuta el siguiente comando y, luego, escribe yes cuando se te solicite:
    terraform apply

    Espera hasta que Terraform muestre el mensaje “¡Aplicación completa!”.

  3. Abre tu proyecto de Google Cloud para ver los resultados. En la consola de Google Cloud, navega a tus recursos en la IU para asegurarte de que Terraform los haya creado o actualizado.

Borra los cambios

Para borrar tus cambios, haz lo siguiente:

  1. Para inhabilitar la protección contra la eliminación, en tu archivo de configuración de Terraform, establece el argumento deletion_protection en false.
    deletion_protection =  "false"
  2. Para aplicar la configuración actualizada de Terraform, ejecuta el siguiente comando y, luego, ingresa yes cuando se te solicite:
    terraform apply
  1. Quita los recursos que se aplicaron antes con tu configuración de Terraform a través de la ejecución del siguiente comando y, luego, ingresa yes cuando se te solicite:

    terraform destroy

REST v1

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • PROJECT_ID: el ID o el número del proyecto de Google Cloud que contiene las instancias de origen y destino
  • SOURCE_INSTANCE_NAME: el nombre de la instancia de Cloud SQL que se clonará
  • DESTINATION_INSTANCE_NAME: el nombre de la instancia clonada.
  • ZONE_NAME: Opcional El nombre de la zona principal de la instancia de destino. Úsalo si deseas que la instancia de destino esté en una zona principal diferente a la de la instancia de Cloud SQL que clonas. En una instancia regional, esta zona reemplaza la zona principal, pero la zona secundaria sigue siendo la misma que la instancia de origen.
  • SECONDARY_ZONE_NAME: Opcional El nombre de la zona secundaria de la instancia de destino. Úsalo para especificar una zona secundaria diferente para la instancia regional de Cloud SQL que deseas clonar.

Método HTTP y URL:

POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/SOURCE_INSTANCE_NAME/clone

Cuerpo JSON de la solicitud:

{
  "cloneContext":
  {
    "destinationInstanceName": "DESTINATION_INSTANCE_NAME",
    "preferredZone": "ZONE_NAME",
    "preferredSecondaryZone": "SECONDARY_ZONE_NAME"
  }
}

Para enviar tu solicitud, expande una de estas opciones:

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

Si usas los parámetros preferredZone y preferredSecondaryZone, se aplican las siguientes condiciones:

  • Tanto la zona principal como la secundaria deben ser zonas válidas.
  • Ambas zonas deben pertenecer a la misma región que la instancia de origen.
  • Las zonas principal y secundaria deben ser diferentes.
  • En el caso de las instancias zonales, no puedes usar el parámetro preferredSecondaryZone. Si lo haces, el proceso para clonar la instancia fallará.
  • Si no especificas valores para los parámetros preferredZone o preferredSecondaryZone, la instancia clonada tendrá las mismas zonas principal y secundaria que la instancia de origen.

Para usar el método de API instances.clone, debes tener el permiso cloudsql.instances.clone. Si deseas obtener más información sobre los permisos necesarios para usar los métodos de API, consulta Permisos de Cloud SQL.

REST v1beta4

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • PROJECT_ID: el ID o el número del proyecto de Google Cloud que contiene las instancias de origen y destino
  • SOURCE_INSTANCE_NAME: el nombre de la instancia de Cloud SQL que se clonará
  • DESTINATION_INSTANCE_NAME: el nombre de la instancia clonada.
  • ZONE_NAME: Opcional El nombre de la zona principal de la instancia de destino. Úsalo si deseas que la instancia de destino esté en una zona principal diferente a la de la instancia de Cloud SQL que clonas. En una instancia regional, esta zona reemplaza la zona principal, pero la zona secundaria sigue siendo la misma que la instancia de origen.
  • SECONDARY_ZONE_NAME: Opcional El nombre de la zona secundaria de la instancia de destino. Úsalo para especificar una zona secundaria diferente para la instancia regional de Cloud SQL que deseas clonar.

Método HTTP y URL:

POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/SOURCE_INSTANCE_NAME/clone

Cuerpo JSON de la solicitud:

{
  "cloneContext":
  {
    "destinationInstanceName": "DESTINATION_INSTANCE_NAME",
    "preferredZone": "ZONE_NAME",
    "preferredSecondaryZone": "SECONDARY_ZONE_NAME"
  }
}

Para enviar tu solicitud, expande una de estas opciones:

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

Si usas los parámetros preferredZone y preferredSecondaryZone, se aplican las siguientes condiciones:

  • Tanto la zona principal como la secundaria deben ser zonas válidas.
  • Ambas zonas deben pertenecer a la misma región que la instancia de origen.
  • Las zonas principal y secundaria deben ser diferentes.
  • En el caso de las instancias zonales, no puedes usar el parámetro preferredSecondaryZone. Si lo haces, el proceso para clonar la instancia fallará.
  • Si no especificas valores para los parámetros preferredZone o preferredSecondaryZone, la instancia clonada tendrá las mismas zonas principal y secundaria que la instancia de origen.

Para usar el método de API instances.clone, debes tener el permiso cloudsql.instances.clone. Si deseas obtener más información sobre los permisos necesarios para usar los métodos de API, consulta Permisos de Cloud SQL.

Clona una instancia que use una dirección IP interna

Si tu instancia de Cloud SQL usa una dirección IP interna, de forma opcional, puedes especificar un rango de IP asignado para la dirección IP nueva del clon. Por ejemplo, google-managed-services-default

gcloud

Clona la instancia y, de forma opcional, especifica el rango de IP asignado que deseas usar:

gcloud sql instances clone SOURCE_INSTANCE_NAME TARGET_INSTANCE_NAME \
--allocated-ip-range-name ALLOCATED_IP_RANGE_NAME

La cuenta de servicio o usuario que ejecuta el comando gcloud sql instances clone debe tener el permiso cloudsql.instances.clone. Si quieres obtener más información sobre los permisos necesarios para ejecutar comandos de gcloud CLI, consulta Permisos de Cloud SQL.

REST v1

Clona la instancia y, de forma opcional, especifica el rango de IP asignado que deseas usar:

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • project-id: el ID del proyecto
  • source-instance-id: el ID de la instancia de origen
  • target-instance-id: el ID de la instancia de destino
  • allocated-ip-range-name: el nombre de un rango de IP asignado

Método HTTP y URL:

POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/source-instance-id/clone

Cuerpo JSON de la solicitud:

{
  "cloneContext":
  {
    "destinationInstanceName": "target-instance-id",
    "allocatedIpRange": "allocated-ip-range-name"
  }
}

Para enviar tu solicitud, expande una de estas opciones:

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

La cuenta de servicio o usuario que usa el método de API instances.clone debe tener el permiso cloudsql.instances.clone. Si deseas obtener más información sobre los permisos necesarios para usar los métodos de API, consulta Permisos de Cloud SQL.

REST v1beta4

Clona la instancia y, de forma opcional, especifica el rango de IP asignado que deseas usar:

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • project-id: el ID del proyecto
  • source-instance-id: el ID de la instancia de origen
  • target-instance-id: el ID de la instancia de destino
  • allocated-ip-range-name: el nombre de un rango de IP asignado

Método HTTP y URL:

POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/source-instance-id/clone

Cuerpo JSON de la solicitud:

{
  "cloneContext":
  {
    "destinationInstanceName": "target-instance-id",
    "allocatedIpRange": "allocated-ip-range-name"
  }
}

Para enviar tu solicitud, expande una de estas opciones:

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

La cuenta de servicio o usuario que usa el método de API instances.clone debe tener el permiso cloudsql.instances.clone. Si deseas obtener más información sobre los permisos necesarios para usar los métodos de API, consulta Permisos de Cloud SQL.

Si no especificas un rango de IP asignado, se aplica el siguiente comportamiento:

  • Si la instancia de origen se creó con un rango especificado, la instancia clonada se crea en el mismo rango.
  • Si la instancia de origen no se creó con un rango especificado, la instancia clonada se crea en un rango aleatorio.

Solucionar problemas

Problema Soluciona problemas
Si la clonación falla, se muestra el error constraints/sql.restrictAuthorizedNetworks. La configuración Authorized Networks bloquea la operación de clonación. Las Authorized Networks están configuradas para direcciones IP públicas en la sección Conectividad de la consola de Google Cloud, y la clonación no está permitida debido a consideraciones de seguridad.

Si puedes, quita todas las entradas de Authorized Networks de la instancia de Cloud SQL. De lo contrario, crea una réplica sin ninguna entrada de Authorized Networks.

Mensaje de error: Failed to create subnetwork. Couldn't find free blocks in allocated IP ranges. Please allocate new ranges for this service provider. Help Token: [help-token-id].

Estás tratando de usar la consola de Google Cloud para clonar una instancia con una dirección IP privada, pero no especificaste el rango de IP asignado que deseas usar y la instancia de origen no se crea en el rango especificado. Como resultado, la instancia clonada se crea en un rango aleatorio.

Usa gcloud a fin de clonar la instancia y proporcionar un valor para el parámetro
--allocated-ip-range-name. Para obtener más información, consulta Clona una instancia con una IP privada.