Clonar instancias

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

Información general

Al clonar una instancia de Cloud SQL, se crea una nueva instancia que es una copia de la instancia de origen. La nueva instancia es completamente independiente de la instancia de origen.

Preguntas frecuentes

Pregunta Respuesta
¿La clonación afecta al rendimiento? No. La clonación no afecta al rendimiento de la instancia de origen.
¿Las copias de seguridad se copian en la nueva instancia? No. La nueva instancia crea nuevas copias de seguridad automáticas. Las copias de seguridad manuales no se copian de la instancia de origen.
¿La nueva instancia tiene la misma dirección o direcciones IP? No. La nueva instancia tiene una o varias direcciones IP nuevas.
¿La nueva instancia tiene la misma configuración? Sí. La nueva instancia tiene los mismos ajustes, como las marcas de la base de datos, las opciones de conectividad, el tipo de máquina y los ajustes de almacenamiento y memoria.
¿Se copian las réplicas en la nueva instancia? No. Debes crear réplicas para la nueva instancia.
¿Puedes clonar una réplica? No. No puedes clonar una réplica.
¿Puedo crear un clon a partir de un momento anterior? Sí. La recuperación a un momento dado usa la clonación para restaurar una instancia a partir de un momento anterior. De esta forma, puedes recuperar tu base de datos tras un evento destructivo.
¿Los ajustes de mantenimiento de la instancia de origen se copian automáticamente en la instancia clonada? No. Debes configurar los ajustes de mantenimiento de la instancia clonada.
¿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 zonas principales y secundarias diferentes para la instancia.
¿Se puede clonar una base de datos en otro proyecto? No. No puedes clonar una base de datos en otro proyecto.
¿Se puede clonar una instancia que ya era una clonación? Sí. Puedes clonar una instancia que se haya clonado de otra instancia.
¿Los usuarios de la base de datos se copian en la nueva instancia? Sí, los usuarios de la base de datos se copian en la nueva instancia. Las contraseñas de estos usuarios también se copian para que no tengan que volver a crearlas.

Clonar una instancia

Puedes clonar una instancia de Cloud SQL mediante la Google Cloud consola, la CLI de gcloud, Terraform o la API.

Consola

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

    Ir a Instancias de Cloud SQL

  2. Busca la fila de la instancia que quieras clonar.
  3. En la columna Acciones, haga clic en el menú Más acciones.
  4. Haz clic en Crear clon.
  5. En la página Crear un clon, actualice el ID de instancia si es necesario y haga clic en Crear clon. Deje seleccionada la opción Clonar el estado actual de la instancia.

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

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

Haz las siguientes sustituciones:

  • SOURCE_INSTANCE_NAME: el nombre de la instancia de Cloud SQL que se va a clonar.
  • DESTINATION_INSTANCE_NAME: el nombre de la instancia clonada.
  • PROJECT_ID: el ID o el número de proyecto del Google Cloud proyecto que contiene las instancias de origen y de destino.
  • ZONE_NAME: opcional. Nombre de la zona principal de la instancia de destino. Utiliza esta opción si quieres que la instancia de destino esté en una zona principal diferente a la de la instancia de Cloud SQL que vas a clonar. En el caso de una instancia regional, esta zona sustituye a la zona principal, pero la zona secundaria sigue siendo la misma que la de la instancia de origen.
  • SECONDARY_ZONE_NAME: opcional. Nombre de la zona secundaria de la instancia de destino. Úsalo para especificar otra zona secundaria para la instancia regional de Cloud SQL que quieras clonar.

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

  • Tanto la zona primaria como la secundaria deben ser 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 especifica 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. Para 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 la configuración de Terraform en un proyecto, sigue los pasos que se indican en las siguientes secciones. Google Cloud

Preparar Cloud Shell

  1. Abre Cloud Shell.
  2. Define el Google Cloud proyecto Google Cloud predeterminado en el que quieras aplicar tus configuraciones de Terraform.

    Solo tiene que ejecutar este comando una vez por proyecto y puede hacerlo en cualquier directorio.

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

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

Preparar 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 en ese directorio. El nombre del archivo debe tener la extensión .tf. Por ejemplo, main.tf. En este tutorial, nos referiremos al archivo como main.tf.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. Si estás siguiendo un tutorial, puedes copiar el código de ejemplo de cada sección o paso.

    Copia el código de ejemplo en el archivo main.tf que acabas de crear.

    También puedes copiar el código de GitHub. Se recomienda cuando el fragmento de Terraform forma parte de una solución integral.

  3. Revisa y modifica los parámetros de ejemplo para aplicarlos a tu entorno.
  4. Guarda los cambios.
  5. Inicializa Terraform. Solo tienes que hacerlo una vez por directorio.
    terraform init

    Si quieres usar la versión más reciente del proveedor de Google, incluye la opción -upgrade:

    terraform init -upgrade

Aplica los cambios

  1. Revisa la configuración y comprueba que los recursos que va a crear o actualizar Terraform se ajustan a tus expectativas:
    terraform plan

    Haga las correcciones necesarias en la configuración.

  2. Aplica la configuración de Terraform ejecutando el siguiente comando e introduciendo yes en la petición:
    terraform apply

    Espera hasta que Terraform muestre el mensaje "Apply complete!".

  3. Abre tu Google Cloud proyecto para ver los resultados. En la Google Cloud consola, ve a tus recursos en la interfaz de usuario para asegurarte de que Terraform los ha creado o actualizado.

