Utiliser la réplication entre buckets

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 souhaiter copier des données d'un bucket Cloud Storage vers un autre. La réplication entre buckets copie de manière asynchrone des 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 en ce sens que vos données existent dans deux buckets, chacun avec ses propres configurations telles que l'emplacement de stockage, le chiffrement, l'accès et la classe de stockage. 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. La réplication entre les buckets peut être activée 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 Go peuvent prendre plusieurs heures.

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.

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 Pub/Sub pour recevoir des notifications de modification de votre bucket source et le service de transfert de stockage pour répliquer les objets de votre bucket source vers votre bucket de destination. Pour utiliser la réplication entre buckets, vous devez également accorder les autorisations requises à l'agent de service utilisé par le service de transfert de stockage pour répliquer les données et à l'agent de service utilisé par Pub/Sub pour écrire des notifications.

Attribuer les rôles requis à l'agent de service du service de transfert de stockage

Le service de transfert de stockage utilise un agent de service géré par Google pour répliquer les données. L'adresse e-mail de cet agent de service respecte le format de dénomination project-PROJECT_NUMBER@storage-transfer-service.. 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 Service googleServiceAccounts.get.

L'agent de service du service de transfert de stockage a besoin des autorisations suivantes pour répliquer vos objets et configurer les notifications Pub/Sub pour votre bucket source :

Autorisations requises

  • storage.buckets.get sur le bucket source et le bucket de destination
  • storage.buckets.update sur le bucket source
  • storage.objects.list sur le bucket source
  • storage.objects.get sur le bucket source
  • storage.objects.rewrite sur le bucket de destination
  • pubsub.topics.create sur le projet
  • pubsub.subscriptions.create sur le projet
  • pubsub.subscriptions.consume sur le projet

Ces autorisations peuvent être accordées via le rôle Éditeur Pub/Sub (roles/pubsub.editor) et le rôle Administrateur de l'espace de stockage (roles/storage.admin). Pour un rôle moins permissif que le rôle d'administrateur de l'espace de stockage, vous pouvez également utiliser un rôle personnalisé.

Attribuer les rôles requis à l'agent de service Cloud Storage

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..

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.publish sur le sujet Pub/Sub
  • pubsub.subscriptions.consume sur le sujet Pub/Sub
  • pubsub.subscriptions.create sur le projet

Ces autorisations peuvent être accordées via le rôle Éditeur Pub/Sub (roles/pubsub.publisher).

Créer un job de réplication

Console

Pour obtenir des instructions sur la création d'une tâche de réplication dans 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_NAME avec le nom du bucket source que vous souhaitez répliquer. Exemple :my-source-bucket

  • DESTINATION_BUCKET_NAME par 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.

  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 un objet TransferJob avec une ressource ReplicationSpec initialisé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_NAME avec 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 sur transferJobs.

    • SOURCE_BUCKET_NAME avec le nom du bucket source contenant les objets que vous souhaitez répliquer. Exemple : example-source-bucket.

    • DESTINATION_BUCKET_NAME avec le nom du bucket de destination où vos objets seront répliqués. Exemple : example-destination-bucket.

    • OVERWRITE_OPTION avec 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 destination

      • DIFFERENT : 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

  3. 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_NAME correspond 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 liste des tâches de réplication dans la console Google Cloud, consultez Lister les tâches 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

  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. 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'une tâche de réplication dans la console Google Cloud, consultez Afficher une tâche 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_NAME par l'identifiant unique du job de réplication. Exemple :1234567890 Pour trouver l'ID de votre tâche de transfert, listez vos jobs de réplication.

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. Utilisez cURL pour appeler l'API REST du service de transfert de stockage avec une requête transferJobs.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 :

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 savoir comment mettre à jour 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_NAME par l'identifiant unique du job de réplication. Exemple :1234567890 Pour trouver l'ID de votre job de transfert, listez ou affichez votre job de transfert.

  • OVERWRITE_OPTION avec 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

  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 la structure suivante, qui inclut les champs de l' objet TransferJob que 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 ressource TransferJob.

    • UPDATE_MASK est 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, loggingConfig ou status.

    Pour en savoir plus sur les noms de champs que vous pouvez inclure, consultez le corps de la requête transferJobs.patch.

  3. 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 :

Supprimer un job de réplication

Console

Pour savoir comment supprimer 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_NAME par l'identifiant unique du job de réplication. Exemple :1234567890 Pour trouver l'ID de votre job de réplication, listez vos jobs de réplication.

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. 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 :