{"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
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 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 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 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 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 Analizziamo brevemente la terza opzione, potenzialmente limitata, ma molto interessante e non ancora coperta dai nostri blog post precedenti<\/p>\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 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 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 L’utilizzo di questi elementi per centralizzare le policy di accesso ai dati \u00e8 semplice: prima blocchiamo qualsiasi accesso diretto ai bucket richiesti su S3, in modo che Lake Formation gestisca tutti gli accessi ai dati.<\/p>\n\n\n\n Successivamente, configuriamo la protezione dei dati e le policy di accesso<\/strong> affinch\u00e9 vengano applicate a tutti i servizi AWS che accedono ai dati nel data lake. Sfruttando le autorizzazioni per metadati e oggetti, possiamo configurare utenti e ruoli per accedere solo a dati specifici fino a livello di tabella e\/o colonna.<\/p>\n\n\n\n Prima di assegnare policy a utenti e risorse, Lake Formation necessita di alcune \u201cpersonas\u201d, obbligatorie per funzionare correttamente, e queste sono anche necessarie per garantire la compatibilit\u00e0 con le versioni precedenti delle autorizzazioni gestite da IAM, create in precedenza per S3, AWS Glue, Athena e altri servizi:<\/p>\n\n\n\n IAM administrator<\/strong><\/p>\n\n\n\n Utente che pu\u00f2 creare altri utenti e ruoli IAM. Dispone della policy gestita da AWS \u201cAdministratorAccess\u201d. Pu\u00f2 anche essere designato come amministratore del data lake.<\/p>\n\n\n\n Data lake administrator<\/strong><\/p>\n\n\n\n Utente che pu\u00f2 registrare location su Amazon S3, accedere al catalogo dei dati, creare database, creare ed eseguire flussi di lavoro, concedere autorizzazioni a Lake Formation ad altri utenti e visualizzare i log di AWS CloudTrail.<\/p>\n\n\n\n Workflow role<\/strong><\/p>\n\n\n\n Ruolo che esegue un flusso di lavoro per conto di un utente. Si specifica questo ruolo quando un flusso di lavoro viene creato a partire da un progetto.<\/p>\n\n\n\n Le prime due \u201cpersonas\u201d sono anche definite IAMAllowedPrincipals<\/strong> e hanno attive le autorizzazioni “Super” e “Use only IAM access control” di default, garantendo cos\u00ec la retrocompatibilit\u00e0 con i workflow Glue preesistenti, S3 e Athena.<\/p>\n\n\n\n Le autorizzazioni fine-grained sono organizzate in modo tale da permettere a Lake formation di sostituire le autorizzazioni IAM di tipo coarse. Questo al fine di garantire transizioni pi\u00f9 fluide dal vecchio set di autorizzazioni a quello gestito interamente da Lake Formation.<\/p>\n\n\n\n Un semplice schema illustra le scelte possibili:<\/p>\n\n\n\n Per vedere tutte le tipologie di permessi disponibili su Lake Formation, potete dare una lettura alla documentazione<\/a> ufficiale di AWS.<\/p>\n\n\n\n Lake Formation attualmente supporta anche la Server-Side-Encryption su S3, nonch\u00e9 gli endpoint privati \u200b\u200bper le VPC.<\/p>\n\n\n\n Registra inoltre tutte le attivit\u00e0 in AWS CloudTrail (che pu\u00f2 anche essere un set di dati supportato), dando un ottimo contributo all\u2019isolamento della rete e alla sua verificabilit\u00e0.<\/p>\n\n\n\n I permessi di Lake Formation si applicano solo nella Regione in cui sono stati concessi<\/strong>.Per compatibilit\u00e0 con workflow precedenti, Lake Formation passa attraverso le autorizzazioni IAM anche per le nuove risorse<\/strong>, a meno di non specificare un comportamento diverso<\/strong>.<\/p>\n\n\n\n Ci\u00f2 che aiuta davvero a mantenere il controllo sul proprio data lake \u00e8 che con Lake Formation, abbiamo finalmente una dashboard centralizzata per controllare le location su S3, i job ETL, i crawler, i cataloghi di GLue e ovviamente le autorizzazioni.<\/p>\n\n\n\n Un’altra caratteristica interessante \u00e8 che Lake Formation viene fornito con Cloud Trail abilitato, quindi ogni azione eseguita dagli utenti o dai servizi, tramite i ruoli IAM, viene controllata e registrata direttamente nella dashboard.<\/p>\n\n\n\n Un’altra questione che dobbiamo gestire quando abbiamo a che fare con i data lake \u00e8 la deduplicazione e la pulizia dei dati, che, se ignorate, portano a dati incoerenti, inefficienti e spesso inaccessibili.<\/p>\n\n\n\n Incapsulando le funzionalit\u00e0 di AWS Glue, Lake Formation offre FindMatches ML Transform<\/strong>: un Glue Job utilizzato per rimuovere i dati duplicati sfruttando gli algoritmi di Machine Learning. \u00c8 possibile selezionare una soglia per la Accuracy, per indicare la quantit\u00e0 di precisione che l’algoritmo deve utilizzare per identificare dati potenzialmente duplicati (pi\u00f9 precisione, pi\u00f9 costi).<\/p>\n\n\n\n Per saperne di pi\u00f9, vi invitiamo a seguire questo tutorial su AWS<\/a>.<\/p>\n\n\n\n Transazioni – inserire, eliminare e modificare righe contemporaneamente<\/strong><\/p>\n\n\n\n Per gestire l’evoluzione dei dati nel tempo \u00e8 fondamentale definire procedure in grado di mantenere il data lake sempre aggiornato. Questo \u00e8 fondamentale in quanto l’accesso ai dati deve essere concesso a diversi utenti in qualsiasi momento e dobbiamo anche garantire l’integrit\u00e0 dei dati stessi. I dati sono anche spesso organizzati in modi strutturati e non strutturati contemporaneamente.<\/p>\n\n\n\n L’implementazione degli aggiornamenti in tempo reale \u00e8 complessa e difficile da scalare. AWS Lake Formation introduce, in anteprima, nuove API che supportano le transazioni ACID utilizzando un nuovo tipo di tabella di data lake, chiamata Governed table.<\/p>\n\n\n\n Consente a pi\u00f9 utenti di inserire, eliminare e modificare contemporaneamente righe tra tabelle, consentendo comunque ad altri utenti di eseguire query e modelli di machine learning sugli stessi set di dati, con la certezza che i dati siano sempre effettivi.<\/p>\n\n\n\n Sicurezza a livello di riga<\/strong><\/p>\n\n\n\n Assicurarsi che gli utenti abbiano accesso solo ai dati corretti in un data lake \u00e8 difficile. Gli amministratori di data lake spesso, mantengono pi\u00f9 copie dei dati per applicare criteri di sicurezza diversi per utenti diversi. Ci\u00f2 aggiunge complessit\u00e0, sovraccarico operativo e costi di archiviazione aggiuntivi.<\/p>\n\n\n\n AWS Lake Formation consente gi\u00e0 di impostare policy di accesso per nascondere i dati, anche per colonna, ad esempio i numeri di previdenza sociale.<\/p>\n\n\n\n Con la sicurezza a livello di riga, possiamo concedere autorizzazioni speciali per riga a utenti e ruoli, ovvero l’accesso a dati regionali specifici o dati relativi a un conto bancario specifico.<\/p>\n\n\n\n Accelerazione<\/strong><\/p>\n\n\n\n Migliori prestazioni con filtri, aggregazioni e compattazione automatica dei file, grazie a un nuovo ottimizzatore di archiviazione che combina automaticamente file piccoli in file pi\u00f9 grandi per velocizzare le query fino a 7 volte. Il processo viene eseguito in background, senza alcun impatto sulle prestazioni sui carichi di lavoro di produzione.<\/p>\n\n\n\n https:\/\/pages.awscloud.com\/Lake_Formation_Feature_Preview.html<\/a><\/p>\n\n\n\n https:\/\/aws.amazon.com\/lake-formation\/faqs\/<\/a><\/p>\n\n\n\n https:\/\/docs.aws.amazon.com\/lake-formation\/latest\/dg\/access-control-overview.html<\/a><\/p>\n\n\n\nSetup base di Lake Formation<\/h2>\n\n\n\n
Sicurezza migliorata<\/h2>\n\n\n\n
Come funzionano i permessi<\/h2>\n\n\n\n
Governance migliorata<\/h2>\n\n\n\n
Feature in Preview<\/h2>\n\n\n\n
Referenze<\/h2>\n\n\n\n