{"id":1966,"date":"2020-11-26T16:51:14","date_gmt":"2020-11-26T15:51:14","guid":{"rendered":"https:\/\/blog.besharp.it\/?p=1966"},"modified":"2021-03-17T15:30:58","modified_gmt":"2021-03-17T14:30:58","slug":"etl-orchestration-su-aws-con-aws-step-functions","status":"publish","type":"post","link":"https:\/\/blog.besharp.it\/it\/etl-orchestration-su-aws-con-aws-step-functions\/","title":{"rendered":"ETL Orchestration su AWS con AWS Step Functions"},"content":{"rendered":"\n
Negli ultimi anni data engineering, data governance e data analysis sono diventati importanti argomenti di discussione.<\/p>\n\n\n\n
La necessit\u00e0 di effettuare decisioni scaturite dall\u2019analisi dei dati, infatti, ha fatto crescere l\u2019esigenza di collezionare e analizzare dati in diversi modi ed AWS ha dimostrato un particolare interesse in questo campo, sviluppando diversi strumenti per raggiungere questi obiettivi di business.<\/p>\n\n\n\n
Prima di poter permettere a figure come i data analysts di esplorare e visualizzare i dati, \u00e8 necessario eseguire un passaggio cruciale. Questo processo \u00e8 generalmente chiamato ETL<\/strong> (extract<\/strong>, transform<\/strong>, and load<\/strong>) e, solitamente, \u00e8 molto lontano dall\u2019essere semplice da eseguire.<\/p>\n\n\n\n Chi svolge queste operazioni ha la responsabilit\u00e0 dei seguenti compiti:<\/p>\n\n\n\n Nell’introduzione abbiamo gi\u00e0 citato alcuni servizi AWS considerati importanti componenti di una infrastruttura dedicata al processo di ETL.<\/p>\n\n\n\n Oltre a quelli visti, ne esistono altri diventati lo stato dell\u2019arte nella costruzione di pipeline di ingestion di dati. <\/p>\n\n\n\n Vediamoli insieme all’inetrno di ciascuna fase del processo:<\/p>\n\n\n\n L’estrazione efficace dei dati da cui un’azienda pu\u00f2 trarre vantaggio pu\u00f2 avvenire con diversi ritmi e dimensioni. Da centinaia di ordini al secondo inviati da un e-commerce durante il black Friday, all\u2019ingestion di report di business mensili. L\u2019infrastruttura che ospita il flusso di ETL deve essere sempre pronta ad accogliere le nuove informazioni nello storage intermedio. <\/p>\n\n\n\n Alcuni servizi AWS possono aiutare ad assecondare le diverse necessit\u00e0 di business facendo convogliare tutti i dati in uno stesso posto, comunemente identificato con i bucket S3.<\/p>\n\n\n\n In base alla mole dei dati che ci si aspetta, \u00e8 possibile incaricare diversi servizi AWS per la validazione dei file: per il miglior rapporto costo\/performance in caso di event-driven e piccoli file, sceglieremo AWS Lambda. Al contrario, quando ci si aspetta che i dati da gestire possano causare il superamento dei limiti computazionali del primo, sceglieremo AWS Glue con dei batch job schedulati.<\/p>\n\n\n\n La trasformazione dei dati in ingresso nella pipeline \u00e8 generalmente un lavoro pesante ed \u00e8, pertanto, eseguito in batch. Per questa ragione, i migliori candidati sono le risorse di Glue. AWS Glue \u00e8 basato su cluster serverless in grado di scalare i worker in maniera trasparente fino a raggiungere terabyte di RAM e migliaia di core.<\/p>\n\n\n\n Per una scalabilit\u00e0 ottimale \u00e8 possibile far girare script Python o codice PySpark e Spark. Ricordiamo che i job di tipo PythonShell sono maggiormente indicati per carichi di grandezza medio-bassa perch\u00e9 non possono scalare oltre un solo worker (4 vCPU e 16 GB di RAM).<\/p>\n\n\n\n Sebbene con Spark, Glue Job, e Glue Studio sia possibile creare job di trasformazione in maniera molto meticolosa, \u00e8 possibile che il nuovo servizio AWS Glue DataBrew possa soddisfare meglio queste necessit\u00e0 grazie anche alla sua interfaccia web completa e chiara.<\/p>\n\n\n\n \u00c8 importante notare, per\u00f2, che per permettere ai Glue Job di avere accesso ai dati da un singolo punto, AWS Glue incorporer\u00e0 nella sua interfaccia il Data Catalog. Il Glue Data Catalog \u00e8 l\u2019archivio dei dati presenti nei nostri data store che \u00e8 poi usato per l\u2019ingestion. Per far s\u00ec che questo catalogo resti aggiornato, verr\u00e0 utilizzato un altro componente di AWS Glue: il Crawler. Sar\u00e0 quest’ulimo a dare la visibilit\u00e0 sui nuovi file e partizioni ai job che tenteranno di raggiungere i dati dalle sorgenti.<\/p>\n\n\n\n Dopo il processo di trasformazione, uno specifico Glue Job, o lo stesso componente utilizzato nello step precedente, pu\u00f2 salvare i dati validati, puliti e trasformati nelle destinazioni per analisi e visualizzazione attraverso, per esempio, Amazon QuickSight.<\/p>\n\n\n\n Per preservare la privacy sui dati sensibili che passano attraverso la pipeline, \u00e8 importante effettuare il set-up di misure di sicurezza come la cifratura con KMS per i dati at rest nei bucket e database e la protezione con SSL dei trasferimenti di dati in transit. In pi\u00f9, \u00e8 una buona pratica procedere con l’offuscazione delle informazioni personali salvate nel nostro dominio.<\/p>\n\n\n\n La gestione dei bit e byte che scorrono nella pipeline di ETL, non \u00e8 banale.<\/p>\n\n\n\n Per applicare una corretta governance sui dati prodotti dal processo, occorre effettuare dei controlli di qualit\u00e0 ad-hoc. \u00c8 importante, infatti, controllare eventuali inadempimenti dei requisiti di business, come la mancanza di dati necessari nel data lake causati da errori di validazione.<\/p>\n\n\n\n Con gli strumenti di AWS Glue \u00e8 possibile creare flussi e trigger per poter costruire delle pipeline di ingestion di dati. In questo caso, per\u00f2, le soluzioni possibili che si possono raggiungere sono molto limitate dalla mancanza di direttive che permettano i cicli, retries, gestione dell\u2019errore, e invocazione di altri servizi AWS al di fuori di AWS Glue.<\/p>\n\n\n\n Non tutto per\u00f2 \u00e8 perduto: in AWS uno strumento che permette l\u2019orchestrazione scrupolosa di servizi serverless esiste. Parliamo di AWS Step Functions. Questo strumento permette la gestione di logiche di retry e gestione di errori, facilitando la reazione delle nostre applicazioni distribuite in caso di comportamenti inaspettati. <\/p>\n\n\n\n Nelle sezioni seguenti, scopriremo e utilizzeremo le Step Functions per l\u2019orchestrazione di un caso realistico di ETL.<\/p>\n\n\n\n Cominciamo!<\/p>\n\n\n\n AWS Step Functions permette la costruzione di macchine a stati finiti altamente scalabili che, nel caso della configurazione express, pu\u00f2 gestire fino ad un centinaio di migliaia di cambi di stato al secondo.<\/p>\n\n\n\n Un workflow costruito con questo servizio \u00e8 principalmente composto da:<\/p>\n\n\n\n
Data la potenziale diversit\u00e0 delle sorgenti, una validazione dei dati che arrivano nel nostro dominio \u00e8 necessaria. In questo modo si eviter\u00e0 di introdurre informazioni con formati o schemi disomogenei.<\/li><\/figure><\/div>\n\n\n\n
ETL su AWS<\/h2>\n\n\n\n
L’estrazione dei dati<\/h3>\n\n\n\n
La trasformazione <\/h3>\n\n\n\n
Il caricamento nelle destinazioni<\/h3>\n\n\n\n
<\/figure><\/div>\n\n\n\n
Orchestrazione del processo di ETL su AWS<\/h2>\n\n\n\n
<\/figure><\/div>\n\n\n\n
AWS Step Functions<\/h3>\n\n\n\n