Cette page présente la réplication entre buckets et explique comment utiliser cette fonctionnalité.
Présentation de la réplication entre buckets
Dans certains cas, vous pouvez copier des données d'un bucket Cloud Storage vers un autre. La réplication entre buckets copie de manière asynchrone les objets nouveaux et mis à jour d'un bucket source vers un bucket de destination.
La réplication entre buckets diffère de la réplication par défaut et de la réplication turbo, car vos données existent dans deux buckets, chacun avec sa propre configuration (emplacement de stockage, chiffrement, accès et classe de stockage, par exemple). Par conséquent, il offre la récupération et la disponibilité des données, mais il convient également pour :
- Souveraineté des données : conservez les données dans des régions géographiquement éloignées.
- Gérer des versions de développement et de production distinctes : créez des buckets et des espaces de noms distincts pour que le développement n'affecte pas votre charge de travail de production.
- Partager des données : répliquer des données dans un bucket appartenant à un fournisseur ou à un partenaire.
- Agrégation de données : combinez les données de différents buckets dans un seul bucket pour exécuter des charges de travail d'analyse.
- Gérer les coûts, la sécurité et la conformité : conservez vos données sous différentes propriétés, classes de stockage et périodes de conservation.
La réplication entre buckets utilise le service de transfert de stockage pour répliquer les objets et Pub/Sub pour recevoir des alertes sur les modifications apportées aux buckets source et de destination. Vous pouvez activer la réplication entre buckets sur les nouveaux buckets que vous créez et sur les buckets existants. La plupart des objets peuvent être répliqués en quelques minutes, tandis que les objets de plus d'un Gio peuvent prendre plusieurs heures.
Limites
La réplication entre buckets n'est pas compatible avec les buckets avec espace de noms hiérarchique.
Les suppressions d'objets dans le bucket source ne sont pas répliquées dans le bucket de destination.
Les configurations du cycle de vie des objets ne sont pas répliquées.
Lorsque des objets sont répliqués, les métadonnées d'horodatage (par exemple,
timeCreatedettimeUpdated) ne sont pas conservées. Pour en savoir plus sur la conservation des métadonnées, consultez la section Transferts entre des buckets Cloud Storage.Étant donné que la réplication entre buckets peut être utilisée pour répliquer des données entre des buckets situés dans n'importe quel emplacement Google Cloud , les performances de la réplication entre buckets varient en fonction des emplacements sélectionnés. Par conséquent, la réplication multibucket n'offre pas d'objectif de point de récupération (RPO).
Les objets qui se trouvent déjà dans le bucket lorsqu'un job de réplication est créé ne sont pas répliqués automatiquement. Seuls les objets nouveaux et modifiés sont répliqués. Pour répliquer des objets existants, créez un job de transfert unique du service de transfert de stockage depuis votre bucket existant vers le nouveau bucket. Pour obtenir des instructions, consultez Créer des transferts.
Avant de commencer
Avant de commencer, suivez les étapes ci-dessous.
Activer l'API Storage Transfer Service
Si vous ne l'avez pas déjà fait, activez l'API Storage Transfer Service.
Obtenir les rôles requis
Pour obtenir les autorisations nécessaires pour utiliser la réplication entre buckets, demandez à votre administrateur de vous attribuer le rôle IAM Utilisateur du transfert de stockage (roles/storagetransfer.user) sur le bucket ou le projet source.
Ce rôle prédéfini contient les autorisations requises pour utiliser la réplication entre buckets. Pour connaître les autorisations exactes requises, développez la section Autorisations requises :
Autorisations requises
Les autorisations suivantes sont requises pour utiliser la réplication entre buckets :
-
storagetransfer.jobs.create -
storagetransfer.jobs.delete -
storagetransfer.jobs.get -
storagetransfer.jobs.list -
storagetransfer.jobs.run -
storagetransfer.jobs.update
Pour savoir comment attribuer des rôles aux buckets, consultez la section Utiliser IAM avec des buckets. Pour savoir comment attribuer des rôles aux projets, consultez la page Gérer l'accès aux projets.
Attribuer les rôles requis
La réplication entre buckets utilise le service de transfert de stockage pour répliquer les objets de votre bucket source vers votre bucket de destination, et Pub/Sub pour recevoir des notifications de modification de votre bucket source.
Pour que la réplication entre buckets puisse utiliser ces services, vous devez accorder les autorisations requises au compte de service utilisé par le service de transfert de stockage pour répliquer les données, ainsi qu'à l'agent de service utilisé par Pub/Sub pour écrire des notifications.
Attribuer les rôles requis pour le service de transfert de stockage
Les autorisations requises pour répliquer des données à l'aide du service de transfert de stockage peuvent être accordées à l'un des deux comptes de service. L'une des options ci-dessous :
- L'agent de service Storage Transfer Service, qui est créé et géré automatiquement par Google. L'adresse e-mail de cet agent de service respecte le format de dénomination
project-PROJECT_NUMBER@storage-transfer-service.iam.gserviceaccount.com. Vous pouvez obtenir l'adresse e-mail de l'agent de service du service de transfert de stockage à l'aide de l'API Storage Transfer ServicegoogleServiceAccounts.get.
ou
Un compte de service géré par l'utilisateur. L'adresse e-mail de ce compte de service respecte le format de dénomination
SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com. Vous pouvez créer votre propre compte de service et accorder les autorisations nécessaires pour répliquer les données.Pour savoir comment utiliser un compte de service géré par l'utilisateur avec le service de transfert de stockage, consultez Déléguer les autorisations de l'agent de service à un compte de service géré par l'utilisateur. Des autorisations supplémentaires sont requises en plus de celles figurant dans les listes suivantes. En particulier, vous devez accorder à l'agent de service l'accès au compte de service géré par l'utilisateur en lui attribuant le rôle Créateur de jetons du compte de service (
roles/iam.serviceAccountTokenCreator). Consultez Accorder l'accès à l'agent de service.
L'agent de service du service de transfert de stockage ou le compte de service utilisateur a besoin des autorisations suivantes pour répliquer vos objets et configurer les notifications Pub/Sub pour votre bucket source :
Autorisations requises
Les autorisations suivantes doivent être accordées sur le projet source :
pubsub.topics.createpubsub.subscriptions.createpubsub.subscriptions.consume
Les autorisations suivantes doivent être accordées sur le bucket source :
storage.buckets.getstorage.buckets.updatestorage.objects.get
Les autorisations suivantes doivent être accordées sur le bucket de destination :
storage.buckets.getstorage.objects.createstorage.objects.get
Ces autorisations peuvent être accordées par le biais de rôles personnalisés ou en accordant tous les rôles prédéfinis suivants :
- Rôle Éditeur Pub/Sub (
roles/pubsub.editor) sur le projet source - Rôles Propriétaire des anciens ensembles de l'espace de stockage (
roles/storage.legacyBucketOwner) et Lecteur des objets Storage (roles/storage.objectViewer) sur le bucket source - Rôles "Rédacteur des anciens buckets de l'espace de stockage" (
roles/storage.legacyBucketWriter) et "Lecteur des objets Storage" (roles/storage.objectViewer) sur le bucket de destination
Attribuer les rôles requis pour Pub/Sub
Cloud Storage utilise un agent de service géré par Google pour gérer les notifications Pub/Sub. L'adresse e-mail de cet agent de service respecte le format de dénomination service-PROJECT_NUMBER@gs-project-accounts.iam.gserviceaccount.com.
L'agent de service Cloud Storage a besoin des autorisations suivantes pour configurer Pub/Sub et publier des messages dans un sujet :
Autorisations requises
pubsub.topics.publishsur le sujet Pub/Subpubsub.subscriptions.consumesur le sujet Pub/Subpubsub.subscriptions.createsur le projet source
Ces autorisations peuvent être accordées via des rôles personnalisés ou en accordant le rôle prédéfini suivant :
- Diffuseur Pub/Sub (
roles/pubsub.publisher) sur le projet source
Créer un job de réplication
Console
Pour obtenir des instructions sur la création d'une tâche de réplication à l'aide de la console Google Cloud , consultez Créer une tâche de réplication à l'aide de la console Google Cloud .
Ligne de commande
Lorsque vous utilisez Google Cloud CLI, vous pouvez créer une tâche de réplication pour les buckets existants.
Pour créer une tâche de réplication, utilisez la commande gcloud alpha transfer jobs create avec l'option --replication :
gcloud alpha transfer jobs create gs://SOURCE_BUCKET_NAME gs://DESTINATION_BUCKET_NAME --replication
Remplacez :
SOURCE_BUCKET_NAMEavec le nom du bucket source que vous souhaitez répliquer. Exemple :my-source-bucketDESTINATION_BUCKET_NAMEpar le nom du bucket de destination. Exemple :my-destination-bucket
API REST
API JSON
Lorsque vous utilisez l'API JSON, vous pouvez créer une tâche de réplication pour les buckets existants.
Vous devez installer et initialiser gcloud CLIafin de générer un jeton d'accès pour l'en-tête
Authorization.Créez un fichier JSON contenant un objet
TransferJobavec une ressourceReplicationSpecinitialisée :TransferJob { "name": "TRANSFER_JOB_NAME", ... ReplicationSpec: { "gcsDataSource": { "bucketName": "SOURCE_BUCKET_NAME" }, "gcsDataSink" { "bucketName": "DESTINATION_BUCKET_NAME" }, "objectConditions": { }, "transferOptions": { "overwriteWhen": "OVERWRITE_OPTION" } } ... }
Remplacez :
TRANSFER_JOB_NAMEavec le nom que vous souhaitez attribuer à la tâche de réplication. Pour connaître les règles de dénomination, consultez la documentation de référence surtransferJobs.SOURCE_BUCKET_NAMEavec le nom du bucket source contenant les objets que vous souhaitez répliquer. Exemple :example-source-bucket.DESTINATION_BUCKET_NAMEavec le nom du bucket de destination où vos objets seront répliqués. Exemple :example-destination-bucket.OVERWRITE_OPTIONavec une option permettant d'écraser les objets existants dans le bucket de destination à la suite d'un job de réplication, ce qui peut se produire lorsque l'objet de destination et l'objet source portent le même nom. La valeur doit correspondre à l'un des éléments suivants :ALWAYS: écrase toujours les objets dans le bucket de destinationDIFFERENT: n'écrase les objets du bucket de destination que si les données de l'objet de destination sont différentes de celles de l'objet source.NEVER: n'écrase jamais les objets du bucket de destination
Utilisez cURL pour appeler l'API REST du service de transfert de stockage avec une requête
transferJobs.create:curl -X POST --data-binary @JSON_FILE_NAME \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ "https://storagetransfer.googleapis.com/v1/transferJobs"
Où :
JSON_FILE_NAMEcorrespond au nom du fichier JSON que vous avez créé à l'étape 2
Pour vérifier l'état du job de réplication, affichez les journaux Cloud Logging pour le service de transfert de stockage.
Afficher la liste des jobs de réplication
Console
Pour obtenir des instructions sur la façon de lister les jobs de réplication dans la console Google Cloud , consultez Lister les jobs de réplication à l'aide de la console Google Cloud .
Ligne de commande
Exécutez la commande gcloud alpha transfer jobs list avec l'option --job-type :
gcloud alpha transfer jobs list --job-type=replication
API REST
API JSON
Vous devez installer et initialiser gcloud CLIafin de générer un jeton d'accès pour l'en-tête
Authorization.Utilisez cURL pour appeler l'API REST du service de transfert de stockage avec une requête
transferJobs.list:curl -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ "https://storagetransfer.googleapis.com/v1/transferJobs"
Afficher un job de réplication
Console
Pour obtenir des instructions sur l'affichage d'un job de réplication dans la console Google Cloud , consultez Afficher un job de réplication à l'aide de la console Google Cloud .
Ligne de commande
Exécutez la commande gcloud alpha transfer jobs describe :
gcloud alpha transfer jobs describe JOB_NAME
Remplacez :
JOB_NAMEpar l'identifiant unique du job de réplication. Exemple :1234567890Pour trouver l'ID de votre tâche de transfert, listez vos jobs de réplication.
API REST
API JSON
Vous devez installer et initialiser gcloud CLIafin de générer un jeton d'accès pour l'en-tête
Authorization.Utilisez
cURLpour appeler l'API REST du service de transfert de stockage avec une requêtetransferJobs.get:curl -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ "https://storagetransfer.googleapis.com/v1/transferJobs/JOB_NAME"
Remplacez :
JOB_NAMEavec l'ID unique du job de réplication. Exemple :1234567890Pour trouver l'ID de votre job de réplication, affichez la liste de vos jobs de réplication.
Mettre à jour un job de réplication
Vous pouvez mettre à jour les champs suivants d'un job de réplication :
Description du job de réplication
Configuration d'un job de réplication
Configuration des notifications publiées dans Pub/Sub
Comportement de journalisation des opérations de jobs de réplication
État du job de réplication (activé, désactivé ou supprimé)
Console
Pour obtenir des instructions sur la mise à jour d'un job de réplication dans la console Google Cloud , consultez Mettre à jour un job de réplication à l'aide de la console Google Cloud .
Ligne de commande
Utilisez la commande gcloud alpha transfer jobs update avec les options qui contrôlent les propriétés du job de réplication que vous souhaitez mettre à jour. Pour obtenir la liste des options possibles, consultez la documentation sur gcloud alpha transfer jobs update.
Par exemple, pour modifier le comportement d'écrasement d'objets du job de réplication, exécutez la commande gcloud alpha transfer jobs update avec l'option --overwrite-when :
gcloud alpha transfer jobs update JOB_NAME --overwrite-when=OVERWRITE_OPTION
Remplacez :
JOB_NAMEpar l'identifiant unique du job de réplication. Exemple :1234567890Pour trouver l'ID de votre job de transfert, listez ou affichez votre job de transfert.OVERWRITE_OPTIONavec une option permettant d'écraser les objets existants dans le bucket de destination à la suite d'un job de réplication, ce qui peut se produire lorsque l'objet de destination et l'objet source portent le même nom. La valeur doit correspondre à l'un des éléments suivants :always: écrase toujours les objets de destination.different: écrase les objets du bucket de destination uniquement si les données de l'objet de destination sont différentes de celles de l'objet source.never: n'écrase jamais les objets de destination.
API REST
API JSON
Vous devez installer et initialiser gcloud CLIafin de générer un jeton d'accès pour l'en-tête
Authorization.Créez un fichier JSON contenant la structure suivante, qui inclut les champs de l' objet
TransferJobque vous souhaitez mettre à jour :{ "projectId": string, "transferJob": { object (TransferJob) }, "updateTransferJobFieldMask": UPDATE_MASK }
Où :
object (TransferJob)est remplacé par les champs du job de réplication que vous souhaitez mettre à jour. Pour en savoir plus, consultez la représentation de la ressourceTransferJob.UPDATE_MASKest une liste des noms de champs à mettre à jour, séparés par une virgule. Les valeurs peuvent être l'une des suivantes :description,transferSpec,notificationConfig,loggingConfigoustatus.
Pour en savoir plus sur les noms de champs que vous pouvez inclure, consultez le corps de la requête
transferJobs.patch.Utilisez cURL pour appeler l'API REST du service de transfert de stockage avec une requête
transferJobs.patch:curl -X PATCH \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ "https://storagetransfer.googleapis.com/v1/transferJobs/JOB_NAME"
Remplacez :
JOB_NAMEavec l'ID unique du job de réplication. Exemple :1234567890Pour trouver l'ID de votre job de réplication, affichez la liste de vos jobs de réplication.
Supprimer un job de réplication
Console
Pour obtenir des instructions sur la suppression d'un job de réplication dans la console Google Cloud , consultez Supprimer un job de réplication à l'aide de la console Google Cloud .
Ligne de commande
Exécutez la commande gcloud alpha transfer jobs delete :
gcloud alpha transfer jobs delete JOB_NAME
Remplacez :
JOB_NAMEpar l'identifiant unique du job de réplication. Exemple :1234567890Pour trouver l'ID de votre job de réplication, listez vos jobs de réplication.
API REST
API JSON
Vous devez installer et initialiser gcloud CLIafin de générer un jeton d'accès pour l'en-tête
Authorization.Utilisez cURL pour appeler l'API REST du service de transfert de stockage avec une requête
transferJobs.delete:curl -X DELETE \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ "https://storagetransfer.googleapis.com/v1/transferJobs/JOB_NAME"
Remplacez :
JOB_NAMEavec l'ID unique du job de réplication. Exemple :1234567890Pour trouver l'ID de votre job de réplication, listez vos jjobs de réplication.