Trasferimenti basati su eventi

Storage Transfer Service può ascoltare le notifiche di eventi in AWS o Google Cloud per trasferire automaticamente i dati aggiunti o aggiornati nella posizione di origine. I trasferimenti basati su eventi sono supportati da AWS S3 o Cloud Storage in Cloud Storage.

I trasferimenti basati su eventi ascoltano le notifiche relative agli eventi di Amazon S3 inviate ad Amazon SQS per le origini AWS S3. Le origini Cloud Storage inviano notifiche a una sottoscrizione Pub/Sub.

Vantaggi dei trasferimenti basati sugli eventi

Poiché i trasferimenti basati sugli eventi rilevano le modifiche al bucket di origine, gli aggiornamenti vengono copiati nella destinazione quasi in tempo reale. Storage Transfer Service non deve eseguire un'operazione di elenco sull'origine, risparmiando tempo e denaro.

Tra i casi d'uso sono inclusi:

  • Analisi basata su eventi: replica i dati da AWS a Cloud Storage per eseguire analisi ed elaborazione.

  • Replica di Cloud Storage: abilita la replica automatica e asincrona degli oggetti tra i bucket Cloud Storage.

    I trasferimenti basati su eventi con Storage Transfer Service sono diversi da quelli per la replica Turbo di Cloud Storage e per la replica predefinita, in quanto creano una copia dei dati in un bucket diverso.

    In questo modo potrai usufruire di:

    • Conservare i dati di sviluppo e produzione in spazi dei nomi separati.
    • Condivisione di dati senza fornire accesso al bucket originale.
    • Backup in un altro continente o su un'area non coperta dallo spazio di archiviazione a due regioni e a più aree geografiche.
  • Configurazione DR/HA: replica gli oggetti dall'origine alla destinazione di backup in alcuni minuti:

    • Backup cross-cloud: crea una copia del backup di AWS S3 su Cloud Storage.
    • Backup tra regioni o progetti: crea una copia del bucket Cloud Storage in un'altra regione o un altro progetto.
  • Migrazione live: il trasferimento basato su eventi può favorire la migrazione a basso tempo di inattività, in ordine di minuti di inattività, come passo successivo alla migrazione batch una tantum.

Configurare trasferimenti basati sugli eventi da Cloud Storage

Configura le autorizzazioni

  1. Trova il nome dell'agente di servizio Storage Transfer Service per il tuo progetto:

    1. Vai alla pagina di riferimento googleServiceAccounts.get.

      Si apre un riquadro interattivo, intitolato Prova questo metodo.

    2. Nel riquadro, in Parametri di richiesta, inserisci il tuo ID progetto. Il progetto specificato qui deve essere il progetto che utilizzi per gestire Storage Transfer Service, che potrebbe essere diverso dal progetto del bucket di origine.

    3. Fai clic su Execute (Esegui).

    L'indirizzo email dell'agente di servizio viene restituito come valore di accountEmail. Copia questo valore.

    L'indirizzo email dell'agente di servizio utilizza il formato project-PROJECT_NUMBER@storage-transfer-service.iam.gserviceaccount.com.

  2. Concedi il ruolo Pub/Sub Subscriber all'agente di servizio Storage Transfer Service.

    console Cloud

    Segui le istruzioni in Controllo dell'accesso tramite la console Google Cloud per concedere il ruolo Pub/Sub Subscriber al servizio Storage Transfer Service. Il ruolo può essere concesso a livello di argomento, abbonamento o progetto.

    Interfaccia a riga di comando gcloud

    Segui le istruzioni in Impostazione di un criterio per aggiungere la seguente associazione:

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

Configura Pub/Sub

  1. Assicurati di soddisfare i prerequisiti per l'utilizzo di Pub/Sub con Cloud Storage.

  2. Configura la notifica Pub/Sub per Cloud Storage:

    gcloud storage buckets notifications create gs://BUCKET_NAME --topic=TOPIC_NAME
    
  3. Crea una sottoscrizione pull per l'argomento:

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

Creare un job di trasferimento

Puoi utilizzare l'API REST o la console Cloud per creare un job di trasferimento basato su eventi.

console Cloud

  1. Vai alla pagina Crea job di trasferimento nella console Google Cloud.

    Vai a Crea job di trasferimento

  2. Seleziona Cloud Storage sia come origine che come destinazione.

  3. Seleziona i bucket e, facoltativamente, le cartelle all'interno dei bucket da utilizzare come origine e di destinazione.

  4. Nella schermata Modalità di esecuzione del trasferimento, seleziona Basato sugli eventi.

  5. Inserisci il nome dell'abbonamento utilizzando il seguente formato:

    projects/PROJECT_NAME/subscriptions/SUBSCRIPTION_ID

  6. (Facoltativo) Inserisci un'ora di inizio e di fine per il trasferimento. Se non specifichi un orario, il trasferimento inizierà immediatamente e verrà eseguito fino all'arresto manuale.

  7. Specifica le opzioni di trasferimento. Ulteriori informazioni sono disponibili nella pagina Creare trasferimenti. I trasferimenti basati su eventi non possono essere configurati per eliminare file dall'origine.

  8. Fai clic su Crea.

