Transferts en fonction d'événements

Le service de transfert de stockage peut écouter les notifications d'événements dans AWS ou Google Cloud pour transférer automatiquement les données ajoutées ou mises à jour dans l'emplacement source. AWS S3 ou Cloud Storage sont compatibles avec les transferts basés sur des événements vers Cloud Storage.

Les transferts basés sur des événements écoutent les notifications d'événement Amazon S3 envoyées à Amazon SQS pour les sources AWS S3. Les sources Cloud Storage envoient des notifications à un abonnement Pub/Sub.

Avantages des transferts basés sur des événements

Étant donné que les transferts basés sur les événements écoutent les modifications apportées au bucket source, les mises à jour sont copiées en quasi-temps réel vers la destination. Le service de transfert de stockage n'a pas besoin d'exécuter d'opération de liste sur la source, ce qui représente un gain de temps et d'argent.

Les cas d'utilisation incluent les situations suivantes :

  • Analyse basée sur les événements: répliquez les données d'AWS vers Cloud Storage pour effectuer des analyses et des traitements.

  • Réplication Cloud Storage: activez la réplication automatique et asynchrone des objets entre les buckets Cloud Storage.

    Les transferts basés sur des événements avec le service de transfert de stockage diffèrent de la réplication turbo et de la réplication par défaut de Cloud Storage, car ils créent une copie de vos données dans un autre bucket.

    Cela vous permet de bénéficier des avantages suivants:

    • Conserver les données de développement et de production dans des espaces de noms distincts.
    • Partager des données sans fournir l'accès au bucket d'origine
    • Sauvegarde sur un autre continent, ou dans une zone non couverte par un stockage birégional et multirégional.
  • Configuration de la reprise après sinistre/de la haute disponibilité: répliquez les objets de la source vers la destination de sauvegarde en quelques minutes:

    • Sauvegarde multicloud: créez une copie de la sauvegarde AWS S3 dans Cloud Storage.
    • Sauvegarde interrégionale ou inter-projets: créez une copie du bucket Cloud Storage dans une région ou un projet différent.
  • Migration à chaud: le transfert basé sur les événements permet d'effectuer une migration à faible temps de pause, en fonction du nombre de minutes d'indisponibilité, en tant qu'étape complémentaire d'une migration par lot ponctuelle.

Configurer des transferts basés sur des événements depuis Cloud Storage

Configurer les autorisations

  1. Recherchez le nom de l'agent de service de 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 de requête, saisissez l'ID de votre projet. Le projet que vous spécifiez ici doit être celui que vous utilisez pour gérer le service de transfert de stockage, qui peut être différent de celui 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 console Google Cloud pour accorder le rôle Pub/Sub Subscriber au service de transfert de stockage. Le rôle peut être accordé 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 que vous avez rempli les conditions préalables pour utiliser Pub/Sub avec Cloud Storage.

  2. Configurez la notification Pub/Sub pour Cloud Storage:

    gcloud storage buckets notifications create gs://BUCKET_NAME --topic=TOPIC_NAME
    
  3. Créez un abonnement pull pour le sujet:

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

Créer un job de transfert

Vous pouvez créer un job de transfert basé sur des événements à l'aide de l'API REST ou de la console Cloud.

console Cloud

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

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

  2. Sélectionnez Cloud Storage à la fois comme source et comme destination.

  3. Sélectionnez les buckets, et éventuellement les dossiers qu'ils contiennent, à utiliser comme source et destination.

  4. Sur l'écran Mode d'exécution de transfert, sélectionnez Basé sur un événement.

  5. Saisissez le nom de l'abonnement au format suivant:

    projects/PROJECT_NAME/subscriptions/SUBSCRIPTION_ID

  6. Si vous le souhaitez, saisissez des heures de début et de fin pour le transfert. Si vous n'indiquez pas d'heure, le transfert démarre immédiatement et s'exécute jusqu'à ce qu'il soit arrêté manuellement.

  7. Spécifiez les options de transfert. Pour en savoir plus, consultez la page Créer des transferts. Les transferts basés sur des événements ne peuvent pas être configurés pour supprimer des fichiers de la source.

  8. Cliquez sur Créer.

Une fois créée, la tâche de transfert commence à s'exécuter et un écouteur d'événements attend les notifications sur l'abonnement Pub/Sub. La page d'informations de la tâche affiche une opération toutes les heures et inclut des informations sur les données transférées pour chaque tâche.

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"
  }
}

Les champs eventStreamStartTime et eventStreamExpirationTime sont facultatifs. Si l'heure de début est omise, le transfert commence immédiatement. Si l'heure de fin est omise, le transfert se poursuit jusqu'à ce que vous l'arrêtiez manuellement.

Configurer des transferts basés sur des événements à partir d'AWS S3

Créer une file d'attente SQS

