{"id":2962,"date":"2021-04-02T11:31:44","date_gmt":"2021-04-02T09:31:44","guid":{"rendered":"https:\/\/blog.besharp.it\/?p=2962"},"modified":"2021-04-02T11:31:34","modified_gmt":"2021-04-02T09:31:34","slug":"orchestrare-pipeline-etl-su-aws-con-aws-glue-aws-stepfunctions-e-aws-cloudformation","status":"publish","type":"post","link":"https:\/\/blog.besharp.it\/it\/orchestrare-pipeline-etl-su-aws-con-aws-glue-aws-stepfunctions-e-aws-cloudformation\/","title":{"rendered":"Orchestrare pipeline ETL su AWS con AWS Glue, AWS StepFunctions e AWS Cloudformation"},"content":{"rendered":"\n
L’analisi dei Big Data sta diventando sempre pi\u00f9 importante per delineare le principali scelte di business in aziende di tutte le dimensioni. Tuttavia, raccogliere, aggregare, unire e analizzare (validare) enormi quantit\u00e0 di dati archiviati in diversi datastore con una struttura eterogenea (ad esempio database, CRM, testo non strutturato, ecc.) \u00e8 spesso un compito arduo e richiede molto tempo.<\/p>\n\n\n\n
Il cloud computing viene spesso in soccorso fornendo soluzioni di storage, computing e data lake economici e scalabili e, in particolare, AWS si pone come leader di settore grazie al servizio Glue \/ S3, molto versatile e che consente agli utenti di importare trasformazioni e normalizzare set di dati di tutte le dimensioni. Inoltre, Glue Catalog e Athena consentono agli utenti di eseguire facilmente query SQL basate su Presto su dati normalizzati presenti nei data lake S3, i cui risultati possono essere facilmente archiviati e analizzati mediante strumenti di business intelligence come QuickSight.<\/p>\n\n\n\n
Nonostante i grandi vantaggi offerti da Glue e S3, la creazione e il mantenimento di complessi flussi ETL multistadio di Glue \u00e8 spesso un’attivit\u00e0 che richiede molto tempo: i job di Glue sono, per loro natura, disaccoppiati e il loro codice \u00e8 memorizzato su S3. Ci\u00f2 rende molto difficile integrare diversi lavori e svilupparli in un progetto software ben strutturato e coeso.<\/p>\n\n\n\n
Un piccolo aiuto ci viene fornito dai Glue workflows: utilizzando queste pipeline integrate di Glue, \u00e8 possibile eseguire automaticamente diversi workflows e \/ o crawler in un determinato ordine. Tuttavia, a questo strumento, seppur molto utile, mancano diverse funzionalit\u00e0 molto comuni a molti strumenti di controllo del flusso, come diramazioni condizionali (if-else), loop, mappe dinamiche e step personalizzati.<\/p>\n\n\n\n
Un’alternativa migliore \u00e8 fornita da AWS StepFunctions. StepFunctions \u00e8 uno strumento di orchestrazione AWS molto potente e versatile in grado di gestire la maggior parte dei servizi AWS, direttamente o tramite integrazioni con funzioni lambda.<\/p>\n\n\n\n
Nelle sezioni seguenti spiegheremo come funzionano le StepFunctions e come integrare e sviluppare sia l’infrastruttura che il codice per Glue Jobs.<\/p>\n\n\n\n
Proviamo ad elaborare un job ETL molto semplice, ma allo stesso tempo realistico, per l’importazione e la trasformazione di dati, in modo da spiegare perch\u00e9 un servizio di orchestrazione in generale e, in particolare su AWS, StepFunctions, rappresenta una componente essenziale nella toolbox di un data engineer. Ecco i componenti logici per il nostro flusso di lavoro ETL di esempio:<\/p>\n\n\n\n
Questi quattro passaggi descrivono un caso d’uso relativamente semplice ma molto comune. Ora proviamo a redigere un elenco di passaggi che dobbiamo eseguire in AWS Glue per completare il flusso di lavoro descritto finora:<\/p>\n\n\n\n
Tutti questi passaggi devono essere eseguiti nell’ordine indicato e, in caso di problemi, sarebbe bello essere avvisati e avere un modo semplice per capire cos’\u00e8 andato storto.\n<\/p>\n\n\n\n
Senza utilizzare AWS StepFunctions, la gestione manuale di questi passaggi sarebbe estremamente difficoltosa e probabilmente avremmo bisogno di uno strumento di orchestrazione esterno o di creare uno script di orchestrazione personalizzato da eseguire su un\u2019istanza EC2 o su un container Fargate.<\/p>\n\n\n\n
Ma perch\u00e9 preoccuparsi? AWS StepFunctions fa tutto questo per noi, ed essendo in grado di interagire direttamente con molti servizi AWS, molte integrazioni sono un gioco da ragazzi: ad esempio, con poche righe di linguaggio Stepfunctions, possiamo catturare tutti gli errori in una pipe e inoltrarli a un topic SNS per ricevere un’e-mail in caso di errore (o una notifica slack, SMS o qualsiasi altra alternativa si preferisca)<\/p>\n\n\n\n
La gestione di flussi complessi diventa cos\u00ec sicura e relativamente facile. Ecco un esempio:<\/p>\n\n\n\n