Cloner des instances

Cette page explique le clonage et décrit comment cloner une instance.

Présentation

Le clonage d'une instance Cloud SQL crée une instance qui est une copie de l'instance source. La nouvelle instance est complètement indépendante de l'instance source.

Questions fréquentes

Question Réponse
Le clonage a-t-il un impact sur les performances ? Non, le clonage n'a aucun impact sur les performances de l'instance source.
Les sauvegardes sont-elles copiées dans la nouvelle instance ? Non. La nouvelle instance crée des sauvegardes automatiques. Les sauvegardes manuelles ne sont pas copiées à partir de l'instance source.
La nouvelle instance possède-t-elle la même ou les mêmes adresses IP ? Non. La nouvelle instance possède une ou plusieurs nouvelles adresses IP.
La nouvelle instance possède-t-elle les mêmes paramètres de configuration ? Oui. La nouvelle instance conserve les mêmes paramètres, tels que les options de base de données, les options de connectivité, le type de machine, ainsi que les paramètres de stockage et de mémoire.
Les instances dupliquées sont-elles copiées dans la nouvelle instance ? Non. Vous devez créer des instances dupliquées pour la nouvelle instance.
Est-il possible de cloner une instance dupliquée ? Non. Il n'est pas possible de cloner une instance dupliquée.
Est-il possible de créer un clone à un moment antérieur ? Oui. La récupération à un moment précis utilise le clonage pour restaurer une instance à un moment antérieur. Cela vous permet de récupérer la base de données après un événement destructeur.
Les paramètres de maintenance de l'instance source sont-ils automatiquement copiés sur l'instance de clone ? Non. Vous devez configurer les paramètres de maintenance de l'instance de clone.
Pouvez-vous cloner une instance qui était autrefois un clone ? Oui. En revanche, vous pouvez cloner une instance clonée à partir d'une autre instance.
Les utilisateurs de la base de données sont-ils copiés sur la nouvelle instance ? Oui, mais les mots de passe utilisateur de la base de données ne sont pas copiés et doivent être recréés.

Cloner une instance

Vous pouvez cloner une instance Cloud SQL à l'aide de la console Google Cloud, de gcloud CLI, de Terraform ou de l'API.

Console

  1. Dans la console Google Cloud, accédez à la page Instances Cloud SQL.

    Accéder à la page Instances Cloud SQL

  2. Recherchez la ligne de l'instance à cloner.
  3. Dans la colonne Actions, cliquez sur le menu Autres actions.
  4. Cliquez sur Create clone (Créer un clone).
  5. Sur la page Créer un clone mettez à jour l'ID d'instance si nécessaire, puis cliquez sur Créer un clone, en laissant l'option Cloner l'état actuel de l'instance sélectionnée.

    Pendant la phase d'initialisation du clone, vous êtes redirigé vers la liste des instances.

gcloud

Pour cloner une instance, utilisez la commande 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

Effectuez les remplacements suivants :

  • SOURCE_INSTANCE_NAME : nom de l'instance Cloud SQL à cloner.
  • DESTINATION_INSTANCE_NAME : nom de l'instance clonée.
  • PROJECT_ID : ID ou numéro de projet du projet Google Cloud contenant les instances source et de destination.
  • ZONE_NAME : facultatif. Nom de la zone principale de l'instance de destination. Utilisez cette option si vous souhaitez que l'instance de destination se trouve dans une zone principale différente de celle de l'instance Cloud SQL que vous clonez. Pour une instance régionale, cette zone remplace la zone principale, mais la zone secondaire reste identique à celle de l'instance source.
  • SECONDARY_ZONE_NAME : facultatif. Nom de la zone secondaire de l'instance de destination. Cette option permet de spécifier une zone secondaire différente pour l'instance Cloud SQL régionale que vous souhaitez cloner.

