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
-
Dans Google Cloud Console, accédez à la page Instances Cloud SQL.
- Recherchez la ligne de l'instance à cloner.
- Dans la colonne Actions, cliquez sur le menu Autres actions.
- Cliquez sur Create clone (Créer un clone).
- 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
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.
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.
Appliquer les modifications
Pour appliquer votre configuration Terraform dans un projet Google Cloud, suivez les procédures des sections suivantes.
Préparer Cloud Shell
- Lancez Cloud Shell.
-
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).
-
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 exemplemain.tf
. Dans ce tutoriel, le fichier est appelémain.tf
.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
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.
- Examinez et modifiez les exemples de paramètres à appliquer à votre environnement.
- Enregistrez les modifications.
-
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
-
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.
-
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).
- 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 :
- Pour désactiver la protection contre la suppression, définissez l'argument
deletion_protection
surfalse
dans le fichier de configuration Terraform.deletion_protection = "false"
- Appliquez la configuration Terraform mise à jour en exécutant la commande suivante et en saisissant
yes
lorsque vous y êtes invité :terraform apply
-
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, 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.
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" } }
Pour envoyer votre requête, développez l'une des options suivantes :
Vous devriez recevoir une réponse JSON de ce type :
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, 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.
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" } }
Pour envoyer votre requête, développez l'une des options suivantes :
Vous devriez recevoir une réponse JSON de ce type :
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 |
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 |