{"id":5186,"date":"2022-11-25T14:08:22","date_gmt":"2022-11-25T13:08:22","guid":{"rendered":"https:\/\/blog.besharp.it\/?p=5186"},"modified":"2022-11-24T17:06:11","modified_gmt":"2022-11-24T16:06:11","slug":"come-creare-un-data-lake-datamart-su-amazon-s3-con-pre-ingestion-flows-ed-etl","status":"publish","type":"post","link":"https:\/\/blog.besharp.it\/it\/come-creare-un-data-lake-datamart-su-amazon-s3-con-pre-ingestion-flows-ed-etl\/","title":{"rendered":"Come Creare un Data lake\/DataMart su Amazon S3 con pre-ingestion flows ed ETL"},"content":{"rendered":"\n

I Big Data hanno acquisito importanza a partire da met\u00e0 degli anni 2000 con lo sviluppo della metodologia MapReduce in Google e hanno continuato a crescere a un ritmo vertiginoso grazie allo sviluppo di strumenti sempre migliori: Apache Hadoop, Spark, Pandas sono stati tutti sviluppati in questo lasso di tempo. <\/p>\n\n\n\n

Parallelamente, sempre pi\u00f9 Cloud provider e service integrator hanno iniziato a offrire soluzioni gestite di Big Data\/Data Lake (da Cloudera ad AWS Glue) per soddisfare la crescente domanda di aziende sempre pi\u00f9 desiderose di analizzare i propri dati per trarne valore.<\/p>\n\n\n\n

Nel frattempo il termine “Big Data” ha smesso di essere una buzzword ed \u00e8 stato soppiantato in questo ruolo da parole pi\u00f9 nuove e pi\u00f9 accattivanti come Blockchain e Quantum computing, ma questo non ha diminuito la necessit\u00e0 delle aziende di sfruttare i dati per indirizzare meglio i propri clienti, ottimizzare il proprio prodotto e perfezionare i propri processi.<\/p>\n\n\n\n

In questo breve articolo descriveremo una delle soluzioni che abbiamo messo a terra per rispondere a questa necessit\u00e0. Vedremo come creare un Data Lake dinamico multi-account decentralizzato su AWS, sfruttando Glue, Athena e Redshift<\/strong>.<\/p>\n\n\n\n

Il problema<\/strong><\/h2>\n\n\n\n

Solitamente i data lake sono repository di dati non strutturati<\/strong> che raccolgono dati di input da fonti di dati eterogenee come database SQL legacy, database di documenti (ad esempio MongoDB), database di tipo chiave-valore (ad esempio Cassandra) e file raw da varie fonti (server SFTP, Samba, Object storage). <\/p>\n\n\n\n

In questo caso il nostro obiettivo \u00e8 quello di suddividere il database in modo che ogni progetto interno nella struttura aziendale del cliente possa accedere solo al proprio silo di dati segregato. Per farlo, imposteremo anche le operazioni ETL necessarie. Un numero selezionato di utenti dell’amministrazione generale sar\u00e0 in grado di accedere ai dati da diversi silos per leggerli e aggregarli per l’analisi a livello aziendale, la business intelligence e il reporting generale. <\/p>\n\n\n\n

Per soddisfare questi requisiti e garantire la massima segregazione possibile tra diversi silos, abbiamo deciso di suddividere i progetti in diversi account AWS utilizzando AWS Organizations. La struttura degli account \u00e8 rappresentata nel diagramma sottostante:<\/p>\n\n\n\n

<\/p>\n\n\n

\n
\"\"<\/figure><\/div>\n\n\n

<\/p>\n\n\n\n

Per aggiungere valore alla soluzione, un altro requisito era quello di poter creare credenziali per terze parti per inviare i dati direttamente al data lake sia con API, che con SFTP. <\/p>\n\n\n\n

Ci\u00f2 significa che ogni account conterr\u00e0 non solo il bucket S3 con i dati e i job di Glue\/Step Functions necessari per trasformarli, diversi per ogni silo, ma anche un’applicazione web di amministrazione per gestire l’accesso di terze parti tramite credenziali IAM temporanee e un frontend distribuito su Cloudfront per fornire una semplice interfaccia agli utenti per caricare i dati direttamente su S3.<\/p>\n\n\n\n

<\/p>\n\n\n

\n
\"\"<\/figure><\/div>\n\n\n

<\/p>\n\n\n\n

Se vi state chiedendo come abbiamo gestito la parte SFTP, ecco la soluzione: abbiamo attivato il servizio AWS Transfer Family per SFTP<\/a> con una Lambda personalizzata per autenticare gli utenti con le stesse credenziali IAM utilizzate per l’accesso Web app.<\/p>\n\n\n\n

Pertanto, sviluppando un’applicazione Web relativamente semplice, siamo riusciti a creare un’interfaccia completamente serverless per i nostri bucket S3 in modo che gli i membri dell’azienda possano creare credenziali temporanee per consentire agli utenti esterni di accedere a una dropzone S3 dove saranno in grado di caricare nuovi file. <\/p>\n\n\n\n

Prima di proseguire, soffermiamoci su come sia possibile far funzionare Lambda(s) Backend del diagramma sopra senza un database. La risposta \u00e8 molto semplice: lo stato della nostra vending machine di credenziali \u00e8 una raccolta di risorse AWS (utenti , Roles, Buckets) che creiamo direttamente con cloudformation e di cui conserviamo lo stato direttamente nel template!<\/p>\n\n\n\n

Utilizzando pipeline tra account, tutti i componenti dell’infrastruttura e dell’applicazione possono essere distribuiti automaticamente su ciascun account in modalit\u00e0 self-service: quando viene creato un account nell’apposita AWS Organization Unit, viene creato un set di stack CloudFormation nell’account che distribuisce i componenti dell’infrastruttura di base e una codepipeline AWS per recuperare il codice dell’applicazione dall’account Master Datalake e distribuirlo nell’account Silo di destinazione. <\/p>\n\n\n\n

Per rendere questo flusso scalabile a un numero arbitrario di account, la pipeline di distribuzione per la webapp \u00e8 suddivisa in 2 parti: la prima parte \u00e8 nell’account principale, utilizza il nostro CodeCommit Repo come sorgente, esegue test di unit\u00e0 e integrazione in AWS codebuild e infine crea un bundle dell’applicazione (utilizzando il pacchetto aws cloudformation<\/a>). Infine comprime il modello CF e il bundle del codice e carica lo zip in un bucket S3 versionato accessibile da tutti gli account Silo figlio. <\/p>\n\n\n\n

La seconda parte della pipeline si trova in ciascun account silo. \u00c8 configurata per eseguire il polling del bucket per le modifiche. Quando rileva un nuovo file zip, viene avviata un’esecuzione e lo zip viene letto e distribuito direttamente utilizzando CloudFormation. <\/p>\n\n\n\n

Lo schema del di pipe \u00e8 mostrato di seguito:<\/p>\n\n\n\n

<\/p>\n\n\n

\n
\"\"<\/figure><\/div>\n\n\n

<\/p>\n\n\n\n

Se anche voi lavorate molto su AWS, avrete notato che l’account Silo generico non dovrebbe essere in grado di accedere al bucket S3 in Master dove la prima parte della pipeline ha distribuito il bundle (ovviamente il bucket \u00e8 privato): ciascuno di questi account \u00e8 stato creato dalle organizzazioni, quindi i nuovi account si generano e muoiono e non vogliamo davvero elencarli nella policy del bucket S3 dell’account principale. <\/p>\n\n\n\n

La soluzione a questo problema \u00e8 piuttosto semplice: \u00e8 possibile creare policy delle risorse in modo tale che solo una determinata Organization Unit (OU) possa accedere al bucket. Questo \u00e8 un trucco piuttosto potente perch\u00e9 \u00e8 applicabile anche ai Glue Catalogs e consente di condividere i dati direttamente con intere unit\u00e0 organizzative. Inoltre, \u00e8 ancora possibile interrogarli con AWS Athena. <\/p>\n\n\n\n

La policy del bucket:<\/p>\n\n\n\n

{\n    \"Version\": \"2012-10-17\",\n    \"Statement\": [\n        {\n            \"Effect\": \"Allow\",\n            \"Principal\": {\n                \"AWS\": \"*\"\n            },\n            \"Action \": \"s3:Get*\",\n            \"Resource\": [\n                \"arn:aws:s3:::bucket.code\",\n                \"arn:aws:s3:::bucket.code\/*\"\n            ],\n            \"Condition\": {\n                \"ForAnyValue:ArnLike\": {\n                    \"aws:PrincipalArn\": \"arn:aws:iam::*:role\/*-codepipeline-rl\"\n                },\n                \"ForAnyValue:StringLike\": { }\n                    \"aws:PrincipalOrgPaths\": \"o- ****\/r-****\/ou-****-******\/ou-****-*******\/*\"\n\n            }\n        }\n    ]\n}<\/code><\/pre>\n\n\n\n

Dove “o -****\/r-****\/ou-****-******\/ou-****-*******\/*” \u00e8 il percorso OU e arn :aws:s3:::bucket.codifica l’Arn del bucket.<\/p>\n\n\n\n

Ok: ora abbiamo tonnellate di account silo, ciascuno con la nostra Web app personalizzata che consente agli utenti di caricare nuovi file e, utilizzando criteri come quello sopra, l’account principale dell’azienda e altri account per l’analisi globale saranno in grado di accedere ai file su s3 ed eseguire query con Athena. Potremmo persino utilizzare Lakeformation cross-account per ridurre ulteriormente i permessi di accesso o aumentare la granularit\u00e0 (di questo parleremo presto in un articolo dedicato!)<\/p>\n\n\n\n

Tuttavia, ciascun silo \u00e8 separato e indipendente cosicch\u00e9 data scientist e data engineer che lavorano separatamente possano deployare transform jobs custom senza dove interagire con altri silos.<\/p>\n\n\n\n

<\/p>\n\n\n

\n
\"\"<\/figure><\/div>\n\n\n

<\/p>\n\n\n\n

La tipologia di flusso sopra descritta \u00e8 comune a tutti i Silos e in ogni silo account sono tipicamente presenti pi\u00f9 flussi. <\/p>\n\n\n\n

Inoltre, \u00e8 possibile utilizzare anche altri servizi AWS per importare diversi tipi di dati in parallelo con l’app Web personalizzata che abbiamo sviluppato per esporre direttamente S3 ai produttori di dati. Qui presentiamo la struttura di uno dei tanti flussi implementati:<\/p>\n\n\n\n

<\/p>\n\n\n

\n
\"\"<\/figure><\/div>\n\n\n

<\/p>\n\n\n\n

Un AWS API Gateway \u00e8 stato esposto per ricevere dati da diversi sistemi. <\/p>\n\n\n\n

API Gateway si integra direttamente con il servizio kinesis firehose per creare un buffer di dati configurabile per tempo e domensione, trasformare i dati nel in formato parquet e infine scriverli in S3. Il formato dei dati \u00e8 definito ab initio ed esplicito nella struttura della glue table utilizzata anche da kinesis per trasformare i dati string json in parquet. I dati vengono regolarmente esportati nel bucket di output dei dati elaborati utilizzando una AWS Step Function basata su AWS Glue che prima esegue un crawler sul bucket dei dati grezzi per indicizzare i nuovi dati e quindi esegue un Glue Job per ripulire i dati e portarli nel formato concordato ; infine, i dati vengono scritti in un data warehouse di Redshift e nel bucket s3 di output dei dati elaborati. A questo punto, viene eseguito un nuovo crawler e i dati vengono letti da Athena e importati in quicksight per creare una nuova dashboard.<\/p>\n\n\n\n

Conclusione<\/h2>\n\n\n\n

In questo articolo, abbiamo descritto come creare un data lake multiaccount dinamico su AWS e abbiamo condiviso alcune criticit\u00e0 interessanti che si possono incontrare. <\/p>\n\n\n\n

Cosa ne pensate? Fateci sapere nei commenti!<\/p>\n\n\n\n


\n\n\n\n

About Proud2beCloud<\/h4>\n\n\n\n

Proud2beCloud \u00e8 il blog di beSharp<\/a>, APN Premier Consulting Partner italiano esperto nella progettazione, implementazione e gestione di infrastrutture Cloud complesse e servizi AWS avanzati. Prima di essere scrittori, siamo Solutions Architect che, dal 2007, lavorano quotidianamente con i servizi AWS. Siamo innovatori alla costante ricerca della soluzione pi\u00f9 all’avanguardia per noi e per i nostri clienti. Su Proud2beCloud condividiamo regolarmente i nostri migliori spunti con chi come noi, per lavoro o per passione, lavora con il Cloud di AWS. Partecipa alla discussione!<\/p>\n","protected":false},"excerpt":{"rendered":"

I Big Data hanno acquisito importanza a partire da met\u00e0 degli anni 2000 con lo sviluppo della metodologia MapReduce in […]<\/p>\n","protected":false},"author":9,"featured_media":5195,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[474],"tags":[444,587,496,463,416,498],"yoast_head":"\nCome Creare un Data lake\/DataMart su Amazon S3 con pre-ingestion flows ed ETL - Proud2beCloud Blog<\/title>\n<meta name=\"description\" content=\"Come creare un Data Lake dinamico multi-account decentralizzato su AWS, sfruttando Glue, Athena e Redshift.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blog.besharp.it\/it\/come-creare-un-data-lake-datamart-su-amazon-s3-con-pre-ingestion-flows-ed-etl\/\" \/>\n<meta property=\"og:locale\" content=\"it_IT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Come Creare un Data lake\/DataMart su Amazon S3 con pre-ingestion flows ed ETL\" \/>\n<meta property=\"og:description\" content=\"Come creare un Data Lake dinamico multi-account decentralizzato su AWS, sfruttando Glue, Athena e Redshift.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blog.besharp.it\/it\/come-creare-un-data-lake-datamart-su-amazon-s3-con-pre-ingestion-flows-ed-etl\/\" \/>\n<meta property=\"og:site_name\" content=\"Proud2beCloud Blog\" \/>\n<meta property=\"article:published_time\" content=\"2022-11-25T13:08:22+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-11-24T16:06:11+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blog.besharp.it\/wp-content\/uploads\/2022\/11\/Copertina-blog-25-11-22_25-11-22-social-ita.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"628\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Matteo Moroni\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:title\" content=\"Come Creare un Data lake\/DataMart su Amazon S3 con pre-ingestion flows ed ETL\" \/>\n<meta name=\"twitter:description\" content=\"Come creare un Data Lake dinamico multi-account decentralizzato su AWS, sfruttando Glue, Athena e Redshift.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/blog.besharp.it\/wp-content\/uploads\/2022\/11\/Copertina-blog-25-11-22_25-11-22-social-ita.png\" \/>\n<meta name=\"twitter:label1\" content=\"Scritto da\" \/>\n\t<meta name=\"twitter:data1\" content=\"Matteo Moroni\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo di lettura stimato\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minuti\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blog.besharp.it\/it\/come-creare-un-data-lake-datamart-su-amazon-s3-con-pre-ingestion-flows-ed-etl\/\",\"url\":\"https:\/\/blog.besharp.it\/it\/come-creare-un-data-lake-datamart-su-amazon-s3-con-pre-ingestion-flows-ed-etl\/\",\"name\":\"Come Creare un Data lake\/DataMart su Amazon S3 con pre-ingestion flows ed ETL - Proud2beCloud Blog\",\"isPartOf\":{\"@id\":\"https:\/\/blog.besharp.it\/it\/#website\"},\"datePublished\":\"2022-11-25T13:08:22+00:00\",\"dateModified\":\"2022-11-24T16:06:11+00:00\",\"author\":{\"@id\":\"https:\/\/blog.besharp.it\/it\/#\/schema\/person\/0b3e69eb2dcb125d58476b906ec1c7bc\"},\"description\":\"Come creare un Data Lake dinamico multi-account decentralizzato su AWS, sfruttando Glue, Athena e Redshift.\",\"breadcrumb\":{\"@id\":\"https:\/\/blog.besharp.it\/it\/come-creare-un-data-lake-datamart-su-amazon-s3-con-pre-ingestion-flows-ed-etl\/#breadcrumb\"},\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blog.besharp.it\/it\/come-creare-un-data-lake-datamart-su-amazon-s3-con-pre-ingestion-flows-ed-etl\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blog.besharp.it\/it\/come-creare-un-data-lake-datamart-su-amazon-s3-con-pre-ingestion-flows-ed-etl\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/blog.besharp.it\/it\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Come Creare un Data lake\/DataMart su Amazon S3 con pre-ingestion flows ed ETL\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/blog.besharp.it\/it\/#website\",\"url\":\"https:\/\/blog.besharp.it\/it\/\",\"name\":\"Proud2beCloud Blog\",\"description\":\"il blog di beSharp\",\"alternateName\":\"Proud2beCloud Blog\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/blog.besharp.it\/it\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"it-IT\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/blog.besharp.it\/it\/#\/schema\/person\/0b3e69eb2dcb125d58476b906ec1c7bc\",\"name\":\"Matteo Moroni\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/blog.besharp.it\/it\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/acad790b9bb4c6d62e076ecdc1debb35?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/acad790b9bb4c6d62e076ecdc1debb35?s=96&d=mm&r=g\",\"caption\":\"Matteo Moroni\"},\"description\":\"DevOps e Solution Architect di beSharp, mi occupo di sviluppare soluzioni Saas, Data Analysis, HPC e di progettare architetture non convenzionali a complessit\u00e0 divergente. Appassionato di informatica e fisica, da sempre lavoro nella prima e ho un PhD nella seconda. Parlare di tutto ci\u00f2 che \u00e8 tecnico e nerd mi rende felice!\",\"url\":\"https:\/\/blog.besharp.it\/it\/author\/matteo-moroni\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Come Creare un Data lake\/DataMart su Amazon S3 con pre-ingestion flows ed ETL - Proud2beCloud Blog","description":"Come creare un Data Lake dinamico multi-account decentralizzato su AWS, sfruttando Glue, Athena e Redshift.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blog.besharp.it\/it\/come-creare-un-data-lake-datamart-su-amazon-s3-con-pre-ingestion-flows-ed-etl\/","og_locale":"it_IT","og_type":"article","og_title":"Come Creare un Data lake\/DataMart su Amazon S3 con pre-ingestion flows ed ETL","og_description":"Come creare un Data Lake dinamico multi-account decentralizzato su AWS, sfruttando Glue, Athena e Redshift.","og_url":"https:\/\/blog.besharp.it\/it\/come-creare-un-data-lake-datamart-su-amazon-s3-con-pre-ingestion-flows-ed-etl\/","og_site_name":"Proud2beCloud Blog","article_published_time":"2022-11-25T13:08:22+00:00","article_modified_time":"2022-11-24T16:06:11+00:00","og_image":[{"width":1200,"height":628,"url":"https:\/\/blog.besharp.it\/wp-content\/uploads\/2022\/11\/Copertina-blog-25-11-22_25-11-22-social-ita.png","type":"image\/png"}],"author":"Matteo Moroni","twitter_card":"summary_large_image","twitter_title":"Come Creare un Data lake\/DataMart su Amazon S3 con pre-ingestion flows ed ETL","twitter_description":"Come creare un Data Lake dinamico multi-account decentralizzato su AWS, sfruttando Glue, Athena e Redshift.","twitter_image":"https:\/\/blog.besharp.it\/wp-content\/uploads\/2022\/11\/Copertina-blog-25-11-22_25-11-22-social-ita.png","twitter_misc":{"Scritto da":"Matteo Moroni","Tempo di lettura stimato":"7 minuti"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/blog.besharp.it\/it\/come-creare-un-data-lake-datamart-su-amazon-s3-con-pre-ingestion-flows-ed-etl\/","url":"https:\/\/blog.besharp.it\/it\/come-creare-un-data-lake-datamart-su-amazon-s3-con-pre-ingestion-flows-ed-etl\/","name":"Come Creare un Data lake\/DataMart su Amazon S3 con pre-ingestion flows ed ETL - Proud2beCloud Blog","isPartOf":{"@id":"https:\/\/blog.besharp.it\/it\/#website"},"datePublished":"2022-11-25T13:08:22+00:00","dateModified":"2022-11-24T16:06:11+00:00","author":{"@id":"https:\/\/blog.besharp.it\/it\/#\/schema\/person\/0b3e69eb2dcb125d58476b906ec1c7bc"},"description":"Come creare un Data Lake dinamico multi-account decentralizzato su AWS, sfruttando Glue, Athena e Redshift.","breadcrumb":{"@id":"https:\/\/blog.besharp.it\/it\/come-creare-un-data-lake-datamart-su-amazon-s3-con-pre-ingestion-flows-ed-etl\/#breadcrumb"},"inLanguage":"it-IT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.besharp.it\/it\/come-creare-un-data-lake-datamart-su-amazon-s3-con-pre-ingestion-flows-ed-etl\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/blog.besharp.it\/it\/come-creare-un-data-lake-datamart-su-amazon-s3-con-pre-ingestion-flows-ed-etl\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/blog.besharp.it\/it\/"},{"@type":"ListItem","position":2,"name":"Come Creare un Data lake\/DataMart su Amazon S3 con pre-ingestion flows ed ETL"}]},{"@type":"WebSite","@id":"https:\/\/blog.besharp.it\/it\/#website","url":"https:\/\/blog.besharp.it\/it\/","name":"Proud2beCloud Blog","description":"il blog di beSharp","alternateName":"Proud2beCloud Blog","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blog.besharp.it\/it\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"it-IT"},{"@type":"Person","@id":"https:\/\/blog.besharp.it\/it\/#\/schema\/person\/0b3e69eb2dcb125d58476b906ec1c7bc","name":"Matteo Moroni","image":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/blog.besharp.it\/it\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/acad790b9bb4c6d62e076ecdc1debb35?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/acad790b9bb4c6d62e076ecdc1debb35?s=96&d=mm&r=g","caption":"Matteo Moroni"},"description":"DevOps e Solution Architect di beSharp, mi occupo di sviluppare soluzioni Saas, Data Analysis, HPC e di progettare architetture non convenzionali a complessit\u00e0 divergente. Appassionato di informatica e fisica, da sempre lavoro nella prima e ho un PhD nella seconda. Parlare di tutto ci\u00f2 che \u00e8 tecnico e nerd mi rende felice!","url":"https:\/\/blog.besharp.it\/it\/author\/matteo-moroni\/"}]}},"_links":{"self":[{"href":"https:\/\/blog.besharp.it\/it\/wp-json\/wp\/v2\/posts\/5186"}],"collection":[{"href":"https:\/\/blog.besharp.it\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.besharp.it\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.besharp.it\/it\/wp-json\/wp\/v2\/users\/9"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.besharp.it\/it\/wp-json\/wp\/v2\/comments?post=5186"}],"version-history":[{"count":0,"href":"https:\/\/blog.besharp.it\/it\/wp-json\/wp\/v2\/posts\/5186\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.besharp.it\/it\/wp-json\/wp\/v2\/media\/5195"}],"wp:attachment":[{"href":"https:\/\/blog.besharp.it\/it\/wp-json\/wp\/v2\/media?parent=5186"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.besharp.it\/it\/wp-json\/wp\/v2\/categories?post=5186"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.besharp.it\/it\/wp-json\/wp\/v2\/tags?post=5186"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}