Orchestra una pipeline ETL con convalida, trasformazione e partizionamento utilizzando AWS Step Functions - Prontuario AWS

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Orchestra una pipeline ETL con convalida, trasformazione e partizionamento utilizzando AWS Step Functions

Sandip Gangapadhyay, Amazon Web Services

Riepilogo

Questo modello descrive come creare una pipeline di estrazione, trasformazione e caricamento (ETL) senza server per convalidare, trasformare, comprimere e partizionare un set di dati CSV di grandi dimensioni per l'ottimizzazione delle prestazioni e dei costi. La pipeline è orchestrata AWS Step Functions e include funzionalità di gestione degli errori, tentativi automatici e notifica agli utenti.

Quando un file CSV viene caricato in una cartella sorgente del bucket Amazon Simple Storage Service (Amazon S3), la pipeline ETL inizia a funzionare. La pipeline convalida il contenuto e lo schema del file CSV di origine, trasforma il file CSV in un formato Apache Parquet compresso, partiziona il set di dati per anno, mese e giorno e lo archivia in una cartella separata per l'elaborazione degli strumenti di analisi.

Il codice che automatizza questo pattern è disponibile su, nella pipeline ETL con repository. GitHub AWS Step Functions

Prerequisiti e limitazioni

Prerequisiti

  • Account AWS Un attivo.

  • AWS Command Line Interface (AWS CLI) installato e configurato con il tuo Account AWS, in modo da poter creare AWS risorse distribuendo uno AWS CloudFormation stack. Si consiglia di utilizzare la AWS CLI versione 2. Per istruzioni, consulta Installazione o aggiornamento alla versione più recente di AWS CLI nella AWS CLI documentazione. Per le istruzioni di configurazione, consulta Configurazione e impostazioni dei file di credenziali nella AWS CLI documentazione.

  • Un bucket Amazon S3.

  • Un set di dati CSV con lo schema corretto. (L'archivio di codice incluso in questo modello fornisce un file CSV di esempio con lo schema e il tipo di dati corretti che è possibile utilizzare.)

  • Un browser Web che supporta il. AWS Management Console(Vedi l'elenco dei browser supportati).

  • AWS Glue accesso alla console.

  • AWS Step Functions accesso alla console.

Limitazioni

  • In AWS Step Functions, il limite massimo per la conservazione dei registri cronologici è di 90 giorni. Per ulteriori informazioni, consulta le quote del servizio Step Functions nella AWS Step Functions documentazione.

Versioni del prodotto

  • Python 3.13 per AWS Lambda

  • AWS Glue versione 4.0

Architettura

Processo ETL dal bucket di origine S3 tramite Step Functions, AWS Glue e Amazon SNS in 10 passaggi.

Il flusso di lavoro illustrato nel diagramma è costituito da questi passaggi di alto livello:

  1. L'utente carica un file CSV nella cartella di origine in Amazon S3.

  2. Un evento di notifica di Amazon S3 avvia una AWS Lambda funzione che avvia la AWS Step Functions macchina a stati.

  3. La funzione Lambda convalida lo schema e il tipo di dati del file CSV non elaborato.

  4. A seconda dei risultati della convalida:

    1. Se la convalida del file sorgente ha esito positivo, il file viene spostato nella cartella dello stage per un'ulteriore elaborazione.

    2. Se la convalida fallisce, il file viene spostato nella cartella degli errori e viene inviata una notifica di errore tramite Amazon Simple Notification Service (Amazon SNS).

  5. Un AWS Glue crawler crea lo schema del file raw dalla cartella stage in Amazon S3.

  6. Un AWS Glue job trasforma, comprime e partiziona il file raw in formato Parquet.

  7. Il AWS Glue processo sposta inoltre il file nella cartella Transform in Amazon S3.

  8. Il AWS Glue crawler crea lo schema dal file trasformato. Lo schema risultante può essere utilizzato da qualsiasi processo di analisi. Puoi anche utilizzare Amazon Athena per eseguire query ad hoc.

  9. Se la pipeline viene completata senza errori, il file dello schema viene spostato nella cartella di archivio. Se vengono rilevati errori, il file viene invece spostato nella cartella degli errori.

  10. Amazon SNS invia una notifica che indica l'esito positivo o negativo in base allo stato di completamento della pipeline.

Tutte le AWS risorse utilizzate in questo modello sono serverless. Non ci sono server da gestire.

Strumenti

Servizi AWS

  • AWS Glue— AWS Glue è un servizio ETL completamente gestito che semplifica la preparazione e il caricamento dei dati per l'analisi da parte dei clienti.

  • AWS Step Functions— AWS Step Functions è un servizio di orchestrazione senza server che consente di combinare AWS Lambda funzioni e altro Servizi AWS per creare applicazioni aziendali critiche. Attraverso la console AWS Step Functions grafica, puoi vedere il flusso di lavoro dell'applicazione come una serie di passaggi guidati dagli eventi.

  • Amazon S3 — Amazon Simple Storage Service (Amazon S3) è un servizio di storage di oggetti che offre scalabilità, disponibilità dei dati, sicurezza e prestazioni leader del settore.

  • Amazon SNS — Amazon Simple Notification Service (Amazon SNS) è un servizio di messaggistica ad alta disponibilità, durevole, sicuro e completamente pub/sub gestito che consente di disaccoppiare microservizi, sistemi distribuiti e applicazioni serverless.

  • AWS Lambda— AWS Lambda è un servizio di elaborazione che consente di eseguire codice senza fornire o gestire server. AWS Lambda esegue il codice solo quando necessario e ridimensiona automaticamente, da poche richieste al giorno a migliaia al secondo.

Codice

Il codice per questo pattern è disponibile su GitHub, nella pipeline ETL con repository. AWS Step Functions L'archivio del codice contiene i seguenti file e cartelle:

  • template.yml— AWS CloudFormation modello per creare la pipeline ETL con. AWS Step Functions

  • parameter.json— Contiene tutti i parametri e i valori dei parametri. Aggiorna questo file per modificare i valori dei parametri, come descritto nella sezione Epics.

  • myLayer/pythonfolder — Contiene i pacchetti Python necessari per creare il AWS Lambda layer richiesto per questo progetto.

  • lambdafolder — Contiene le seguenti funzioni Lambda:

    • move_file.py— Sposta il set di dati di origine nella cartella di archiviazione, trasformazione o errore.

    • check_crawler.py— Controlla lo stato del AWS Glue crawler tante volte quante configurate dalla variabile di RETRYLIMIT  ambiente prima di inviare un messaggio di errore.

    • start_crawler.py— Avvia il crawler. AWS Glue

    • start_step_function.py— Inizia. AWS Step Functions

    • start_codebuild.py— Avvia il AWS CodeBuild progetto.

    • validation.py— Convalida il set di dati grezzi di input.

    • s3object.py— Crea la struttura di directory richiesta all'interno del bucket Amazon S3.

    • notification.py— Invia notifiche di successo o di errore alla fine della pipeline.

Per utilizzare il codice di esempio, segui le istruzioni nella sezione Epics.

Epiche

AttivitàDescrizioneCompetenze richieste

Clona il repository di codice di esempio.

  1. Apri la pipeline ETL con il repository. AWS Step Functions

  2. Scegliete Code nella pagina principale del repository, sopra l'elenco dei file, e copiate l'URL elencato in Clona con HTTPS.

  3. Cambia la tua directory di lavoro nella posizione in cui desideri archiviare i file di esempio.

  4. In un terminale o nel prompt dei comandi, digitate il comando:

    git clone <repoURL>

    dove <repoURL> si riferisce all'URL copiato nel passaggio 2.

Developer

Aggiorna i valori dei parametri.

Nella copia locale del repository, modificate il parameter.json file e aggiornate i valori dei parametri predefiniti come segue:

  • pS3BucketName─ Il nome del bucket Amazon S3 per l'archiviazione dei set di dati. Il modello creerà questo bucket per te. Il nome bucket deve essere univoco a livello globale.

  • pSourceFolder─ Il nome della cartella all'interno del bucket Amazon S3 che verrà utilizzata per caricare il file CSV di origine.

  • pStageFolder─ Il nome della cartella all'interno del bucket Amazon S3 che verrà utilizzata come area di gestione temporanea durante il processo.

  • pTransformFolder─ Il nome della cartella all'interno del bucket Amazon S3 che verrà utilizzata per archiviare set di dati trasformati e partizionati.

  • pErrorFolder─ La cartella all'interno del bucket Amazon S3 in cui verrà spostato il file CSV di origine se non può essere convalidato.

  • pArchiveFolder ─ Il nome della cartella all'interno del bucket Amazon S3 che verrà utilizzata per archiviare il file CSV di origine.

  • pEmailforNotification─ Un indirizzo e-mail valido per ricevere notifiche. success/error

  • pPrefix─ Una stringa di prefisso che verrà utilizzata nel nome del AWS Glue crawler.

  • pDatasetSchema─ Lo schema del set di dati rispetto al quale verrà convalidato il file sorgente. Il pacchetto Cerberus Python viene utilizzato per la convalida del set di dati sorgente. Per ulteriori informazioni, consulta il sito Web di Cerberus.

Developer

Carica il codice sorgente nel bucket Amazon S3.

Prima di distribuire il AWS CloudFormation modello che automatizza la pipeline ETL, devi impacchettare i file di origine per il modello e caricarli in un bucket Amazon S3. Per fare ciò, esegui il seguente comando con il tuo profilo preconfigurato: AWS CLI

aws cloudformation package --template-file template.yml --s3-bucket <bucket_name> --output-template-file packaged.template --profile <profile_name>

dove:

  • <bucket_name>è il nome di un bucket Amazon S3 esistente in Regione AWS cui desideri distribuire lo stack. Questo bucket viene utilizzato per archiviare il pacchetto di codice sorgente per il modello. CloudFormation

  • <profile_name>è un AWS CLI profilo valido che hai preconfigurato al momento della configurazione. AWS CLI

Developer
AttivitàDescrizioneCompetenze richieste

Implementa il CloudFormation modello.

Per distribuire il AWS CloudFormation modello, esegui il comando seguente: AWS CLI

aws cloudformation deploy --stack-name <stack_name> --template-file packaged.template --parameter-overrides file://parameter.json --capabilities CAPABILITY_IAM --profile <profile_name>

dove:

  • <stack_name>è un identificatore univoco per lo CloudFormation stack.

  • <profile-name>è il tuo profilo preconfigurato AWS CLI .

Developer

Controlla lo stato di avanzamento.

Sulla AWS CloudFormation console, controlla lo stato di avanzamento dello sviluppo dello stack. Quando lo stato èCREATE_COMPLETE, lo stack è stato distribuito correttamente.

Developer

Annota il nome del AWS Glue database.

La scheda Output per lo stack mostra il nome del AWS Glue database. Il nome chiave è. GlueDBOutput

Developer
AttivitàDescrizioneCompetenze richieste

Avvia la pipeline ETL.

  1. Accedi alla cartella di origine (sourceo al nome della cartella che hai impostato nel parameter.json file) all'interno del bucket Amazon S3.

  2. Carica un file CSV di esempio in questa cartella. (L'archivio del codice fornisce un file di esempio chiamato Sample_Bank_Transaction_Raw_Dataset.csv che puoi usare.) Il caricamento del file avvierà la pipeline ETL tramite Step Functions.

  3. Nella console Step Functions, controlla lo stato della pipeline ETL.

Developer

Controlla il set di dati partizionato.

Al termine della pipeline ETL, verifica che il set di dati partizionato sia disponibile nella cartella di trasformazione di Amazon S3 (o nel nome della cartella che hai transform impostato nel file). parameter.json

Developer

Controlla il database partizionato. AWS Glue

  1. Sulla AWS Glue console, seleziona il AWS Glue database creato dallo stack (questo è il database che hai annotato nell'epopea precedente).

  2. Verifica che la tabella partizionata sia disponibile in. AWS Glue Data Catalog

Developer

Esegui interrogazioni.

(Facoltativo) Usa Amazon Athena per eseguire query ad hoc sul database partizionato e trasformato. Per istruzioni, consulta Esegui query SQL in Amazon Athena nella AWS documentazione.

Analista di database

Risoluzione dei problemi

ProblemaSoluzione

AWS Identity and Access Management autorizzazioni (IAM) per il AWS Glue job e il crawler

Se personalizzi ulteriormente il AWS Glue job o il crawler, assicurati di concedere le autorizzazioni IAM appropriate nel ruolo IAM utilizzato dal AWS Glue job o di fornire le autorizzazioni relative ai dati a. AWS Lake Formation Per ulteriori informazioni, consulta la documentazione relativa ad AWS.

Risorse correlate

Servizio AWS documentazione

Informazioni aggiuntive

Il diagramma seguente mostra il AWS Step Functions flusso di lavoro per una pipeline ETL di successo, dal pannello AWS Step Functions Inspector.

Flusso di lavoro Step Functions per la convalida dell'input .csv, la scansione dei dati e l'esecuzione del job AWS Glue.

Il diagramma seguente mostra il AWS Step Functions flusso di lavoro per una pipeline ETL che fallisce a causa di un errore di convalida dell'input, dal pannello Step Functions Inspector.

Flusso di lavoro Step Functions con errore, quindi il file viene spostato nella cartella degli errori.