Orchestra una ETL pipeline con convalida, trasformazione e partizionamento utilizzando Step Functions AWS - 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 ETL pipeline con convalida, trasformazione e partizionamento utilizzando Step Functions AWS

Creato da Sandip Gangapadhyay () AWS

Archivio di codice: aws-step-functions-etl-pipeline-pattern

Ambiente: produzione

Tecnologie: analisi; Big data; Data lake DevOps; Serverless

AWSservizi: Amazon Athena; AWS Glue; AWS Lambda; Step Functions AWS

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 di grandi dimensioni CSV per l'ottimizzazione delle prestazioni e dei costi. La pipeline è orchestrata da AWS Step Functions e include funzionalità di gestione degli errori, tentativi automatici e notifiche agli utenti.

Quando un CSV file viene caricato in una cartella sorgente del bucket Amazon Simple Storage Service (Amazon S3), ETL la pipeline inizia a funzionare. La pipeline convalida il contenuto e lo schema del CSV file sorgente, trasforma il CSV file 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 nel repository GitHub ETLPipeline with AWS Step Functions.

Prerequisiti e limitazioni

Prerequisiti

  • Un account AWS attivo.

  • AWSCommand Line Interface (AWSCLI) è stata installata e configurata con il tuo AWS account, in modo da poter creare AWS risorse distribuendo uno stack. AWS CloudFormation AWSCLIè consigliata la versione 2. Per le istruzioni di installazione, consulta Installazione, aggiornamento e disinstallazione della AWS CLI versione 2 nella AWS CLI documentazione. Per le istruzioni AWS CLI di configurazione, consulta Impostazioni dei file di configurazione e credenziali nella AWS CLI documentazione.

  • Un bucket Amazon S3.

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

  • Un browser Web supportato per l'utilizzo con la console di AWS gestione. (Vedi l'elenco dei browser supportati).

  • AWSAccesso alla console Glue.

  • AWSAccesso alla console Step Functions.

Limitazioni

  • In AWS Step Functions, il limite massimo per la conservazione dei registri cronologici è di 90 giorni. Per ulteriori informazioni, consulta Quotas and Quotas for standard workflows nella documentazione di AWS Step Functions.

Versioni del prodotto

  • Python 3.11 per Lambda AWS

  • AWSGlue versione 2.0

Architettura

ETLprocesso dal bucket sorgente S3 tramite Step Functions, AWS Glue e Amazon SNS in 10 passaggi.

Il flusso di lavoro illustrato nel diagramma è costituito dai seguenti passaggi di alto livello:

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

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

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

  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 (AmazonSNS).

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

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

  7. Il job AWS Glue sposta inoltre il file nella cartella di trasformazione in Amazon S3.

  8. Il crawler AWS Glue 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

AWSservizi

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

  • AWSStep Functions — AWS Step Functions è un servizio di orchestrazione senza server che consente di combinare funzioni AWS Lambda e altri AWS servizi per creare applicazioni aziendali critiche. Attraverso la console grafica AWS Step Functions, 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 (AmazonSNS) è un servizio di messaggistica pub/sub ad alta disponibilità, durevole, sicuro e completamente gestito che consente di disaccoppiare microservizi, sistemi distribuiti e applicazioni serverless.

  • AWSLambda: AWS Lambda è un servizio di elaborazione che consente di eseguire codice senza effettuare il provisioning o la gestione di server. AWSLambda esegue il codice solo quando necessario e si ridimensiona automaticamente, da poche richieste al giorno a migliaia al secondo.

Codice

Il codice per questo pattern è disponibile nel repository ETLPipeline with AWS Step Functions. GitHub L'archivio del codice contiene i seguenti file e cartelle:

  • template.yml— AWS CloudFormation modello per creare la ETL pipeline 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 layer AWS Lambda 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 crawler AWS Glue tante volte quante configurato dalla variabile di RETRYLIMIT  ambiente prima di inviare un messaggio di errore.

    • start_crawler.py— Avvia il AWS Glue crawler.

    • start_step_function.py— Avvia 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 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 il repository ETLPipeline with AWS Step Functions.

  2. Scegli Code nella pagina principale del repository, sopra l'elenco dei file, e copia l'URLelenco 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 a quello URL che hai 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 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 S3 che verrà utilizzata per caricare il file sorgente. CSV

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

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

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

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

  • pEmailforNotification─ Un indirizzo email valido per ricevere notifiche di successo/errore.

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

  • 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 S3.

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

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 S3 esistente nella AWS regione in cui desideri distribuire lo stack. Questo bucket viene utilizzato per memorizzare 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 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 AWSCLI.

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

Nota il nome del database AWS Glue.

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

Developer
AttivitàDescrizioneCompetenze richieste

Avvia la ETL pipeline.

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

  2. Carica un CSV file 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 ETL pipeline tramite Step Functions.

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

Developer

Controlla il set di dati partizionato.

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

Developer

Controlla il database AWS Glue partizionato.

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

  2. Verificate che la tabella partizionata sia disponibile nel AWS Glue Data Catalog.

Developer

Esegui interrogazioni.

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

Analista di database

Risoluzione dei problemi

ProblemaSoluzione

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

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

Risorse correlate

AWSdocumentazione di servizio

Informazioni aggiuntive

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

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

Il diagramma seguente mostra il flusso di lavoro AWS Step Functions per una ETL pipeline 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.