{"id":2801,"date":"2021-03-16T12:35:44","date_gmt":"2021-03-16T11:35:44","guid":{"rendered":"https:\/\/blog.besharp.it\/?p=2801"},"modified":"2021-04-08T15:30:28","modified_gmt":"2021-04-08T13:30:28","slug":"costruire-un-data-lake-su-aws-con-aws-lake-formation","status":"publish","type":"post","link":"https:\/\/blog.besharp.it\/it\/costruire-un-data-lake-su-aws-con-aws-lake-formation\/","title":{"rendered":"Costruire un Data Lake su AWS con AWS Lake Formation"},"content":{"rendered":"\n

Introduzione<\/h2>\n\n\n\n

Sfruttare i dati disponibili (Big Data) \u00e8 diventato un obiettivo di primaria importanza per tantissime aziende negli ultimi decenni. In questi anni infatti, l\u2019avvento del Cloud Computing ha democratizzato l\u2019accesso a risorse IT estremamente potenti, risultato che ha portato all\u2019eliminazione dei costi e delle difficolt\u00e0 di gestire l\u2019infrastruttura necessaria al funzionamento di un data center on-premise.<\/p>\n\n\n\n

Il Cloud Computing aiuta le aziende a utilizzare i dati in modo efficace, riducendo i costi di ingegneria grazie alla potenza e versatilit\u00e0 dei suoi servizi managed.<\/p>\n\n\n\n

Promuovendo l\u2019utilizzo di infrastrutture on-demand, rende pi\u00f9 facile ripensare, re-ingegnerizzare, e re-architettare un data lake per poter esplorare nuovi casi.<\/p>\n\n\n\n

Essendo dunque i dati l\u2019elemento determinante per le decisioni di business, gestirli in modo efficace diventa una priorit\u00e0.<\/p>\n\n\n\n

Tra i tanti modi per farlo, il concetto di data lake, ovvero un repository, scalabile, low-cost, per centralizzare i dati provenienti da fonti diversification, \u00e8 diventato uno dei pi\u00f9 apprezzati. Esso permette agli utenti di salvare i dati as-is senza un processo di strutturazione a priori, e pu\u00f2 essere utilizzato per effettuare analisi di vario tipo, ottenere insights sui dati, e guidare con pi\u00f9 efficacia le decisioni di business.<\/p>\n\n\n\n

Ma creare un data lake da zero non \u00e8 un compito facile: \u00e8 necessario eseguire diverse operazioni manuali, che rendono il processo complesso e, cosa pi\u00f9 importante, estremamente dispendioso dal punto di vista del tempo impiegato. I dati, di solito, provengono da fonti disparate e per questo, vanno monitorati con cautela.<\/p>\n\n\n\n

Inoltre, gestire una tale quantit\u00e0 di dati richiede l\u2019applicazione di diverse procedure per evitare leaks e buchi di sicurezza, il che significa mettere in atto un sistema di gestione delle policy di accesso, abilitare la cifratura dei dati sensibili e, naturalmente, gestirne le chiavi.<\/p>\n\n\n\n

Senza applicare le giuste scelte riguardo la tecnologia, l\u2019architettura, la qualit\u00e0 dei dati e la governance degli stessi, un data lake pu\u00f2 diventare velocemente un sistema caotico ed isolato, difficile da utilizzare, da mantenere, e spesso isolato.<\/p>\n\n\n\n

Per fortuna, il Cloud di AWS viene in nostro aiuto grazie ai molti servizi disegnati appositamente per gestire i data lake, in particolare AWS Glue e S3.<\/p>\n\n\n\n

Per questo articolo, assumiamo che il lettore sia gi\u00e0 familiare con i concetti di servizi AWS e che conosca le peculiarit\u00e0 dietro a AWS Glue e S3. Qualora non fosse cos\u00ec, invitiamo a leggere le nostre ultime \u201cstories\u201d su ingesting data for Machine Learning workloads<\/a> e managing complex Machine Learning projects via Step Functions<\/a>.<\/p>\n\n\n\n

Andremo ad esplorare come costruire un semplice data lake con Lake Formation. Quindi, ci concentreremo sugli aspetti di sicurezza e governance, ed esploreremo i vantaggi che questo servizio offre, rispetto al semplice utilizzo di AWS Glue.<\/p>\n\n\n\n

Partiamo!<\/p>\n\n\n\n

Setup base di Lake Formation<\/h2>\n\n\n\n

Prima di concentrarci sui vantaggi della gestione di un data lake tramite AWS Lake Formation, dobbiamo prima crearne uno in modo semplice.<\/p>\n\n\n\n

Procediamo mediante console AWS e scegliamo \u201cAWS Lake Formation\u201d nell’elenco dei servizi o tramite la barra di ricerca. Ci verr\u00e0 mostrata la seguente dashboard:<\/p>\n\n\n\n

\"AWS
Schermata di accesso a Lake Formation<\/em><\/figcaption><\/figure>\n\n\n\n

Dopo aver cliccato su “Get started”, \u200b\u200bci verr\u00e0 chiesto di impostare un amministratore per il data lake; \u00e8 possibile aggiungere utenti e ruoli AWS disponibili sull’account a cui si \u00e8 connessi. Selezionane uno adatto, preferibilmente un ruolo, assumibile con credenziali temporanee da persone e servizi, e prosegui.<\/p>\n\n\n\n

\"create
Selezionare un utente o un ruolo<\/em><\/figcaption><\/figure>\n\n\n\n

Ottenuto l’accesso alla dashboard di Lake Formation, \u00e8 il momento di aggiungere una \u201dLake Location\u201d, ovvero un percorso S3 valido da cui recuperare i dati. I dati possono essere ottenuti tramite vari sistemi, ad esempio mediante Jobs di AWS Glue<\/strong>, attraverso la combinazione di AWS Kinesis stream<\/strong> e Data Firehose<\/strong>, o semplicemente caricando i dati direttamente su S3<\/strong>.<\/p>\n\n\n\n

Esaminiamo rapidamente tutte le possibilit\u00e0 per popolare il nostro Glue Catalog<\/strong> (strumento che definisce il nostro data lake dietro le quinte).<\/p>\n\n\n\n

Innanzitutto, aggiungeremo la posizione del data lake facendo clic sul pulsante “Register location” nella sezione \u201cRegister and ingest\u201d dalla dashboard del servizio, come in figura.<\/p>\n\n\n\n

\"Choose
Aggiungiamo una nuova location per il data lake<\/em><\/figcaption><\/figure>\n\n\n\n

Ci verr\u00e0 richiesto di selezionare un bucket S3, procediamo, quindi aggiungiamo uno IAM role adatto (o permettiamo ad AWs di crearne uno), quindi completiamo la procedura con \u201cRegister location\u201d.<\/p>\n\n\n\n

Ora possiamo:<\/p>\n\n\n\n

  1. Caricare semplicemente i dati su S3 prima di iniziare un processo di crawling;<\/li>
  2. Utilizzare una combinazione di servizi AWS per fare l\u2019ingestion dei dati, come Kinesis Stream e Firehose (leggete la nostra story<\/a> per maggiori informazioni);<\/li>
  3. Utilizzare un blueprint<\/strong> di Lake Formation per ottenere velocemente dati da sorgenti di log o database di varia natura;<\/li><\/ol>\n\n\n\n

    Analizziamo brevemente la terza opzione, potenzialmente limitata, ma molto interessante e non ancora coperta dai nostri blog post precedenti<\/p>\n\n\n\n

    \"AWS
    Attivare un crawling job mediante un Blueprint<\/em><\/figcaption><\/figure>\n\n\n\n

    Clicchiamo su \u201cUse blueprint\u201d, ci verr\u00e0 presentato un form dove potremo selezionare se prelevare i dati da un database o una sorgente di log.<\/p>\n\n\n\n

    Ora ci baster\u00e0 seguire le istruzioni per generare un workload, che in pratica \u00e8 un ETL Job di Glue dove tutte le opzioni per le fasi di Extract, Transform, e Load si trovano in un unico punto.<\/p>\n\n\n\n

    Ad esempio, per un database MySQL, MSSQL o Oracle, aggiungiamo (o creiamo) una connessione AWS Glue, specificando anche il DB di origine e la tabella, secondo questo formato: <db_name> \/ <table_name><\/strong>. Aggiungiamo (o creiamo) il Catalogo Glue di destinazione, specificando un DB e una tabella, utilizziamo anche anche lo strumento fornito, per selezionare un percorso S3 adatto ad ospitare i dati del catalogo.<\/p>\n\n\n\n

    Selezioniamo un nome per il flusso di lavoro, decidiamo la frequenza del crawler, ad esempio “Run on demand” ed infine, un prefisso per la tabella, le altre opzioni possono essere lasciate come predefinite.<\/p>\n\n\n\n

    Alcune note: optare sempre per il formato parquet<\/strong> nella sezione target di S3, in quanto garantisce un solido incremento delle prestazioni sulle operazioni che verranno eventualmente eseguite sul set di dati in seguito. Inoltre, se si prevede di utilizzare Athena per interrogare il proprio catalogo, utilizzare “_” invece di “-” per i nomi di database e tabelle, poich\u00e9 quest’ultimo carattere a volte pu\u00f2 portare a problemi di compatibilit\u00e0 indesiderati.<\/p>\n\n\n\n

    Sicurezza migliorata<\/h2>\n\n\n\n

    Una volta che Lake Formation \u00e8 pronto, possiamo focalizzarci sui dettagli che lo rendono uno strumento davvero degno di nota: in primis un modello a permessi \u201claschi\u201d che va ad aumentare quello gi\u00e0 fornito da IAM.<\/p>\n\n\n\n

    Un modello centralizzato cos\u00ec definito, permette di abilitare in seguito dei permessi molto pi\u00f9 fini e granulari, mediante un  semplice sistema di grant\/revoke, cos\u00ec come mostrato in figura:<\/p>\n\n\n\n

    \"AWS
    Come una richiesta passa attraverso 2 stage di permessi prima di avere accesso alle risorse<\/em><\/figcaption><\/figure>\n\n\n\n

    Le autorizzazioni di Lake Formation vengono applicate anche a livello di tabella e di colonna e funzionano su tutto lo stack completo di servizi AWS per l’analisi e l’apprendimento automatico, inclusi, ma non limitati a, Amazon Athena, Redshift, Sagemaker e vengono direttamente mappati su oggetti S3 in modo trasparente.<\/p>\n\n\n\n

    Il controllo degli accessi in AWS Lake Formation si divide in due macro aree distinte:<\/p>\n\n\n\n