Eliminar los cambios

Para eliminar los cambios, sigue estos pasos:

  1. Para inhabilitar la protección contra la eliminación, en el archivo de configuración de Terraform, asigna el valor false al argumento deletion_protection.
    deletion_protection =  "false"
  2. Aplica la configuración de Terraform actualizada ejecutando el siguiente comando e introduciendo yes en la petición:
    terraform apply
  1. Para quitar los recursos que se hayan aplicado anteriormente con tu configuración de Terraform, ejecuta el siguiente comando e introduce yes en la petición:

    terraform destroy

REST v1

Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

  • PROJECT_ID: el ID o el número de proyecto del Google Cloud proyecto que contiene las instancias de origen y de destino.
  • SOURCE_INSTANCE_NAME: el nombre de la instancia de Cloud SQL que se va a clonar.
  • DESTINATION_INSTANCE_NAME: el nombre de la instancia clonada.
  • ZONE_NAME: opcional. Nombre de la zona principal de la instancia de destino. Utiliza esta opción si quieres que la instancia de destino esté en una zona principal diferente a la de la instancia de Cloud SQL que vas a clonar. En el caso de una instancia regional, esta zona sustituye a la zona principal, pero la zona secundaria sigue siendo la misma que la de la instancia de origen.
  • SECONDARY_ZONE_NAME: opcional. Nombre de la zona secundaria de la instancia de destino. Úsalo para especificar otra zona secundaria para la instancia regional de Cloud SQL que quieras 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, despliega una de estas opciones:

Deberías recibir una respuesta JSON similar a la siguiente:

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

  • Tanto la zona primaria como la secundaria deben ser 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 especifica 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 la API instances.clone, debe tener el permiso cloudsql.instances.clone. Para obtener más información sobre los permisos necesarios para usar los métodos de la API, consulta Permisos de Cloud SQL.

REST v1beta4

Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

  • PROJECT_ID: el ID o el número de proyecto del Google Cloud proyecto que contiene las instancias de origen y de destino.
  • SOURCE_INSTANCE_NAME: el nombre de la instancia de Cloud SQL que se va a clonar.
  • DESTINATION_INSTANCE_NAME: el nombre de la instancia clonada.
  • ZONE_NAME: opcional. Nombre de la zona principal de la instancia de destino. Utiliza esta opción si quieres que la instancia de destino esté en una zona principal diferente a la de la instancia de Cloud SQL que vas a clonar. En el caso de una instancia regional, esta zona sustituye a la zona principal, pero la zona secundaria sigue siendo la misma que la de la instancia de origen.
  • SECONDARY_ZONE_NAME: opcional. Nombre de la zona secundaria de la instancia de destino. Úsalo para especificar otra zona secundaria para la instancia regional de Cloud SQL que quieras 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, despliega una de estas opciones:

Deberías recibir una respuesta JSON similar a la siguiente:

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

  • Tanto la zona primaria como la secundaria deben ser 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 especifica 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 la API instances.clone, debe tener el permiso cloudsql.instances.clone. Para obtener más información sobre los permisos necesarios para usar los métodos de la API, consulta Permisos de Cloud SQL.

Clonar una instancia que usa una dirección IP interna

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

gcloud

Clona la instancia y, opcionalmente, especifica el intervalo de direcciones IP asignado que quieras usar:

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

El usuario o la cuenta de servicio que ejecute el comando gcloud sql instances clone debe tener el permiso cloudsql.instances.clone. Para 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, opcionalmente, especifica el intervalo de direcciones IP asignado que quieras usar:

Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

  • project-id: el ID del proyecto
  • source-instance-id: el ID de instancia de la fuente
  • target-instance-id: el ID de instancia de destino
  • allocated-ip-range-name: el nombre de un intervalo de IPs 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, despliega una de estas opciones:

Deberías recibir una respuesta JSON similar a la siguiente:

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

REST v1beta4

Clona la instancia y, opcionalmente, especifica el intervalo de direcciones IP asignado que quieras usar:

Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

  • project-id: el ID del proyecto
  • source-instance-id: el ID de instancia de la fuente
  • target-instance-id: el ID de instancia de destino
  • allocated-ip-range-name: el nombre de un intervalo de IPs 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, despliega una de estas opciones:

Deberías recibir una respuesta JSON similar a la siguiente:

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

Si no especifica un intervalo de direcciones IP asignado, se aplicará el siguiente comportamiento:

  • Si la instancia de origen se ha creado con un intervalo especificado, la instancia clonada se creará en el mismo intervalo.
  • Si la instancia de origen no se ha creado con un intervalo especificado, la instancia clonada se creará en un intervalo aleatorio.

Solucionar problemas

Problema Solución de problemas
La clonación falla y se produce el error constraints/sql.restrictAuthorizedNetworks. La operación de clonación está bloqueada por la configuración Authorized Networks. Authorized Networks se configuran para direcciones IP públicas en la sección Conectividad de la consola Google Cloud y no se permite la clonación por motivos de seguridad.

Elimina todas las entradas Authorized Networks de la instancia de Cloud SQL, si es posible. De lo contrario, crea una réplica sin ninguna entrada 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 intentando usar la consola Google Cloud para clonar una instancia con una dirección IP privada, pero no has especificado el intervalo de IP asignado que quieres usar y la instancia de origen no se ha creado con el intervalo especificado. Por lo tanto, la instancia clonada se crea en un intervalo aleatorio.

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