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.
Est-il possible de cloner une instance lorsque la zone de l'instance n'est pas disponible ? Oui. Si vous clonez une instance zonale, vous pouvez spĂ©cifier une zone principale diffĂ©rente pour l'instance. Si vous clonez une instance haute disponibilitĂ© (rĂ©gionale), vous pouvez spĂ©cifier des zones principale et secondaire diffĂ©rentes pour l'instance.
Est-il possible de cloner une base de donnĂ©es dans un autre projet ? Non. Il n'est pas possible de cloner de base de donnĂ©es dans un autre projet.
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, les utilisateurs de la base de donnĂ©es sont copiĂ©s sur la nouvelle instance. Les mots de passe de ces utilisateurs sont Ă©galement copiĂ©s, et ils n'ont pas besoin d'ĂȘ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             = "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
}

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 la console Google Cloud , 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.