Una volta creato, il job di trasferimento inizia a essere eseguito e un listener di eventi attende le notifiche sulla sottoscrizione Pub/Sub. La pagina dei dettagli del job mostra un'operazione ogni ora e include i dettagli sui dati trasferiti per ogni job.

REST

Per creare un trasferimento basato su eventi utilizzando l'API REST, invia il seguente oggetto JSON all'endpoint 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 e eventStreamExpirationTime sono facoltativi. Se l'ora di inizio viene omessa, il trasferimento inizia immediatamente; se l'ora di fine viene omessa, il trasferimento continua fino all'arresto manuale.

Configurare i trasferimenti basati su eventi da AWS S3

Crea una coda SQS

I trasferimenti basati su eventi da AWS S3 utilizzano le notifiche di Amazon Simple Queue Service (SQS) per sapere quando gli oggetti nel bucket di origine sono stati modificati o aggiunti.

  1. Nella console AWS, vai alla pagina Simple Queue Service.

  2. Fai clic su Crea coda.

  3. Inserisci un Nome per questa coda.

  4. Nella sezione Criteri di accesso, seleziona Avanzate. Viene visualizzato un oggetto JSON:

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

    I valori AWS e Resource sono univoci per ogni progetto.

  5. Copia i valori specifici di AWS e Resource dal file JSON visualizzato nel seguente snippet JSON:

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

    I valori dei segnaposto nel JSON precedente utilizzano il seguente formato:

    • AWS è un valore numerico che rappresenta il tuo progetto Amazon Web Services. Ad esempio, "aws:SourceAccount": "1234567890".
    • RESOURCE è un numero di risorsa Amazon (ARN) che identifica questa coda. Ad esempio, "Resource": "arn:aws:sqs:us-west-2:01234567890:test".
    • S3_BUCKET_ARN è un ARN che identifica il bucket di origine. Ad esempio, "aws:SourceArn": "arn:aws:s3:::example-aws-bucket". Puoi trovare l'ARN di un bucket nella scheda Proprietà della pagina dei dettagli del bucket nella console AWS.
  6. Sostituisci il file JSON visualizzato nella sezione Criterio di accesso con il file JSON aggiornato sopra.

  7. Fai clic su Crea coda.

Al termine, prendi nota del nome risorsa Amazon (ARN) della coda. L'ARN ha il seguente formato:

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

Attiva le notifiche sul bucket S3

  1. Nella console AWS, vai alla pagina S3.

  2. Nell'elenco Bucket, seleziona il bucket di origine.

  3. Seleziona la scheda Proprietà.

  4. Nella sezione Notifiche di eventi, fai clic su Crea notifica di evento.

  5. Specifica un nome per questo evento.

  6. Nella sezione Tipi di eventi, seleziona Tutti gli eventi di creazione di oggetti.

  7. Come Destinazione, seleziona Coda SQS e scegli la coda creata per questo trasferimento.

  8. Fai clic su Salva modifiche.

Configura le autorizzazioni

Segui le istruzioni in Configurare l'accesso a un'origine: Amazon S3 per creare un ID chiave di accesso e una chiave segreta o un ruolo Federated Identity.

Sostituisci il file JSON delle autorizzazioni personalizzate con il seguente codice:

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

Dopo averlo creato, tieni presente che:

  • Per un utente, prendi nota dell'ID chiave di accesso e della chiave segreta.
  • Per un ruolo di Federated Identity, nota il nome della risorsa Amazon (ARN), che ha il formato arn:aws:iam::AWS_ACCOUNT:role/ROLE_NAME.

Creare un job di trasferimento

Puoi utilizzare l'API REST o la console Cloud per creare un job di trasferimento basato su eventi.

console Cloud

  1. Vai alla pagina Crea job di trasferimento nella console Google Cloud.

    Vai a Crea job di trasferimento

  2. Seleziona Amazon S3 come tipo di origine e Cloud Storage come destinazione.

  3. Inserisci il nome del tuo bucket S3.

  4. Seleziona il metodo di autenticazione e inserisci le informazioni richieste, che hai creato e indicato nella sezione precedente.

  5. Seleziona il bucket Cloud Storage di destinazione e, facoltativamente, il percorso.

  6. Nella schermata Modalità di esecuzione del trasferimento, seleziona Basato sugli eventi.

  7. Inserisci l'ARN della coda Amazon SQS.

  8. (Facoltativo) Inserisci un'ora di inizio e di fine per il trasferimento. Se non specifichi un orario, il trasferimento inizierà immediatamente e verrà eseguito fino all'arresto manuale.

  9. Specifica le opzioni di trasferimento. Ulteriori informazioni sono disponibili nella pagina Creare trasferimenti. I trasferimenti basati su eventi non possono essere configurati per eliminare file dall'origine.

  10. Fai clic su Crea.

Una volta creato, il job di trasferimento inizia a essere eseguito e un listener di eventi attende le notifiche nella coda SQS. La pagina dei dettagli del job mostra un'operazione ogni ora e include i dettagli sui dati trasferiti per ogni job.

REST

Per creare un trasferimento basato su eventi utilizzando l'API REST, invia il seguente oggetto JSON all'endpoint 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"
  }
}

eventStreamStartTime e eventStreamExpirationTime sono facoltativi. Se l'ora di inizio viene omessa, il trasferimento inizia immediatamente; se l'ora di fine viene omessa, il trasferimento continua fino all'arresto manuale.