Creare un’integrazione di eventi S3 per copiare automaticamente i file dai bucket Amazon S3 - Amazon Redshift

Amazon Redshift non supporterà più la creazione di nuove UDF Python a partire dal 1º novembre 2025. Se desideri utilizzare le UDF Python, creale prima di tale data. Le UDF Python esistenti continueranno a funzionare normalmente. Per ulteriori informazioni, consulta il post del blog.

Creare un’integrazione di eventi S3 per copiare automaticamente i file dai bucket Amazon S3

Nota

La versione di anteprima per la copia automatica è terminata. Di conseguenza i cluster di anteprima vengono rimossi automaticamente 30 giorni dopo il termine del periodo di anteprima. Se intendi continuare a utilizzare la copia automatica, consigliamo di ricreare i processi di copia automatica esistenti in un altro cluster Amazon Redshift. Non è supportato l’aggiornamento di un cluster di anteprima alla versione più recente di Amazon Redshift.

Puoi utilizzare un processo di copia automatica per caricare i dati nelle tabelle Amazon Redshift dai file archiviati in Amazon S3. Amazon Redshift rileva quando vengono aggiunti nuovi file Amazon S3 al percorso specificato nel comando COPY ed esegue automaticamente un comando COPY senza che sia necessario creare una pipeline di importazione dei dati esterna. Amazon Redshift consente di tenere traccia in modo semplice dei file caricati. Amazon Redshift stabilisce il numero di file raggruppati per comando COPY. È possibile visualizzare i comandi COPY risultanti nelle viste di sistema.

La prima fase per creare un processo COPY JOB automatico consiste nel creare un’integrazione di eventi S3. Quando viene visualizzato un nuovo file nel bucket di origine Amazon S3, Amazon Redshift gestisce il caricamento dei file nel database utilizzando il comando COPY.

Prerequisiti per la creazione di un’integrazione di eventi S3