Les transferts basés sur des événements provenant d'AWS S3 utilisent les notifications d'Amazon Simple Queue Service (SQS) pour savoir quand des objets du bucket source ont été modifiés ou ajoutés.

  1. Dans la console AWS, accédez à la page SimpleQueue Service (Service de file d'attente simple).

  2. Cliquez sur Créer une file d'attente.

  3. Attribuez un nom à cette file d'attente.

  4. Dans la section Règles d'accès, sélectionnez Paramètres avancés. Un objet JSON est affiché:

     {
        "Version": "2008-10-17",
        "Id": "__default_policy_ID",
        "Statement": [
          {
            "Sid": "__owner_statement",
            "Effect": "Allow",
            "Principal": {
              "AWS": "01234567890"
            },
            "Action": [
              "SQS:*"
            ],
            "Resource": "arn:aws:sqs:us-west-2:01234567890:test"
          }
        ]
      }
      

    Les valeurs de AWS et Resource sont uniques pour chaque projet.

  5. Copiez les valeurs spécifiques de AWS et Resource du fichier JSON affiché dans l'extrait de code JSON suivant:

    {
      "Version": "2012-10-17",
      "Id": "example-ID",
      "Statement": [
        {
          "Sid": "example-statement-ID",
          "Effect": "Allow",
          "Principal": {
            "Service": "s3.amazonaws.com"
          },
          "Action": "SQS:SendMessage",
          "Resource": "RESOURCE",
          "Condition": {
            "StringEquals": {
              "aws:SourceAccount": "AWS"
            },
            "ArnLike": {
              "aws:SourceArn": "S3_BUCKET_ARN"
            }
          }
        }
      ]
    }
    

    Les valeurs des espaces réservés dans le fichier JSON précédent utilisent le format suivant:

    • AWS est une valeur numérique représentant votre projet Amazon Web Services. Par exemple, "aws:SourceAccount": "1234567890".
    • RESOURCE est un numéro de ressource Amazon (ARN) qui identifie cette file d'attente. Exemple : "Resource": "arn:aws:sqs:us-west-2:01234567890:test".
    • S3_BUCKET_ARN est un ARN qui identifie le bucket source. Exemple : "aws:SourceArn": "arn:aws:s3:::example-aws-bucket". Vous le trouverez dans l'onglet Propriétés de la page d'informations du bucket dans la console AWS.
  6. Remplacez le fichier JSON affiché dans la section Règle d'accès par le fichier JSON mis à jour ci-dessus.

  7. Cliquez sur Créer une file d'attente.

Une fois l'opération terminée, notez le nom de ressource Amazon (ARN) de la file d'attente. Le format de l'ARN est le suivant:

arn:aws:sqs:us-east-1:1234567890:event-queue"

Activer les notifications sur votre bucket S3

  1. Dans la console AWS, accédez à la page S3.

  2. Dans la liste Buckets, sélectionnez votre bucket source.

  3. Sélectionnez l'onglet Propriétés.

  4. Dans la section Notifications relatives à un événement, cliquez sur Créer une notification d'événement.

  5. Attribuez un nom à cet événement.

  6. Dans la section Types d'événements, sélectionnez Tous les événements de création d'objets.

  7. Dans le champ Destination, sélectionnez File d'attente SQS et la file d'attente que vous avez créée pour ce transfert.

  8. Cliquez sur Enregistrer les modifications.

Configurer les autorisations

Suivez les instructions de la section Configurer l'accès à une source: Amazon S3 pour créer un ID de clé d'accès et une clé secrète, ou un rôle d'identité fédérée.

Remplacez le fichier JSON des autorisations personnalisées par le code suivant:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "sqs:DeleteMessage",
                "sqs:ChangeMessageVisibility",
                "sqs:ReceiveMessage",
                "s3:GetObject",
                "s3:ListBucket",
                "s3:GetBucketLocation"
            ],
            "Resource": [
                "arn:aws:s3:::AWS_BUCKET_NAME",
                "arn:aws:s3:::AWS_BUCKET_NAME/*",
                "AWS_QUEUE_ARN"
            ]
        }
    ]
}

Une fois le compte créé, notez les informations suivantes:

  • Notez que pour un utilisateur, notez l'ID de la clé d'accès et la clé secrète.
  • Pour un rôle d'identité fédérée, notez l'ARN (Amazon Resource Name), au format arn:aws:iam::AWS_ACCOUNT:role/ROLE_NAME.

Créer un job de transfert

Vous pouvez créer un job de transfert basé sur des événements à l'aide de l'API REST ou de la console Cloud.

console Cloud

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

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

  2. Sélectionnez Amazon S3 comme type de source et Cloud Storage comme destination.

  3. Saisissez le nom de votre bucket S3.

  4. Sélectionnez votre méthode d'authentification et saisissez les informations demandées que vous avez créées et notées dans la section précédente.

  5. Sélectionnez le bucket Cloud Storage de destination et, éventuellement, le chemin d'accès.

  6. Sur l'écran Mode d'exécution de transfert, sélectionnez Basé sur un événement.

  7. Saisissez l'ARN de la file d'attente Amazon SQS.

  8. Si vous le souhaitez, saisissez des heures 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 que vous l'arrêtiez manuellement.

  9. Spécifiez les options de transfert. Pour en savoir plus, consultez la page Créer des transferts. Les transferts basés sur des événements ne peuvent pas être configurés pour supprimer des fichiers de la source.

  10. Cliquez sur Créer.

Une fois créée, la tâche de transfert commence à s'exécuter et un écouteur d'événements attend les notifications dans la file d'attente SQS. La page d'informations de la tâche affiche une opération toutes les heures et inclut des informations sur les données transférées pour chaque tâche.

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" {
    "awsS3DataSource" {
      "bucketName": "AWS_SOURCE_NAME",
      "roleArn": "arn:aws:iam::1234567891011:role/role_for_federated_auth"
    },
    "gcsDataSink": {
        "bucketName": "GCS_SINK_NAME"
    }
  }
  "eventStream" {
    "name": "arn:aws:sqs:us-east-1:1234567891011:s3-notification-queue",
    "eventStreamStartTime": "2022-12-02T01:00:00+00:00",
    "eventStreamExpirationTime": "2023-01-31T01:00:00+00:00"
  }
}

Les champs eventStreamStartTime et eventStreamExpirationTime sont facultatifs. Si l'heure de début est omise, le transfert commence immédiatement. Si l'heure de fin est omise, le transfert se poursuit jusqu'à ce que vous l'arrêtiez manuellement.