Transferts basés sur des événements à partir de Cloud Storage

Le service de transfert de stockage peut écouter les notifications d'événements dans Google Cloud pour transférer automatiquement les données qui ont été ajoutées ou mises à jour dans un bucket Cloud Storage. En savoir plus sur les avantages des transferts basés sur des événements

Les transferts basés sur des événements depuis Cloud Storage utilisent des notifications Pub/Sub pour savoir quand des objets du bucket source ont été modifiés ou ajoutés. Les suppressions d'objets ne sont pas détectées. La suppression d'un objet à la source n'entraîne pas la suppression de l'objet associé dans le bucket de destination.

Les transferts basés sur des événements utilisent toujours un bucket Cloud Storage comme destination.

Configurer les autorisations

En plus des autorisations requises pour toutes les tâches de transfert, les transferts basés sur des événements nécessitent le Pub/Sub Subscriber rôle.

  1. Recherchez le nom de l'agent de service du service de transfert de stockage pour votre projet :

    1. Accédez à la page de référence googleServiceAccounts.get.

      Un panneau interactif s'affiche, intitulé Essayer cette méthode.

    2. Dans le panneau, sous Paramètres des requêtes, saisissez votre ID de projet. Le projet que vous spécifiez ici doit être le projet que vous utilisez pour gérer le service de transfert de stockage, qui peut être différent du projet du bucket source.

    3. Cliquez sur Exécuter.

    L'adresse e-mail de votre agent de service est renvoyée en tant que valeur de accountEmail. Copiez cette valeur.

    L'adresse e-mail de l'agent de service utilise le format project-PROJECT_NUMBER@storage-transfer-service.iam.gserviceaccount.com.

  2. Attribuez le rôle Pub/Sub Subscriber à l'agent de service du service de transfert de stockage.

    console Cloud

    Suivez les instructions de la section Contrôler l'accès via la Google Cloud console pour attribuer le rôle Pub/Sub Subscriber au service de transfert de stockage. Le rôle peut être attribué au niveau du sujet, de l'abonnement ou du projet.

    CLI gcloud

    Suivez les instructions de la section Définir une stratégie pour ajouter la liaison suivante :

    {
      "role": "roles/pubsub.subscriber",
      "members": [
        "serviceAccount:project-PROJECT_NUMBER@storage-transfer-service.iam.gserviceaccount.com"
    }

Configurer Pub/Sub

  1. Assurez-vous de respecter les prérequis pour utiliser Pub/Sub avec Cloud Storage.

  2. Créez une notification Pub/Sub pour le bucket Cloud Storage source.

    Vous ne pouvez pas gérer les notifications Pub/Sub avec la Google Cloud console. Utilisez pour cela la gcloud CLI ou l’une des bibliothèques clientes disponibles.

    gcloud storage buckets notifications create gs://SOURCE_BUCKET_NAME --topic=TOPIC_NAME
  3. Créez un abonnement pull pour le sujet. Vous devez créer un abonnement distinct pour chaque tâche de transfert.

    L'exemple suivant montre la commande Google Cloud CLI permettant de créer un abonnement pull. Pour obtenir des instructions sur la console et le code de la bibliothèque cliente, consultez la section Créer un abonnement pull.

    gcloud pubsub subscriptions create SUBSCRIPTION_ID --topic=TOPIC_NAME --ack-deadline=300

Créer un job de transfert

Vous pouvez utiliser la Google Cloud console, la Google Cloud CLI ou l'API REST pour créer une tâche de transfert basée sur des événements.

N'incluez pas d'informations sensibles telles que des informations permettant d'identifier personnellement l'utilisateur (PII) ou des données de sécurité dans le nom de votre tâche de transfert. Les noms de ressources peuvent être propagés aux noms d'autres ressources Google Cloud et peuvent être exposés à des systèmes internes à Google en dehors de votre projet.

console Cloud

  1. Accédez à la page Créer une tâche de transfert dans la Google Cloud console.

    Accéder à Créer une tâche de transfert

  2. Sélectionnez Cloud Storage comme source et destination.

  3. Dans Mode de planification , sélectionnez Basé sur des événements , puis cliquez sur Étape suivante.

  4. Sélectionnez le bucket source pour ce transfert.

  5. Dans la section Flux d'événements, saisissez le nom de l'abonnement :

    projects/PROJECT_NAME/subscriptions/SUBSCRIPTION_ID

  6. Vous pouvez également définir des filtres, puis cliquer sur Étape suivante.

  7. Sélectionnez le bucket de destination pour ce transfert.

  8. Vous pouvez également saisir une heure de début et de fin pour le transfert. Si vous ne spécifiez pas d'heure, le transfert démarre immédiatement et s'exécute jusqu'à ce qu'il soit arrêté manuellement.

  9. Spécifiez les options de transfert. Pour en savoir plus, consultez la page Créer des transferts.

  10. Cliquez sur Créer.

Une fois créé, le job de transfert commence à s'exécuter et un écouteur d'événements attend les notifications de l'abonnement Pub/Sub. La page d'informations du job affiche une opération par heure et inclut des informations sur les données transférées pour chaque job.

gcloud

Pour créer un job de transfert basé sur des événements à l'aide de Google Cloud CLI, utilisez la commande gcloud transfer jobs create avec l'indicateur --event-stream-name :

gcloud transfer jobs create \
  gs://SOURCE_BUCKET \
  gs://DESTINATION_BUCKET \
  --event-stream-name=projects/PROJECT_NAME/subscriptions/SUBSCRIPTION_ID \
  --event-stream-starts=EVENT_STREAM_STARTS \
  --event-stream-expires=EVENT_STREAM_EXPIRES

Remplacez les espaces réservés par vos valeurs réelles :

  • SOURCE_BUCKET : nom de votre bucket Cloud Storage source.
  • DESTINATION_BUCKET : votre bucket Cloud Storage de destination.
  • PROJECT_NAME : projet contenant l'abonnement Pub/Sub.
  • SUBSCRIPTION_ID : ID de l'abonnement Pub/Sub que vous avez créé (par exemple, my-subscription).
  • EVENT_STREAM_STARTS : date et heure de début de l'écoute des événements au format %Y-%m-%dT%H:%M:%S%z (par exemple, 2020-04-12T06:42:12+04:00). Si cette valeur n'est pas définie, le job commence à s'exécuter et à écouter les événements une fois la commande de création du job envoyée.
  • EVENT_STREAM_EXPIRES : date et heure d'arrêt de l'écoute des événements. Si cette valeur n'est pas définie, le job se poursuit jusqu'à ce qu'il soit arrêté manuellement.

Pour obtenir la liste complète des champs compatibles, consultez la gcloud transfer jobs create référence.

REST

Pour créer un transfert basé sur des événements à l'aide de l'API REST, envoyez l'objet JSON suivant au point de terminaison transferJobs.create :

transfer_job {
  "description": "YOUR DESCRIPTION",
  "status": "ENABLED",
  "projectId": "PROJECT_ID",
  "transferSpec" {
    "gcsDataSource" {
      "bucketName": "GCS_SOURCE_NAME"
    },
    "gcsDataSink": {
        "bucketName": "GCS_SINK_NAME"
    }
  }
  "eventStream" {
    "name": "projects/PROJECT_NAME/subscriptions/SUBSCRIPTION_ID",
    "eventStreamStartTime": "2022-12-02T01:00:00+00:00",
    "eventStreamExpirationTime": "2023-01-31T01:00:00+00:00"
  }
}

eventStreamStartTime et eventStreamExpirationTime sont facultatifs. Si l'heure de début est omise, le transfert démarre immédiatement. Si l'heure de fin est omise, le transfert se poursuit jusqu'à ce qu'il soit arrêté manuellement.

Bibliothèques clientes

Go

Pour savoir comment installer et utiliser la bibliothèque cliente pour le service de transfert de stockage, consultez la page Bibliothèques clientes du service de transfert de stockage. Pour en savoir plus, consultez la documentation de référence de l'API Storage Transfer Service Go.

Pour vous authentifier auprès du service de transfert de stockage, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.


func createEventDrivenGCSTransfer(w io.Writer, projectID string, gcsSourceBucket string, gcsSinkBucket string, pubSubId string) (*storagetransferpb.TransferJob, error) {
	// Your Google Cloud Project ID.
	// projectID := "my-project-id"

	// The name of the source GCS bucket.
	// gcsSourceBucket := "my-source-bucket"

	// The name of the GCS bucket to transfer objects to.
	// gcsSinkBucket := "my-sink-bucket"

	// The Pub/Sub topic to subscribe the event driven transfer to.
	// pubSubID := "projects/PROJECT_NAME/subscriptions/SUBSCRIPTION_ID"

	ctx := context.Background()
	client, err := storagetransfer.NewClient(ctx)