Per configurare l’integrazione di eventi S3, verifica che siano soddisfatti i prerequisiti seguenti.

  • Il bucket Amazon S3 deve avere una policy di bucket che concede diverse autorizzazioni Amazon S3. Ad esempio, la seguente policy di esempio concede le autorizzazioni per il bucket di risorse amzn-s3-demo-bucket ospitato in us-east-1. Il bucket Amazon S3 e l’integrazione sono nella stessa Regione AWS.

    JSON
    { "Version":"2012-10-17", "Statement": [ { "Sid": "Auto-Copy-Policy-01", "Effect": "Allow", "Principal": { "Service": "redshift.amazonaws.com" }, "Action": [ "s3:GetBucketNotification", "s3:PutBucketNotification", "s3:GetBucketLocation" ], "Resource": "arn:aws:s3:::amzn-s3-demo-bucket:*", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:redshift:us-east-1:111122223333:integration:*" }, "StringEquals": { "aws:SourceAccount": "111122223333" } } } ] }
  • Il cluster con provisioning Amazon Redshift o il namespace Redshift serverless di destinazione deve disporre dell’autorizzazione per accedere al bucket. Verifica che un ruolo IAM collegato al cluster o al namespace serverless disponga di una policy IAM che concede le autorizzazioni appropriate. La policy deve consentire sia s3:GetObject per una risorsa bucket come amzn-s3-demo-bucket sia s3:ListBucket per una risorsa bucket e il relativo contenuto, ad esempio amzn-s3-demo-bucket/*.

    JSON
    { "Version":"2012-10-17", "Statement": [ { "Sid": "AutoCopyReadId", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket", "arn:aws:s3:::amzn-s3-demo-bucket/*" ] } ] }

    Per aggiungere la policy a un ruolo IAM che ha una relazione di attendibilità per il ruolo, segui la procedura descritta.

    JSON
    { "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "redshift.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }

    Se il data warehouse di destinazione è un cluster con provisioning, puoi associare un ruolo IAM al cluster con provisioning utilizzando la scheda Autorizzazioni del cluster nei dettagli del cluster sulla console Amazon Redshift. Per informazioni su come collegare un ruolo al cluster con provisioning, consulta Associazione di ruoli IAM ai cluster nella Guida alla gestione di Amazon Redshift.

    Se il data warehouse di destinazione è Redshift serverless, puoi collegare un ruolo IAM al namespace serverless utilizzando la scheda Sicurezza e crittografia nei dettagli del namespace sulla console Redshift serverless. Per informazioni su come collegare un ruolo al namespace serverless, consulta Concessione delle autorizzazioni ad Amazon Redshift serverless nella Guida alla gestione di Amazon Redshift.

  • Il data warehouse Amazon Redshift deve inoltre disporre di una policy delle risorse che consenta il bucket Amazon S3. Se utilizzi la console Amazon Redshift, quando crei l’integrazione di eventi S3, Amazon Redshift fornisce l’opzione Correggi per me per aggiungere questa policy al data warehouse Amazon Redshift. Per aggiornare una policy delle risorse, puoi utilizzare il comando AWS CLI put-resource-policy. Ad esempio, per collegare una policy delle risorse al cluster con provisioning Amazon Redshift per l’integrazione di un evento S3 con un bucket Amazon S3, esegui un comando AWS CLI simile al seguente. L’esempio seguente mostra una policy per un namespace del cluster con provisioning nella Regione AWS us-east-1 per l’account utente 123456789012. Il bucket è denominato amzn-s3-demo-bucket.

    aws redshift put-resource-policy \ --policy file://rs-rp.json \ --resource-arn "arn:aws:redshift: us-east-1:123456789012:namespace/cc4ffe56-ad2c-4fd1-a5a2-f29124a56433"

    Dove rs-rp.json contiene:

    JSON
    { "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "redshift.amazonaws.com" }, "Action": "redshift:AuthorizeInboundIntegration", "Resource": "arn:aws:redshift:us-east-1:123456789012:namespace:cc4ffe56-ad2c-4fd1-a5a2-f29124a56433", "Condition": { "StringEquals": { "aws:SourceArn": "arn:aws:s3:::amzn-s3-demo-bucket", "aws:SourceAccount": 111122223333 } } }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/myRedshiftRole" }, "Action": "redshift:CreateInboundIntegration", "Resource": "arn:aws:redshift:us-east-1:123456789012:namespace:cc4ffe56-ad2c-4fd1-a5a2-f29124a56433", "Condition": { "StringEquals": { "aws:SourceArn": "arn:aws:s3:::amzn-s3-demo-bucket", "aws:SourceAccount": 111122223333 } } } ] }

    Per collegare una policy delle risorse al namespace Redshift serverless per l’integrazione di un evento S3 con un bucket Amazon S3, esegui un comando AWS CLI simile al seguente. L’esempio seguente mostra una policy per un namespace serverless nella Regione AWS us-east-1 per l’account utente 123456789012. Il bucket è denominato amzn-s3-demo-bucket.

    aws redshift put-resource-policy \ --policy file://rs-rp.json \ --resource-arn "arn:aws:redshift-serverless:us-east-1:123456789012:namespace/namespace-1"

    Dove rs-rp.json contiene:

    JSON
    { "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "redshift.amazonaws.com" }, "Action": "redshift:AuthorizeInboundIntegration", "Resource": "arn:aws:redshift-serverless:us-east-1:123456789012:namespace/namespace-1", "Condition": { "StringEquals": { "aws:SourceArn": "arn:aws:s3:::amzn-s3-demo-bucket", "aws:SourceAccount": 111122223333 } } }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:user/myUser" }, "Action": "redshift:CreateInboundIntegration", "Resource": "arn:aws:redshift-serverless:us-east-1:123456789012:namespace/namespace-1", "Condition": { "StringEquals": { "aws:SourceArn": "arn:aws:s3:::amzn-s3-demo-bucket", "aws:SourceAccount": 111122223333 } } } ] }

Creare un’integrazione di eventi Amazon S3

Per configurare il processo di copia, devi dapprima definire un’integrazione di eventi S3.

Amazon Redshift console
Come creare un’integrazione di eventi Amazon S3 sulla console Amazon Redshift
  1. Accedere alla Console di gestione AWS e aprire la console Amazon Redshift all'indirizzo https://console.aws.amazon.com/redshiftv2/.

  2. Nel riquadro di navigazione sinistro scegli Integrazione di eventi S3.

  3. Scegli Crea integrazione di eventi Amazon S3 per aprire la procedura guidata per creare un’integrazione di eventi S3 da utilizzare con la copia automatica. Il bucket Amazon S3 di origine e il data warehouse Amazon Redshift di destinazione devono trovarsi nella stessa Regione AWS. Specifica le informazioni seguenti mentre segui la procedure per creare un’integrazione:

    • Nome dell’integrazione: è un identificatore univoco per tutte le integrazioni di proprietà dell’Account AWS nella Regione AWS corrente.

    • Descrizione: è un testo che descrive l’integrazione di eventi Amazon S3 per farvi riferimento in un momento successivo.

    • Bucket S3 di origine: è il bucket Amazon S3 nell’Account AWS corrente e la Regione AWS che è l’origine dell’importazione di dati in Amazon Redshift.

    • Data warehouse Amazon Redshift: è il cluster con provisioning Amazon Redshift o il gruppo di lavoro Redshift serverless di destinazione che riceve i dati dall’integrazione.

      Se il warehouse Amazon Redshift di destinazione si trova nello stesso account, puoi selezionare la destinazione. Se la destinazione si trova in un account diverso, specifichi l’ARN del data warehouse Amazon Redshift. La destinazione deve avere una policy delle risorse con i principali e l’origine di integrazione autorizzati. Se non disponi delle policy delle risorse corrette sulla destinazione e la destinazione si trova nello stesso account, puoi selezionare l’opzione Correggi per me per applicare automaticamente le policy delle risorse durante il processo di creazione dell’integrazione. Se la destinazione si trova in un Account AWS diverso, devi applicare manualmente la policy delle risorse nel warehouse Amazon Redshift.

  4. Inserisci fino a 50 Chiavi di tag e con un Valore facoltativo per fornire metadati aggiuntivi sull’integrazione.

  5. Viene visualizzata una pagina di revisione in cui puoi scegliere Crea integrazione di eventi S3.

AWS CLI

Per creare un’integrazione di eventi Amazon S3 con AWS CLI, utilizza il comando create-integration con le opzioni seguenti:

  • integration-name: specifica un nome per l'integrazione.

  • source-arn: specificare l’ARN del bucket di origine Amazon S3.

  • target-arn: specifica l’ARN del namespace della destinazione del cluster con provisioning Amazon Redshift o del gruppo di lavoro Redshift serverless.

L’esempio seguente crea un’integrazione fornendo il nome dell’integrazione, l’ARN di origine e l’ARN di destinazione. L’integrazione non è crittografata.

aws redshift create-integration \ --integration-name s3-integration \ --source-arn arn:aws:s3:us-east-1::s3-example-bucket \ --target-arn arn:aws:redshift:us-east-1:123456789012:namespace:a1b2c3d4-5678-90ab-cdef-EXAMPLE22222 { "IntegrationArn": "arn:aws:redshift:us-east-1:123456789012:integration:a1b2c3d4-5678-90ab-cdef-EXAMPLE11111", "IntegrationName": "s3-integration", "SourceArn": "arn:aws:s3:::s3-example-bucket", "SourceType": "s3-event-notifications", "TargetArn": "arn:aws:redshift:us-east-1:123456789012:namespace:a1b2c3d4-5678-90ab-cdef-EXAMPLE22222", "Status": "creating", "Errors": [], "CreateTime": "2024-10-09T19:08:52.758000+00:00", "Tags": [] }

Inoltre puoi utilizzare i comandi AWS CLI seguenti per gestire l’integrazione di eventi S3.

  • delete-integration: specifica un ARN di integrazione per eliminare un’integrazione di eventi S3.

  • modify-integration: specifica un ARN di integrazione per modificare il nome o la descrizione (o entrambi) di un’integrazione di eventi S3.

  • describe-integrations: specifica un ARN di integrazione per visualizzare le proprietà di un’integrazione di eventi S3.

Consulta la Guida alla CLI di Amazon Redshift per ulteriori informazioni su questi comandi.

Amazon Redshift crea quindi un’integrazione di eventi S3 con l’origine e la destinazione associate, lo stato e le informazioni sullo stato di un processo di copia automatica associato. Puoi visualizzare le informazioni su un’integrazione di eventi S3 sulla console Amazon Redshift scegliendo Integrazioni di eventi S3 e selezionando l’integrazione per visualizzarne i dettagli. Le integrazioni sono separate da quelle create Nel mio account e Da altri account. Nell’elenco Nel mio account sono visualizzate le integrazioni in cui l’origine e la destinazione si trovano nello stesso account. Nell’elenco Da altri account sono visualizzate le integrazioni in cui l’origine è di proprietà di un altro account.

Se elimini un’integrazione di eventi S3, lo stato del processo COPY JOB corrispondente cambia da 1 (attivo) a 0 (inattivo/in sospeso). Tuttavia il processo COPY JOB corrispondente non viene rimosso automaticamente. Se in seguito tenti di creare un processo COPY JOB con lo stesso nome, potrebbe verificarsi un conflitto.

Creare e monitorare un processo COPY JOB

Dopo avere creato l’integrazione, nella pagina Dettagli sull’integrazione di eventi S3 relativa all’integrazione che hai creato, scegli Crea un processo di copia automatica per accedere ad Amazon Redshift Query Editor V2 dove puoi creare il processo di copia automatica per l’integrazione. Amazon Redshift abbina il bucket della clausola FROM dell’istruzione COPY JOB CREATE al bucket utilizzato nell’integrazione di eventi S3. Per informazioni su come utilizzare Amazon Redshift Query Editor V2, consulta Esecuzione di query su un database con Amazon Redshift Query Editor V2 nella Guida alla gestione di Amazon Redshift. Ad esempio, esegui il comando COPY seguente in Query Editor V2 per creare un processo COPY JOB automatico che abbina il bucket Amazon S3 s3://amzn-s3-demo-bucket/staging-folder a un’integrazione di eventi Amazon S3.

COPY public.target_table FROM 's3://amzn-s3-demo-bucket/staging-folder' IAM_ROLE 'arn:aws:iam::123456789012:role/MyLoadRoleName' JOB CREATE my_copy_job_name AUTO ON;

È necessario definire un processo COPY JOB una sola volta, in quanto gli stessi parametri verranno utilizzati per le esecuzioni future.

Per definire e gestire un processo COPY JOB, devi disporre dell’autorizzazione. Per informazioni sulla concessione e sulla revoca dell’autorizzazione per un processo COPY JOB, consulta GRANT e REVOKE. Per ulteriori informazioni sulla concessione e sulla revoca delle autorizzazioni con ambito per un processo COPY JOB, consulta Assegnazione delle autorizzazioni con ambito e Revoca delle autorizzazioni con ambito.

È possibile gestire le operazioni di caricamento utilizzando le opzioni CREATE, LIST, SHOW, DROP, ALTER e RUN relative ai processi. Per ulteriori informazioni, consulta COPY JOB.

È possibile eseguire query sulle viste di sistema per vedere lo stato e l'avanzamento del processo COPY JOB. Le viste disponibili sono le seguenti:

Per ulteriori informazioni sulla correzione degli errori relativi all’integrazione di eventi S3, consulta Risoluzione dei problemi di integrazione degli eventi S3 e degli errori del processo COPY JOB.

Per ottenere l’elenco dei file caricati da un processo COPY JOB, esegui il comando SQL seguente, ma prima sostituisci <job_id>:

SELECT job_id, job_name, data_source, copy_query, filename, status, curtime FROM sys_copy_job copyjob JOIN stl_load_commits loadcommit ON copyjob.job_id = loadcommit.copy_job_id WHERE job_id = <job_id>;

Considerazioni sulla creazione dell’integrazione di eventi S3 per la copia automatica

Considera quanto segue quando utilizzi la copia automatica.

  • Puoi creare un massimo di 200 processi COPY JOB per ogni cluster o gruppo di lavoro in un Account AWS.

  • Puoi creare un massimo di 50 integrazioni di eventi S3 per ogni destinazione Amazon Redshift.

  • Non puoi creare un’integrazione di eventi S3 con un bucket Amazon S3 di origine che ha un punto (.) nel nome del bucket.

  • Puoi creare solo un’integrazione di eventi S3 tra la stessa origine e la stessa destinazione. In altre parole può esserci una sola integrazione di eventi S3 tra un bucket Amazon S3 e un data warehouse Amazon Redshift alla volta.

  • Non puoi avere notifiche di eventi esistenti per il tipo di evento S3_OBJECT_CREATED definito nel bucket Amazon S3 di origine. Tuttavia, dopo avere creato un’integrazione di eventi S3, puoi aggiornare la notifica degli eventi del bucket Amazon S3 con un prefisso/suffisso con un ambito più ristretto. In questo modo puoi anche configurare S3_OBJECT_CREATED per un altro prefisso/suffisso per altre destinazioni ed evitare un conflitto con l’integrazione di eventi S3. Se riscontri problemi causati dall’esecuzione imprevista dalla copia automatica, prepara il log AWS CloudTrail dell’azione s3:PutBucketNotificationConfiguration sul bucket S3 per l’intervallo di tempo in questione quando contatti Supporto AWS.

Regioni supportate

Di seguito sono elencate le Regioni disponibili per la copia automatica.

Regione Copia automatica
Africa (Città del Capo) Disponibilità
Asia Pacifico (Hong Kong) Disponibilità
Asia Pacifico (Taipei) Disponibilità
Asia Pacifico (Tokyo) Disponibilità
Asia Pacifico (Seul) Disponibilità
Asia Pacifico (Osaka-Locale) Disponibilità
Asia Pacifico (Mumbai) Disponibilità
Asia Pacifico (Hyderabad) Disponibilità
Asia Pacifico (Singapore) Disponibilità
Asia Pacifico (Sydney) Disponibilità
Asia Pacifico (Giacarta) Disponibilità
Asia Pacifico (Melbourne) Disponibilità
Asia Pacifico (Malesia) Disponibilità
Asia Pacifico (Nuova Zelanda) Non disponibile
Asia Pacifico (Thailandia) Disponibilità
Canada (Centrale) Disponibilità
Canada occidentale (Calgary) Disponibilità
Cina (Pechino) Disponibilità
Cina (Ningxia) Disponibilità
Europa (Francoforte) Disponibilità
Europa (Zurigo) Disponibilità
Europa (Stoccolma) Disponibilità
Europa (Milano) Disponibilità
Europa (Spagna) Disponibilità
Europa (Irlanda) Disponibilità
Europa (Londra) Disponibilità
Europa (Parigi) Disponibilità
Israele (Tel Aviv) Disponibilità
Medio Oriente (Emirati Arabi Uniti) Disponibilità
Medio Oriente (Bahrein) Disponibilità
Messico (centrale) Disponibilità
Sud America (San Paolo) Disponibilità
Stati Uniti orientali (Virginia settentrionale) Disponibilità
Stati Uniti orientali (Ohio) Disponibilità
Stati Uniti occidentali (California settentrionale) Disponibilità
Stati Uniti occidentali (Oregon) Disponibilità
AWS GovCloud (Stati Uniti-Est) Disponibilità
AWS GovCloud (Stati Uniti occidentali) Disponibilità