Si vous utilisez les paramètres --preferred-zone et --preferred-secondary-zone, les conditions suivantes s'appliquent :

  • Les zones principale et secondaire doivent être valides.
  • Les deux zones doivent appartenir à la même région que l'instance source.
  • Les zones principale et secondaire doivent être différentes.
  • Pour les instances zonales, vous ne pouvez pas utiliser le paramètre --preferred-secondary-zone. Dans ce cas, le processus de clonage de l'instance échoue.
  • Si vous ne spécifiez pas de valeurs pour les paramètres --preferred-zone ou --preferred-secondary-zone, l'instance clonée présente les mêmes zones principale et secondaire que l'instance source.

Pour exécuter la commande gcloud sql instances clone, vous devez disposer de l'autorisation cloudsql.instances.clone. Pour en savoir plus sur les autorisations requises pour exécuter des commandes gcloud CLI, consultez la page Autorisations Cloud SQL.

Terraform

Pour cloner l'instance, utilisez une ressource Terraform.

resource "google_sql_database_instance" "clone" {
  name             = "sqlserver-instance-clone-name"
  region           = "us-central1"
  database_version = "SQLSERVER_2017_STANDARD"
  root_password    = "INSERT-PASSWORD-HERE"
  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
}

Appliquer les modifications

Pour appliquer votre configuration Terraform dans un projet Google Cloud, suivez les procédures des sections suivantes.

Préparer Cloud Shell

  1. Lancez Cloud Shell.
  2. Définissez le projet Google Cloud par défaut dans lequel vous souhaitez appliquer vos configurations Terraform.

    Vous n'avez besoin d'exécuter cette commande qu'une seule fois par projet et vous pouvez l'exécuter dans n'importe quel répertoire.

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    Les variables d'environnement sont remplacées si vous définissez des valeurs explicites dans le fichier de configuration Terraform.

Préparer le répertoire

Chaque fichier de configuration Terraform doit avoir son propre répertoire (également appelé module racine).

  1. Dans Cloud Shell, créez un répertoire et un nouveau fichier dans ce répertoire. Le nom du fichier doit comporter l'extension .tf, par exemple main.tf. Dans ce tutoriel, le fichier est appelé main.tf.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. Si vous suivez un tutoriel, vous pouvez copier l'exemple de code dans chaque section ou étape.

    Copiez l'exemple de code dans le fichier main.tf que vous venez de créer.

    Vous pouvez également copier le code depuis GitHub. Cela est recommandé lorsque l'extrait Terraform fait partie d'une solution de bout en bout.

  3. Examinez et modifiez les exemples de paramètres à appliquer à votre environnement.
  4. Enregistrez les modifications.
  5. Initialisez Terraform. Cette opération n'est à effectuer qu'une seule fois par répertoire.
    terraform init

    Vous pouvez également utiliser la dernière version du fournisseur Google en incluant l'option -upgrade :

    terraform init -upgrade

Appliquer les modifications

  1. Examinez la configuration et vérifiez que les ressources que Terraform va créer ou mettre à jour correspondent à vos attentes :
    terraform plan

    Corrigez les modifications de la configuration si nécessaire.

  2. Appliquez la configuration Terraform en exécutant la commande suivante et en saisissant yes lorsque vous y êtes invité :
    terraform apply

    Attendez que Terraform affiche le message "Apply completed!" (Application terminée).

  3. Ouvrez votre projet Google Cloud pour afficher les résultats. Dans la console Google Cloud, accédez à vos ressources dans l'interface utilisateur pour vous assurer que Terraform les a créées ou mises à jour.

Supprimer les modifications

Pour supprimer vos modifications, procédez comme suit :

  1. Pour désactiver la protection contre la suppression, définissez l'argument deletion_protection sur false dans le fichier de configuration Terraform.
    deletion_protection =  "false"
  2. Appliquez la configuration Terraform mise à jour en exécutant la commande suivante et en saisissant yes lorsque vous y êtes invité :
    terraform apply
  1. Supprimez les ressources précédemment appliquées à votre configuration Terraform en exécutant la commande suivante et en saisissant yes à la requête :

    terraform destroy

