Déplacer des buckets

Cette page décrit la procédure de relocalisation de buckets d'un emplacement à un autre. Pour en savoir plus sur la relocalisation de buckets, consultez la section Relocalisation de buckets.

Avant de commencer

Avant de lancer le processus de réinstallation du bucket, procédez comme suit:

  1. Activez le hub de gestion.

  2. Activez la suppression réversible.

  3. Vérifiez les quotas et les limites pour vous assurer que le nouvel emplacement dispose de quotas suffisants pour accueillir les données du bucket.

  4. Déterminez le type de relocalisation de bucket pour savoir si un temps d'arrêt pour les écritures est nécessaire.

  5. Supprimez toutes les balises de bucket existantes.

  6. Si vous utilisez des rapports d'inventaire, enregistrez vos configurations.

Rôles requis

Pour obtenir les autorisations nécessaires pour déplacer des buckets d'un emplacement à un autre, demandez à votre administrateur de vous accorder le rôle d'administrateur de l'espace de stockage (roles/storage.admin) pour le projet.

Ce rôle fournit un ensemble d'autorisations qui vous permettent de déplacer des buckets d'un emplacement à un autre. Pour afficher les autorisations exactes requises, développez la section Autorisations requises :

Autorisations requises

Pour utiliser cette méthode, l'utilisateur authentifié doit disposer des autorisations IAM suivantes sur le bucket:

  • storage.buckets.relocate
  • storage.bucketOperations.get
    Vous avez besoin de cette autorisation pour afficher l'état de l'opération de relocalisation du bucket.
  • storage.bucketOperations.list
    Vous avez besoin de cette autorisation pour afficher la liste des opérations de relocalisation de bucket.
  • storage.bucketOperations.cancel
    Vous avez besoin de cette autorisation pour annuler l'opération de relocalisation du bucket.

L'utilisateur authentifié peut également avoir besoin des autorisations suivantes sur le bucket pour utiliser cette méthode:

  • storage.bucket.get
    Vous avez besoin de cette autorisation pour afficher les métadonnées d'un bucket lors du test et de la copie incrémentielle des données de l'opération de relocalisation du bucket.
  • storage.objects.list et storage.objects.get
     : vous avez besoin de ces autorisations pour afficher la liste des objets d'un bucket que vous souhaitez déplacer vers un autre emplacement.

Vous pouvez également obtenir ces autorisations avec des rôles personnalisés ou d'autres rôles prédéfinis. Pour connaître les rôles et les autorisations associées, consultez la page Rôles IAM pour Cloud Storage.

Pour savoir comment attribuer des rôles aux projets, consultez la page Gérer l'accès aux projets.

Déplacer des buckets

Cette section décrit le processus de relocalisation de buckets Cloud Storage d'un emplacement à un autre à l'aide de la relocalisation de bucket. Lorsque vous déplacez un bucket, vous lancez le processus de copie des données incrémentielle, le surveillez, puis lancez l'étape de synchronisation finale. Pour en savoir plus sur ces étapes, consultez la section Comprendre le processus de réinstallation des buckets.

Effectuer une simulation

Pour minimiser les problèmes potentiels lors du processus de réinstallation des buckets, nous vous recommandons d'effectuer un test. Un dry run simule le processus de réinstallation des buckets sans déplacer les données, ce qui vous permet de détecter et de résoudre les problèmes dès le début. Le dry run recherche les incompatibilités suivantes:

Bien qu'un exercice préalable ne puisse pas identifier tous les problèmes possibles, car certains ne peuvent apparaître que lors de la migration en direct en raison de facteurs tels que la disponibilité des ressources en temps réel, il réduit le risque de rencontrer des problèmes chronophages lors du transfert réel.

Ligne de commande

Simulez le dry run de la relocalisation des buckets:

gcloud storage buckets relocate gs://BUCKET_NAME --location=LOCATION --dry-run

Où :

  • BUCKET_NAME correspond au nom du bucket que vous souhaitez déplacer.

  • LOCATION est l'emplacement de destination du bucket.

Lancer un essai sans frais lance une opération de longue durée. Vous recevrez un ID d'opération et une description de l'opération. Pour suivre la progression de l'exercice, vous devez suivre son avancement. Pour savoir comment suivre la progression de la simulation, consultez Obtenir les détails d'une opération de longue durée.

Si le test à blanc révèle des problèmes, corrigez-les avant de passer à l'étape Lancer la copie incrémentielle des données.

API REST

