Le service de transfert de stockage permet de transférer de grandes quantités de données entre les buckets Cloud Storage, au sein d'un même projet Google Cloud ou entre différents projets.
Les migrations de buckets sont utiles dans plusieurs cas de figure. Ils peuvent être utilisés pour regrouper des données de projets distincts, pour déplacer des données vers un emplacement de sauvegarde ou pour modifier l'emplacement de vos données.
Quand utiliser le service de transfert de stockage ?
Google Cloud propose plusieurs options pour transférer des données entre plusieurs buckets Cloud Storage. Nous vous recommandons de respecter les consignes suivantes:
Transfert de moins de 1 To: utilisez
gsutil
ougcloud
. Pour obtenir des instructions, reportez-vous à la section Déplacer et renommer des buckets.Transfert de plus de 1 To: utilisez le service de transfert de stockage. Le service de transfert de stockage est une option de transfert gérée qui offre une sécurité, une fiabilité et des performances prêtes à l'emploi. Il élimine la nécessité d'optimiser et de gérer des scripts, et de gérer les tentatives.
Ce guide traite des bonnes pratiques lors du transfert de données entre des buckets Cloud Storage à l'aide du service de transfert de stockage.
Définir une stratégie de transfert
Votre stratégie de transfert dépend de la complexité de votre situation. Assurez-vous d'inclure les considérations suivantes dans votre plan.
Choisir un nom de bucket
Pour déplacer vos données vers un bucket de stockage avec un autre emplacement, choisissez l'une des approches suivantes:
- Nom du nouveau bucket. Mettez à jour vos applications pour qu'elles pointent vers un bucket de stockage portant un nom différent.
- Conserver le nom du bucket. Remplacez votre bucket de stockage pour conserver le nom actuel. Vous n'avez donc pas besoin de mettre à jour vos applications.
Dans les deux cas, vous devez planifier les temps d'arrêt et en informer vos utilisateurs. Consultez les explications suivantes pour comprendre quelle option vous convient le mieux.
Nom du nouveau bucket
Avec un nouveau nom de bucket, vous devez mettre à jour l'ensemble du code et des services qui utilisent votre bucket actuel. La procédure à suivre dépend de la manière dont vos applications sont créées et déployées.
Pour certaines configurations, cette approche peut réduire les temps d'arrêt, mais nécessite davantage de travail pour assurer une transition en douceur. Cela implique les étapes suivantes:
- Copier vos données dans un nouveau bucket de stockage
- Démarrage du temps de pause...
- Mettre à jour vos applications pour qu'elles pointent vers le nouveau bucket
- Vérifier que tout fonctionne comme prévu, et que tous les systèmes et comptes pertinents ont accès au bucket
- Supprimer le bucket d'origine
- Fin du temps de pause...
Conserver le nom du bucket
Utilisez cette approche si vous préférez ne pas modifier votre code pour qu'il pointe vers un nouveau nom de bucket. Cela implique les étapes suivantes:
- Copier vos données dans un bucket de stockage temporaire
- Démarrage du temps de pause...
- Suppression du bucket d'origine...
- Créez un bucket portant le même nom que votre bucket d'origine.
- Copiez les données du bucket temporaire dans votre nouveau bucket.
- Supprimer le bucket temporaire
- Vérifier que tout fonctionne comme prévu, et que tous les systèmes et comptes pertinents ont accès au bucket
- Fin du temps de pause...
Minimiser les temps d'arrêt
Le service de transfert de stockage ne verrouille pas les lectures ou les écritures sur les buckets sources ou de destination lors d'un transfert.
Si vous choisissez de verrouiller manuellement les lectures/écritures sur votre bucket, vous pouvez réduire les temps d'arrêt en transférant vos données en deux étapes: la source et la synchronisation.
Transfert seed: effectuez un transfert groupé sans verrouiller la lecture/écriture sur la source.
Transfert de synchronisation: une fois la première exécution terminée, verrouillez la lecture/écriture sur le bucket source et effectuez un autre transfert. Les transferts effectués par le service de transfert de stockage sont incrémentiels par défaut. Par conséquent, ce second transfert ne transfère que les données qui ont été modifiées lors du transfert source.
Optimiser la vitesse de transfert
Lorsque vous estimez la durée d'une tâche de transfert, tenez compte des goulots d'étranglement possibles. Par exemple, si la source contient des milliards de petits fichiers, la vitesse de transfert est limitée par RPS. Si les objets sont de grande taille, la bande passante peut constituer le goulot d'étranglement.
Les limites de bande passante sont définies au niveau de la région et sont équitablement allouées à tous les projets. Si une bande passante suffisante est disponible, le service de transfert de stockage peut effectuer environ 1 000 tâches par tâche de transfert et par seconde. Dans ce cas, vous pouvez accélérer un transfert en divisant votre tâche en plusieurs petites tâches de transfert, par exemple en utilisant des préfixes d'inclusion et d'exclusion pour transférer certains fichiers.
Si l'emplacement, la classe de stockage et la clé de chiffrement sont identiques, le service de transfert de stockage ne crée pas de copie des octets, mais une nouvelle entrée de métadonnées qui pointe vers l'objet blob source. Par conséquent, les mêmes copies d'emplacement et de classe d'un corpus volumineux sont réalisées très rapidement et sont uniquement limitées par RPS.
Les suppressions sont également des opérations exclusivement de métadonnées. Pour ces transferts, exécuter le transfert en parallèle en le divisant en plusieurs petites tâches peut augmenter la vitesse.
Conserver les métadonnées
Les métadonnées d'objet suivantes sont conservées lors du transfert de données entre des buckets Cloud Storage avec le service de transfert de stockage:
- Métadonnées personnalisées créées par l'utilisateur.
- Champs de métadonnées à clé fixe Cloud Storage, tels que Cache-Control, Content-Disposition, Content-Type et Custom-Time
- Taille de l'objet
- Le numéro de génération est conservé en tant que champ de métadonnées personnalisé avec la clé
x-goog-reserved-source-generation
, que vous pouvez modifier ou supprimer ultérieurement.
Les champs de métadonnées suivants peuvent éventuellement être conservés lors du transfert à l'aide de l'API:
- LCA (
acl
) - Classe de stockage (
storageClass
) - CMEK (
kmsKey
) - Retenue temporaire (
temporaryHold
) - Date et heure de création de l'objet (
customTime
)
Pour en savoir plus, consultez la documentation de référence de l'API TransferSpec
.
Les champs de métadonnées suivants ne sont pas conservés:
- Heure de la dernière mise à jour (
updated
) etag
componentCount
S'il est conservé, l'heure de création de l'objet est stockée en tant que champ personnalisé, customTime
. La durée de updated
de l'objet est réinitialisée lors du transfert. Par conséquent, le temps passé par l'objet dans sa classe de stockage est également réinitialisé. Cela signifie qu'un objet dans le stockage Coldline, après le transfert, doit exister à nouveau pendant 90 jours à sa destination pour éviter des frais de suppression anticipée.
Vous pouvez appliquer vos règles de cycle de vie basées sur createTime
à l'aide de customTime
. Les valeurs customTime
existantes sont remplacées.
Pour en savoir plus sur ce qui est conservé et ce qui ne l'est pas, consultez la section Conservation des métadonnées.
Gérer les objets avec des versions gérées
Si vous souhaitez transférer toutes les versions de vos objets de stockage et pas seulement la dernière, vous devez utiliser la CLI gcloud
ou l'API REST pour transférer vos données, ainsi que la fonctionnalité de fichier manifeste du service de transfert de stockage.
Pour transférer toutes les versions d'objets:
Répertoriez les objets de bucket et copiez-les dans un fichier JSON:
gcloud storage ls --all-versions --recursive --json [SOURCE_BUCKET] > object-listing.json
Cette commande répertorie généralement environ 1 000 objets par seconde.
Divisez le fichier JSON en deux fichiers CSV, l'un avec les versions obsolètes et l'autre avec les versions actives:
jq -r '.[] | select( .type=="cloud_object" and (.metadata | has("timeDeleted") | not)) | [.metadata.name, .metadata.generation] | @csv' object-listing.json > live-object-manifest.csv jq -r '.[] | select( .type=="cloud_object" and (.metadata | has("timeDeleted"))) | [.metadata.name, .metadata.generation] | @csv' object-listing.json > non-current-object-manifest.csv
Activez la gestion des versions des objets sur le bucket de destination.
Transférez d'abord les versions archivées en transmettant le fichier manifeste
non-current-object-manifest.csv
en tant que valeur du champtransferManifest
.Transférez ensuite les versions actives de la même manière, en spécifiant
live-object-manifest.csv
comme fichier manifeste.
Configurer les options de transfert
Voici quelques-unes des options disponibles lors de la configuration d'un transfert:
Journalisation: Cloud Logging fournit des journaux détaillés sur les objets individuels, ce qui vous permet de vérifier l'état du transfert et d'effectuer des vérifications supplémentaires d'intégrité des données.
Filtrage: vous pouvez utiliser des préfixes d'inclusion et d'exclusion pour limiter les objets sur lesquels le service de transfert de stockage opère. Cette option permet de diviser un transfert en plusieurs tâches de transfert afin qu'elles puissent s'exécuter en parallèle. Pour en savoir plus, consultez la section Optimiser la vitesse de transfert.
Options de transfert : vous pouvez configurer votre transfert de manière à écraser les éléments existants dans le bucket de destination, à supprimer les objets de la destination qui n'existent pas dans l'ensemble de transferts ou à supprimer les objets transférés depuis la source.
Transférer vos données
Après avoir défini votre stratégie de transfert, vous pouvez effectuer le transfert lui-même.
Créer un bucket
Avant de commencer le transfert, créez un bucket de stockage. Pour obtenir de l'aide sur le choix d'un emplacement de bucket approprié, consultez la section location_considerations.
Vous souhaiterez peut-être copier certaines métadonnées du bucket au moment de sa création. Consultez la section Obtenir les métadonnées du bucket pour savoir comment afficher les métadonnées du bucket source et pouvoir appliquer les mêmes paramètres à votre nouveau bucket.
Copier des objets dans le nouveau bucket
Vous pouvez copier des objets du bucket source vers un nouveau bucket à l'aide de la console Google Cloud, de la CLI gcloud
, de l'API REST ou des bibliothèques clientes.
L'approche que vous choisissez dépend de votre stratégie de transfert.
Les instructions suivantes concernent le cas d'utilisation de base du transfert d'objets d'un bucket à un autre. Elles doivent être modifiées en fonction de vos besoins.
N'incluez pas d'informations sensibles telles que des informations permettant d'identifier personnellement l'utilisateur ou des données de sécurité dans le nom de la tâche de transfert. Les noms de ressources peuvent être propagés aux noms d'autres ressources Google Cloud et exposés aux systèmes internes de Google en dehors de votre projet.
console Google Cloud
Utilisez le service de transfert de stockage Cloud depuis Google Cloud Console :
Ouvrez la page "Transfert" dans la console Google Cloud.
- Cliquez sur Créer une tâche de transfert.
Suivez la procédure détaillée en cliquant sur Étape suivante à chaque étape :
Premiers pas: utilisez Google Cloud Storage comme type de source et comme type de destination.
Choisissez une source: saisissez directement le nom du bucket souhaité, ou cliquez sur Parcourir pour rechercher et sélectionner le bucket souhaité.
Sélectionnez une destination : saisissez directement le nom du bucket souhaité, ou cliquez sur Parcourir pour rechercher et sélectionner le bucket de votre choix.
Sélectionnez les paramètres : sélectionnez l'option Supprimer les fichiers de la source après leur transfert.
Options de programmation : vous pouvez ignorer cette section.
Une fois la procédure détaillée suivie, cliquez sur Créer.
Cette validation entraîne la copie des fichiers de votre ancien bucket dans le nouveau. Ce processus peut prendre un certain temps. Notez cependant qu'après avoir cliqué sur Créer, vous pouvez quitter Google Cloud Console.
Pour afficher l'avancement du transfert :
Ouvrez la page "Transfert" dans la console Google Cloud.
Pour savoir comment obtenir des informations détaillées sur les erreurs liées aux opérations du service de transfert de stockage ayant échoué dans la console Google Cloud, consultez la page Dépannage.
Une fois le transfert terminé, vous n'avez rien à faire pour supprimer les objets de votre ancien bucket si vous avez coché la case Supprimer les objets sources une fois le transfert terminé lors de la configuration. Vous pouvez toutefois supprimer votre ancien bucket en procédant séparément.
gcloud CLI
Installer gcloud CLI
Si ce n'est pas déjà fait, installez l'outil de ligne de commande gcloud.
Appelez ensuite gcloud init
pour initialiser l'outil et spécifier votre ID de projet et votre compte utilisateur. Pour en savoir plus, consultez la page Initialiser le SDK Cloud.
gcloud init
Ajouter le compte de service à votre dossier de destination
Vous devez ajouter le compte de service du service de transfert de stockage à votre bucket de destination avant de créer un transfert. Pour ce faire, utilisez gsutil iam ch
:
gsutil iam ch serviceAccount:project-12345678@storage-transfer-service.iam.gserviceaccount.com:roles/storage.admin gs://bucket_name
Pour obtenir des instructions sur l'utilisation de la console Google Cloud ou de l'API, consultez la page Utiliser des autorisations IAM de la documentation Cloud Storage.
Créer la tâche de transfert
Pour créer une tâche de transfert, utilisez la commande gcloud transfer jobs create
.
La création d'une tâche lance le transfert spécifié, sauf si une planification ou un --do-not-run
est spécifié.
gcloud transfer jobs create SOURCE DESTINATION
Où :
SOURCE est la source de données de ce transfert, au format
gs://BUCKET_NAME
.DESTINATION est votre nouveau bucket, au format
gs://BUCKET_NAME
.
Des options supplémentaires vous sont proposées :
Informations sur la tâche: vous pouvez spécifier
--name
et--description
.Programmation: spécifiez
--schedule-starts
,--schedule-repeats-every
,--schedule-repeats-until
ou--do-not-run
.Conditions des objets: utilisez les conditions pour déterminer les objets à transférer. Cela inclut
--include-prefixes
et--exclude-prefixes
, ainsi que les conditions basées sur l'heure dans--include-modified-[before | after]-[absolute | relative]
.Options de transfert: indiquez si vous souhaitez remplacer les fichiers de destination (
--overwrite-when=different
oualways
) et si vous souhaitez supprimer certains fichiers pendant ou après le transfert (--delete-from=destination-if-unique
ousource-after-transfer
), indiquer les valeurs de métadonnées à conserver et éventuellement définir une classe de stockage sur les objets transférés (--custom-storage-class
).Notifications: configurez des notifications Pub/Sub pour les transferts avec
--notification-pubsub-topic
,--notification-event-types
et--notification-payload-format
.
Pour afficher toutes les options, exécutez la commande gcloud transfer jobs create --help
.
Par exemple, pour transférer tous les objets comportant le préfixe folder1
:
gcloud transfer jobs create gs://old-bucket gs://new-bucket \
--include-prefixes="folder1/"
REST
Dans cet exemple, vous allez apprendre à déplacer des fichiers d'un bucket Cloud Storage à un autre. Par exemple, vous pouvez déplacer les données d'un bucket dans un autre emplacement.
Effectuez une requête à l'aide de la méthode transferJobs.create :
POST https://storagetransfer.googleapis.com/v1/transferJobs { "description": "YOUR DESCRIPTION", "status": "ENABLED", "projectId": "PROJECT_ID", "schedule": { "scheduleStartDate": { "day": 1, "month": 1, "year": 2025 }, "startTimeOfDay": { "hours": 1, "minutes": 1 }, "scheduleEndDate": { "day": 1, "month": 1, "year": 2025 } }, "transferSpec": { "gcsDataSource": { "bucketName": "GCS_SOURCE_NAME" }, "gcsDataSink": { "bucketName": "GCS_SINK_NAME" }, "transferOptions": { "deleteObjectsFromSourceAfterTransfer": true } } }
Réponse :
200 OK { "transferJob": [ { "creationTime": "2015-01-01T01:01:00.000000000Z", "description": "YOUR DESCRIPTION", "name": "transferJobs/JOB_ID", "status": "ENABLED", "lastModificationTime": "2015-01-01T01:01:00.000000000Z", "projectId": "PROJECT_ID", "schedule": { "scheduleStartDate": { "day": 1, "month": 1, "year": 2015 }, "startTimeOfDay": { "hours": 1, "minutes": 1 } }, "transferSpec": { "gcsDataSource": { "bucketName": "GCS_SOURCE_NAME", }, "gcsDataSink": { "bucketName": "GCS_NEARLINE_SINK_NAME" }, "objectConditions": { "minTimeElapsedSinceLastModification": "2592000.000s" }, "transferOptions": { "deleteObjectsFromSourceAfterTransfer": true } } } ] }
Bibliothèques clientes
Dans cet exemple, vous allez apprendre à déplacer des fichiers d'un bucket Cloud Storage à un autre. Par exemple, vous pouvez répliquer les données d'un bucket situé dans un autre emplacement.
Pour en savoir plus sur les bibliothèques clientes du service de transfert de stockage, consultez la page Premiers pas avec les bibliothèques clientes du service de transfert de stockage.
Java
Vous recherchez des exemples plus anciens ? Consultez le guide de migration du service de transfert de stockage.
Python
Vous recherchez des exemples plus anciens ? Consultez le guide de migration du service de transfert de stockage.
Valider les objets copiés
Une fois le transfert terminé, nous vous recommandons d'effectuer des vérifications supplémentaires d'intégrité des données.
Vérifiez que les objets ont été copiés correctement, en vérifiant les métadonnées des objets, telles que les sommes de contrôle et la taille.
Vérifiez que la version correcte des objets a été copiée. Le service de transfert de stockage propose une option prête à l'emploi pour vérifier que les objets sont des copies. Si vous avez activé la journalisation, affichez les journaux pour vérifier si tous les objets ont bien été copiés, y compris les champs de métadonnées correspondants.
Commencer à utiliser le bucket de destination
Une fois la migration terminée et vérifiée, mettez à jour les applications ou les charges de travail existantes afin qu'elles utilisent le nom du bucket cible. Vérifiez les journaux d'accès aux données dans Cloud Audit Logs pour vous assurer que vos opérations modifient et lisent correctement les objets.
Supprimer le bucket d'origine
Une fois que tout fonctionne correctement, supprimez le bucket d'origine.
Le service de transfert de stockage offre la possibilité de supprimer les objets après leur transfert, en spécifiant deleteObjectsFromSourceAfterTransfer: true
dans la configuration de la tâche ou en sélectionnant l'option dans la console Google Cloud.
Programmer la suppression de l'objet
Pour planifier la suppression de vos objets à une date ultérieure, combinez une tâche de transfert planifiée et l'option deleteObjectsUniqueInSink = true
.
La tâche de transfert doit être configurée pour transférer un bucket vide dans le bucket contenant vos objets. Le service de transfert de stockage liste alors les objets et commence à les supprimer. Étant donné que les suppressions ne concernent que des métadonnées, la tâche de transfert n'est liée qu'aux RPS. Pour accélérer le processus, divisez le transfert en plusieurs tâches, chacune agissant sur un ensemble distinct de préfixes.
Google Cloud propose également un planificateur de tâches Cron géré. Pour en savoir plus, consultez la page Planifier une tâche de transfert STS Google Cloud avec Cloud Scheduler.