REST v1

Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :

  • PROJECT_ID : ID ou numéro de projet du projet Google Cloud contenant les instances source et de destination.
  • SOURCE_INSTANCE_NAME : nom de l'instance Cloud SQL à cloner.
  • DESTINATION_INSTANCE_NAME : nom de l'instance clonée.
  • ZONE_NAME : facultatif. Nom de la zone principale de l'instance de destination. Utilisez cette option si vous souhaitez que l'instance de destination se trouve dans une zone principale différente de celle de l'instance Cloud SQL que vous clonez. Pour une instance régionale, cette zone remplace la zone principale, mais la zone secondaire reste identique à celle de l'instance source.
  • SECONDARY_ZONE_NAME : facultatif. Nom de la zone secondaire de l'instance de destination. Cette option permet de spécifier une zone secondaire différente pour l'instance Cloud SQL régionale que vous souhaitez cloner.

Méthode HTTP et URL :

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

Corps JSON de la requête :

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

Pour envoyer votre requête, développez l'une des options suivantes :

Vous devriez recevoir une réponse JSON de ce type :

Si vous utilisez les paramètres preferredZone et preferredSecondaryZone, les conditions suivantes s'appliquent :

  • Les zones principale et secondaire doivent être valides.
  • Les deux zones doivent appartenir à la même région que l'instance source.
  • Les zones principale et secondaire doivent être différentes.
  • Pour les instances zonales, vous ne pouvez pas utiliser le paramètre preferredSecondaryZone. Dans ce cas, le processus de clonage de l'instance échoue.
  • Si vous ne spécifiez pas de valeurs pour les paramètres preferredZone ou preferredSecondaryZone, l'instance clonée présente les mêmes zones principale et secondaire que l'instance source.

Pour utiliser la méthode API instances.clone, vous devez disposer de l'autorisation cloudsql.instances.clone. Pour en savoir plus sur les autorisations requises pour utiliser des méthodes d'API, consultez la page Autorisations Cloud SQL.

REST v1beta4

Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :

  • PROJECT_ID : ID ou numéro de projet du projet Google Cloud contenant les instances source et de destination.
  • SOURCE_INSTANCE_NAME : nom de l'instance Cloud SQL à cloner.
  • DESTINATION_INSTANCE_NAME : nom de l'instance clonée.
  • ZONE_NAME : facultatif. Nom de la zone principale de l'instance de destination. Utilisez cette option si vous souhaitez que l'instance de destination se trouve dans une zone principale différente de celle de l'instance Cloud SQL que vous clonez. Pour une instance régionale, cette zone remplace la zone principale, mais la zone secondaire reste identique à celle de l'instance source.
  • SECONDARY_ZONE_NAME : facultatif. Nom de la zone secondaire de l'instance de destination. Cette option permet de spécifier une zone secondaire différente pour l'instance Cloud SQL régionale que vous souhaitez cloner.

Méthode HTTP et URL :

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

Corps JSON de la requête :

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

Pour envoyer votre requête, développez l'une des options suivantes :

Vous devriez recevoir une réponse JSON de ce type :

Si vous utilisez les paramètres preferredZone et preferredSecondaryZone, les conditions suivantes s'appliquent :

  • Les zones principale et secondaire doivent être valides.
  • Les deux zones doivent appartenir à la même région que l'instance source.
  • Les zones principale et secondaire doivent être différentes.
  • Pour les instances zonales, vous ne pouvez pas utiliser le paramètre preferredSecondaryZone. Dans ce cas, le processus de clonage de l'instance échoue.
  • Si vous ne spécifiez pas de valeurs pour les paramètres preferredZone ou preferredSecondaryZone, l'instance clonée présente les mêmes zones principale et secondaire que l'instance source.