API JSON

  1. Vous devez installer et initialiser gcloud CLI, ce qui vous permet de générer un jeton d'accès pour l'en-tête Authorization.

  2. Créez un fichier JSON contenant les paramètres du bucket, qui doit inclure les paramètres destinationLocation et validateOnly. Consultez la documentation sur Buckets: relocate pour obtenir la liste complète des paramètres. Les paramètres les plus courants sont les suivants :

    {
      "destinationLocation": "DESTINATION_LOCATION",
      "destinationCustomPlacementConfig": {
          "dataLocations": [
            LOCATIONS,
            ...
            ]
        },
      "validateOnly": "true"
    }

    Où :

    • DESTINATION_LOCATION est l'emplacement de destination du bucket.
    • LOCATIONS est une liste de codes d'emplacement à utiliser pour l'emplacement birégional configurable.
    • validateOnly est défini sur true pour effectuer une simulation.
  3. Utilisez cURL pour appeler l'API JSON :

    curl -X POST --data-binary @JSON_FILE_NAME \
     -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     -H "Content-Type: application/json" \
     "https://storage.googleapis.com/storage/v1/b/bucket=BUCKET_NAME/relocate"

    Où :

    • JSON_FILE_NAME correspond au nom du fichier JSON que vous avez créé.
    • BUCKET_NAME correspond au nom du bucket que vous souhaitez déplacer.

Lancer la copie incrémentielle des données

Ligne de commande

Lancez l'opération de relocalisation de bucket:

gcloud storage buckets relocate gs://BUCKET_NAME --location=LOCATION

Où :

  • BUCKET_NAME correspond au nom du bucket que vous souhaitez déplacer.

  • LOCATION est l'emplacement de destination du bucket.

API REST

API JSON

  1. Vous devez installer et initialiser gcloud CLI, ce qui vous permet de générer un jeton d'accès pour l'en-tête Authorization.

  2. Créez un fichier JSON contenant les paramètres du bucket. Consultez la documentation sur Buckets: relocate pour obtenir la liste complète des paramètres. Les paramètres les plus courants sont les suivants :

    {
      "destinationLocation": "DESTINATION_LOCATION",
      "destinationCustomPlacementConfig": {
          "dataLocations": [
            LOCATIONS,
            ...
            ]
        },
      "validateOnly": "false"
    }

    Où :

    • DESTINATION_LOCATION est l'emplacement de destination du bucket.
    • LOCATIONS est une liste de codes d'emplacement à utiliser pour l'emplacement birégional configurable.
    • validateOnly est défini sur false pour lancer l'étape de copie incrémentielle des données de la relocalisation du bucket.
  3. Utilisez cURL pour appeler l'API JSON :

    curl -X POST --data-binary @JSON_FILE_NAME \
     -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     -H "Content-Type: application/json" \
     "https://storage.googleapis.com/storage/v1/b/bucket=BUCKET_NAME/relocate"

    Où :

    • JSON_FILE_NAME correspond au nom du fichier JSON que vous avez créé.
    • BUCKET_NAME correspond au nom du bucket que vous souhaitez déplacer.

Surveiller la copie incrémentielle des données

Le processus de relocalisation de bucket est une opération de longue durée qui doit être surveillée pour voir comment elle progresse. Vous pouvez consulter régulièrement la liste des opérations de longue durée pour connaître l'état de l'étape de copie des données incrémentielle. Pour savoir comment obtenir des informations sur une opération de longue durée, en lister ou en annuler, consultez la section Utiliser des opérations de longue durée dans Cloud Storage.

L'exemple suivant montre le résultat généré par une opération de copie de données incrémentielle:

done: false
kind: storage#operation
metadata:
'@type': type.googleapis.com/google.storage.control.v2.RelocateBucketMetadata
commonMetadata:
  createTime: '2024-10-21T04:26:59.666Z
  endTime: '2024-12-29T23:39:53.340Z'
  progressPercent: 99
  requestedCancellation: false
  type: relocate-bucket
  updateTime: '2024-10-21T04:27:03.2892'
destinationLocation: US-CENTRAL1
finalizationState: 'READY'
progress:
  byteProgressPercent: 100
  discoveredBytes: 200
  remainingBytes: 0
  discoveredObjectCount: 10
  remainingObjectCount: 8
  objectProgressPercent: 100
  discoveredSyncCount: 8
  remainingSyncCount: 0
  syncProgressPercent: 100