Pour utiliser la méthode API instances.clone, vous devez disposer de l'autorisation cloudsql.instances.clone. Pour en savoir plus sur les autorisations requises pour utiliser des méthodes d'API, consultez la page Autorisations Cloud SQL.

Cloner une instance qui utilise une adresse IP interne

Si votre instance Cloud SQL utilise une adresse IP interne, vous pouvez spécifier une plage d'adresses IP allouée pour la nouvelle adresse IP du clone. Par exemple, google-managed-services-default.

gcloud

Clonez l'instance, en spécifiant éventuellement la plage d'adresses IP allouée que vous souhaitez utiliser :

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

L'utilisateur ou le compte de service qui exécute la commande gcloud sql instances clone doit disposer de l'autorisation cloudsql.instances.clone. Pour en savoir plus sur les autorisations requises pour exécuter des commandes gcloud CLI, consultez la page Autorisations Cloud SQL.

REST v1

Clonez l'instance, en spécifiant éventuellement la plage d'adresses IP allouée que vous souhaitez utiliser :

Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :

  • project-id : ID du projet
  • source-instance-id : ID de l'instance source
  • target-instance-id : ID de l'instance cible
  • allocated-ip-range-name : nom d'une plage d'adresses IP allouée

Méthode HTTP et URL :

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

Corps JSON de la requête :

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

Pour envoyer votre requête, développez l'une des options suivantes :

Vous devriez recevoir une réponse JSON de ce type :

L'utilisateur ou le compte de service qui utilise la méthode API instances.clone doit disposer de l'autorisation cloudsql.instances.clone. Pour en savoir plus sur les autorisations requises pour utiliser des méthodes d'API, consultez la page Autorisations Cloud SQL.

REST v1beta4

Clonez l'instance, en spécifiant éventuellement la plage d'adresses IP allouée que vous souhaitez utiliser :

Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :

  • project-id : ID du projet
  • source-instance-id : ID de l'instance source
  • target-instance-id : ID de l'instance cible
  • allocated-ip-range-name : nom d'une plage d'adresses IP allouée

Méthode HTTP et URL :

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

Corps JSON de la requête :

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

Pour envoyer votre requête, développez l'une des options suivantes :

Vous devriez recevoir une réponse JSON de ce type :

L'utilisateur ou le compte de service qui utilise la méthode API instances.clone doit disposer de l'autorisation cloudsql.instances.clone. Pour en savoir plus sur les autorisations requises pour utiliser des méthodes d'API, consultez la page Autorisations Cloud SQL.

Si vous ne spécifiez pas de plage d'adresses IP allouée, le comportement suivant s'applique :

  • Si l'instance source a été créée avec une plage spécifiée, l'instance clonée est créée dans la même plage.
  • Si l'instance source n'a pas été créée avec une plage spécifiée, l'instance clonée est créée dans une plage aléatoire.

Résoudre les problèmes

Problème Dépannage
Échec du clonage : erreur constraints/sql.restrictAuthorizedNetworks. L'opération de clonage est bloquée par la configuration Authorized Networks. Les Authorized Networks sont configurés pour les adresses IP publiques dans la section "Connectivité" de Google Cloud Console, et le clonage n'est pas autorisé pour des raisons de sécurité.

Si possible, supprimez toutes les entrées Authorized Networks de l'instance Cloud SQL. Sinon, créez une instance dupliquée sans aucune entrée Authorized Networks.

Message d'erreur : 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].

Vous essayez d'utiliser la console Google Cloud pour cloner une instance avec une adresse IP privée, mais vous n'avez pas spécifié la plage d'adresses IP allouée que vous souhaitez utiliser et l'instance source n'est pas créée avec la plage spécifiée. Par conséquent, l'instance clonée est créée dans une plage aléatoire.

Utilisez gcloud pour cloner l'instance et indiquez une valeur pour le paramètre
--allocated-ip-range-name. Pour en savoir plus, consultez la section Cloner une instance avec une adresse IP privée.