relocationState: SYNCING
sourceLocation: US
validateOnly: false
writeDowntimeExpireTime: '2024-12-30T10:34:01.786Z'
name: projects//buckets/my-bucket1/operations/Bar7-1b0khdew@nhenUQRTF_R-Kk4dQ5V1f8fzezkFcPh3XMvlTqJ6xhnqJ1h_QXFIeAirrEqkjgu4zPKSRD6WSSG5UGXil6w
response:
  '@type': type.googleapis.com/google.storage.control.v2.RelocateBucketResponse
  selfLink: https://storage.googleusercontent.com/storage/v1_ds/b/my-bucket1/operations/Bar7-1b0khdew@nhenUQRTF_R-Kk4dQ5V1f8fzezkFcPh3XMvlTqJ6xhnqJ1h_QXFIeAirrEqkjgu4zPKSRD6WSSG5UGXil6w

Le tableau suivant fournit des informations sur les principaux champs de la sortie générée par l'opération de copie de données incrémentielle:

Nom du champ Description Valeurs possibles
done Indique la fin de l'opération de relocalisation du bucket. true, false
kind Indique que cette ressource représente une opération de stockage.
metadata Fournit des informations sur l'opération.
metadata.@type Indique que le type d'opération est un déplacement de bucket.
metadata.commonMetadata Métadonnées communes à toutes les opérations.
metadata.commonMetadata.createTime Heure à laquelle l'opération de longue durée a été créée.
metadata.commonMetadata.endTime Heure de fin de l'opération de longue durée.
metadata.commonMetadata.progressPercent Progression estimée de l'opération de longue durée, en pourcentage. Entre 0 et 100%. Une valeur de -1 signifie que la progression est inconnue ou non applicable.
metadata.commonMetadata.requestedCancellation Indique si l'utilisateur a demandé l'annulation de l'opération de longue durée. true, false
metadata.commonMetadata.type Indique le type de l'opération de longue durée.
metadata.commonMetadata.updateTime Heure de la dernière mise à jour de l'opération de longue durée.
metadata.destinationLocation Emplacement de destination du bucket.
metadata.finalizationState Indique si l'étape de synchronisation finale peut être lancée.
  • READY: indique que vous pouvez lancer l'étape de synchronisation finale. Toutefois, nous vous recommandons d'attendre que la valeur du champ progressPercent atteigne 99.
  • WAITING_ON_SYNC: indique que vous ne pouvez pas lancer l'étape de synchronisation finale.
  • NOT_REQUIRED: indique que l'étape de synchronisation finale n'est pas nécessaire pour ce bucket et que vous pouvez l'ignorer.
  • BLOCKED_ON_ERRORS: indique que l'étape de finalisation est temporairement suspendue en raison d'erreurs. Vous devrez corriger les erreurs pour passer à l'étape suivante.
  • RUNNING: indique que l'étape de finalisation est en cours.
  • FINALIZED: indique que l'étape de finalisation s'est terminée avec succès.
metadata.progress Détails de la progression de l'opération de transfert.
metadata.progress.byteProgressPercent Progression des octets copiés en pourcentage. Entre 0 et 100%. Une valeur de -1 signifie que la progression est inconnue ou non applicable.
metadata.progress.discoveredBytes Nombre d'octets détectés dans le bucket source.
metadata.progress.discoveredObjectCount Nombre d'objets détectés dans le bucket source.
metadata.progress.discoveredSyncCount Nombre de mises à jour des métadonnées d'objet détectées dans le bucket source.
metadata.progress.objectProgressPercent Pourcentage d'objets copiés. Entre 0 et 100%. Une valeur de -1 signifie que la progression est inconnue ou non applicable.
metadata.progress.remainingBytes Nombre d'octets restants à copier du bucket source vers le bucket de destination.
metadata.progress.remainingObjectCount Nombre d'objets restants à copier du bucket source vers le bucket de destination.
metadata.progress.remainingSyncCount Nombre de mises à jour des métadonnées d'objet restantes à synchroniser.
metadata.progress.syncProgressPercent Pourcentage de progression des mises à jour des métadonnées d'objet à synchroniser. Entre 0 et 100%. Une valeur de -1 signifie que la progression est inconnue ou non applicable.
metadata.relocationState État global de la relocalisation de buckets
  • SYNCING: indique que l'étape de copie de données incrémentielle copie activement des objets du bucket source vers le bucket de destination.
  • FINALIZING: indique que l'étape de finalisation a été lancée.
  • FAILED: indique qu'une erreur s'est produite lors de l'étape de copie des données incrémentielle et qu'elle n'a pas abouti.
  • SUCCEEDED: indique que l'étape de copie des données incrémentielle s'est terminée avec succès.
  • CANCELLED: indique que l'étape de copie des données incrémentielles a été annulée.
metadata.sourceLocation Emplacement source du bucket.
metadata.validateOnly Indique si une simulation de la relocalisation du bucket a été lancée. true, false
metadata.writeDowntimeExpireTime Heure à laquelle le temps d'arrêt des écritures expire.
name Identifiant unique de cette opération de transfert.
Format: projects/_/buckets/bucket-name/operations/operation-id
response Réponse de l'opération.
response.@type Type de réponse.
selfLink Lien vers cette opération.

Vous pouvez rencontrer des problèmes en raison des limites lorsque vous interagissez avec d'autres fonctionnalités de Cloud Storage. Pour en savoir plus sur les limites, consultez la section Limites.

Lancer l'étape de synchronisation finale

L'étape de synchronisation finale implique une période pendant laquelle vous ne pouvez pas effectuer d'opérations d'écriture sur le bucket. Nous vous recommandons de planifier l'étape de synchronisation finale à un moment qui minimise les perturbations pour vos applications.

Avant de continuer, vérifiez que le bucket est entièrement préparé en vérifiant la valeur finalizationState dans la sortie de l'étape Surveiller le processus de copie des données incrémentielles. La valeur finalizationState doit être READY pour passer à l'étape de synchronisation finale.

Si vous lancez prématurément l'étape de synchronisation finale, la commande renvoie un message d'erreur The relocate bucket operation is not ready to advance to finalization running state, mais le processus de relocalisation se poursuit.

Nous vous recommandons d'attendre que la valeur progressPercent soit 99 avant de lancer l'étape de synchronisation finale.

Ligne de commande

Lancez l'étape de synchronisation finale de l'opération de réaffectation de bucket une fois que la valeur finalizationState est READY:

gcloud storage buckets relocate --finalize --operation=projects/_/buckets/BUCKET_NAME/operations/OPERATION_ID

Où :

  • BUCKET_NAME correspond au nom du bucket que vous souhaitez déplacer.
  • OPERATION_ID est l'ID de l'opération de longue durée, qui est renvoyé dans la réponse des méthodes que vous appelez. Par exemple, la réponse suivante est renvoyée lors de l'appel de gcloud storage operations list, et l'ID de l'opération de longue durée est AbCJYd8jKT1n-Ciw1LCNXIcubwvij_TdqO-ZFjuF2YntK0r74.
 `name: projects/_/buckets/my-bucket/operations/AbCJYd8jKT1n-Ciw1LCNXIcubwvij_TdqO-ZFjuF2YntK0r74` 

Définissez l'indicateur ttl pour mieux contrôler le processus de réinstallation. Exemple :

gcloud storage buckets relocate --finalize --ttl TTL_DURATION --operation=projects/_/buckets/BUCKET_NAME/operations/OPERATION_ID

Où :

TTL_DURATION est la valeur TTL (Time To Live) de la phase de temps d'arrêt d'écriture lors d'un processus de réinstallation. Il est exprimé sous la forme d'une chaîne, par exemple 12h pour 12 heures. TTL_DURATION détermine la durée maximale autorisée pour la phase d'arrêt en écriture. Si le temps d'arrêt des écritures dépasse cette limite, le processus de relocalisation revient automatiquement à l'étape de copie incrémentielle, et les opérations d'écriture dans le bucket sont réactivées. La valeur doit être comprise entre 6h (6 heures) et 48h (48 heures). Si aucune valeur n'est spécifiée, la valeur par défaut est 12h (12 heures).

API REST

API JSON

  1. Vous devez installer et initialiser gcloud CLI, ce qui vous permet de générer un jeton d'accès pour l'en-tête Authorization.

  2. Créez un fichier JSON contenant les paramètres de relocalisation des buckets. Consultez la documentation sur Buckets: advanceRelocateBucket pour obtenir la liste complète des paramètres. Les paramètres les plus courants sont les suivants :

    {
        "expireTime": "EXPIRE_TIME",
        "ttl": "TTL_DURATION"
    }

    Où :

    • EXPIRE_TIME correspond à l'heure d'expiration du temps d'arrêt d'écriture.
    • TTL_DURATION est la valeur TTL (Time To Live) de la phase de temps d'arrêt d'écriture lors d'un processus de réinstallation. Il est exprimé sous la forme d'une chaîne, par exemple 12h pour 12 heures. TTL_DURATION détermine la durée maximale autorisée pour la phase d'arrêt en écriture. Si le temps d'arrêt des écritures dépasse cette limite, le processus de relocalisation revient automatiquement à l'étape de copie incrémentielle, et les opérations d'écriture dans le bucket sont réactivées. La valeur doit être comprise entre 6h (6 heures) et 48h (48 heures). Si aucune valeur n'est spécifiée, la valeur par défaut est 12h (12 heures).
  3. Utilisez cURL pour appeler l'API JSON :

    curl -X POST --data-binary @JSON_FILE_NAME \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://storage.googleapis.com/storage/v1/b/bucket/BUCKET_NAME/operations/OPERATION_ID/advanceRelocateBucket"

    Où :

    • JSON_FILE_NAME correspond au nom du fichier JSON que vous avez créé.
    • BUCKET_NAME correspond au nom du bucket que vous souhaitez déplacer.
    • OPERATION_ID est l'ID de l'opération de longue durée, qui est renvoyé dans la réponse des méthodes que vous appelez. Par exemple, la réponse suivante est renvoyée lors de l'appel de Operations: list, et l'ID de l'opération de longue durée est AbCJYd8jKT1n-Ciw1LCNXIcubwvij_TdqO-ZFjuF2YntK0r74.

Valider le processus de réinstallation des buckets

Une fois la migration lancée, vérifiez qu'elle a bien été effectuée. Cette section fournit des conseils pour confirmer le transfert réussi des données.

Validez la réussite du processus de migration à l'aide des méthodes suivantes:

  • Interroger les opérations de longue durée: la relocalisation de bucket est une opération de longue durée. Vous pouvez interroger l'opération de longue durée à l'aide de operation id pour surveiller sa progression et confirmer sa réussite en vérifiant l'état success. Pour ce faire, vous devez interroger régulièrement l'état de l'opération jusqu'à ce qu'elle atteigne un état final. Pour en savoir plus sur la surveillance des opérations de longue durée, consultez Utiliser des opérations de longue durée dans Cloud Storage.

  • Analyser les entrées de Cloud Audit Logs: Cloud Audit Logs fournit un enregistrement détaillé des événements et des opérations dans votre Google Cloud environnement. Vous pouvez analyser les entrées des journaux d'audit Cloud associées à la migration pour vérifier qu'elle a bien réussi. Analysez les journaux pour détecter toute erreur, avertissement ou comportement inattendu pouvant indiquer des problèmes lors du transfert. Pour en savoir plus sur l'affichage des journaux Cloud Audit Logging, consultez la section Afficher les journaux d'audit.

    Les entrées de journal suivantes vous aident à déterminer si votre transfert a réussi ou échoué:

    • Déplacement réussi: Relocate bucket succeeded. All existing objects are now in the new placement configuration.

    • Échec de la relocalisation: Relocate bucket has failed. Bucket location remains unchanged.

    À l'aide des notifications Pub/Sub, vous pouvez également configurer des alertes qui vous avertissent lorsque l'événement de réussite ou d'échec spécifique apparaît dans les journaux. Pour en savoir plus sur la configuration des notifications Pub/Sub, consultez Configurer les notifications Pub/Sub pour Cloud Storage.

Effectuer les tâches post-relocalisation des buckets

Une fois que vous avez correctement déplacé votre bucket, procédez comme suit:

  1. Facultatif: Restaurez les contrôles d'accès basés sur des tags sur votre bucket.
  2. Les configurations existantes des rapports d'inventaire ne sont pas conservées lors du processus de migration. Vous devrez les recréer manuellement. Pour savoir comment créer une configuration de rapport d'inventaire, consultez Créer une configuration de rapport d'inventaire.
  3. Mettez à jour vos configurations Infrastructure as Code, telles que Terraform et le connecteur de configuration Google Kubernetes Engine, pour spécifier le nouvel emplacement du bucket.
  4. Les points de terminaison régionaux sont associés à des emplacements spécifiques. Vous devrez modifier le code de votre application pour refléter le nouveau point de terminaison.

Gérer les échecs des opérations de relocalisation de buckets

Tenez compte des facteurs suivants avant de gérer les opérations de réinstallation de buckets ayant échoué:

  • Un échec de la relocalisation d'un bucket peut laisser des ressources obsolètes, telles que des fichiers temporaires ou des copies de données incomplètes, à la destination. Vous devez attendre sept à 14 jours avant de lancer une autre relocalisation de bucket vers la même destination. Vous pouvez immédiatement lancer le déplacement d'un bucket vers une autre destination.

  • Si l'emplacement de destination n'est pas optimal pour vos données, vous pouvez annuler la relocalisation. Toutefois, vous ne pouvez pas lancer immédiatement une relocalisation. Vous devez patienter jusqu'à 14 jours avant de pouvoir relancer le processus de transfert. Cette restriction est mise en place pour assurer la stabilité et éviter les conflits de données.

Étape suivante