{"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

Perch\u00e8 dovremmo aver bisogno di StepFunctions?<\/h2>\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

  1. I dati devono essere acquisiti da un database relazionale. Schemi e tabelle multipli.<\/li>
  2. I dati acquisiti devono essere caricati su S3 e sottoposti a scansione per estrarre un Glue DataCatalog per le query AWS Athena.<\/li>
  3. \u00c8 necessario unire diverse tabelle del catalogo dati, utilizzando regole non banali per creare un set di dati su S3 da utilizzare in un processo di Machine Learning per la segmentazione dei clienti.<\/li>
  4. L’output del lavoro di segmentazione dei dati deve essere archiviato sia nel data lake di S3, sia essere copiato, aggiornato, nel database relazionale per l’accesso da parte di altri strumenti aziendali.<\/li><\/ol>\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

    1. Scansionare il database originale tramite una connessione JDBC.<\/li>
    2. Utilizzare un Glue Job per spostare i dati dal database a S3. Alcune tabelle possono utilizzare i segnalibri ma altre no.<\/li>
    3. Scansionare il bucket S3 di destinazione.<\/li>
    4. Eseguire un job di Glue Spark dedicato per operare una join sul data lake di S3. Scrivere i risultati su un’altra partizione o bucket S3.<\/li>
    5. Eseguire la scansione della partizione di destinazione per rendere facilmente interrogabili i risultati della join mediante AWS Athena.<\/li>
    6. Lanciare il job di ML (SageMaker o workflows di Glue ML).<\/li>
    7. Scansionare il set di dati risultante.<\/li>
    8. Eseguire un processo ETL finale di Glue per caricare il nuovo set di dati nel database originale.<\/li><\/ol>\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

      \"AWS
      StepFunctions flow<\/em><\/figcaption><\/figure><\/div>\n\n\n\n

      Se uno di questi passaggi dovesse fallire, riceveremo una notifica tramite posta elettronica dal topic SNS, avremmo quindi, un feedback visivo del passaggio non riuscito e anche i log corrispondenti.<\/p>\n\n\n\n

      \"Step
      Step di errore e relativi log<\/figcaption><\/figure><\/div>\n\n\n\n

      StepFunctions sembra quindi essere un jolly perfetto, con molte buone caratteristiche e nessun inconveniente significativo, tuttavia, come tutti sappiamo, questo non \u00e8 quasi mai vero nel mondo IT, quindi qual \u00e8 il trucco?\n<\/p>\n\n\n\n

      Il vero problema \u00e8 la gestione del codice: il linguaggio di StepFunctions<\/a> \u00e8 basato su un modello JSON dichiarativo, risultando quindi non banale da scrivere e mantenere, anche utilizzando strumenti dedicati come plug-in specifici per Visual Studio<\/a>.<\/span><\/p>\n\n\n\n

      Inoltre, sarebbe molto utile poter mantenere sia il codice StepFunctions che i Glue Jobs e l’eventuale codice Lambda in un unico progetto integrato.<\/p>\n\n\n\n

      Cloudformation con Troposphere o AWS CDK<\/h2>\n\n\n\n

      Lo strumento pi\u00f9 ovvio che possiamo utilizzare per mantenere le StepFunctions, i Glue Jobs e il resto della nostra infrastruttura ETL, in modo coeso, \u00e8 Cloudformation, da integrare come strumento di distribuzione per tutto il progetto. Tuttavia, il codice Cloudformation \u00e8 un linguaggio YML \/ JSON dichiarativo non troppo diverso dal codice delli funzioni di StepFunctions, e includere tale codice in questi template, di solito \u00e8 piuttosto doloroso poich\u00e9 implica l’inclusione di stringhe JSON complesse nel nostro file YML di Cloud Formation.<\/p>\n\n\n\n

      Una soluzione molto pi\u00f9 efficace consiste nel creare un template di Cloudformation, utilizzando un linguaggio di programmazione di alto livello come AWS CDK<\/a> che supporta molti linguaggi (TypeScript, Python, e Java).<\/span><\/p>\n\n\n\n

      Optando per Python, che risulter\u00e0 spesso una buona scelta poich\u00e9 i lavori ETL saranno probabilmente scritti comunque in Python, si avr\u00e0 la possibilit\u00e0 di utilizzare Troposphere invece di AWS CDK come framework Cloudformation, che \u00e8 molto pi\u00f9 versatile in diverse situazioni.<\/p>\n\n\n\n

      Inoltre le StepFunctions possono essere generate a partire dal python Step Functions Framework<\/a> come mostreremo nell’esempio seguente (Troposphere + Python step function SDK).<\/span><\/p>\n\n\n\n

      In questo esempio molto semplice vogliamo dimostrare come creare un semplice workflow per scaricare un dataset sul Covid da un bucket AWS S3 OpenData pubblico, salvarne un piccolo sottoinsieme in un bucket S3 diverso e sottoporlo a scansione per prepararlo alle query mediante AWS Athena. Questo esempio di workflow base pu\u00f2 essere esteso a piacimento! Ecco uno schizzo di base dell’infrastruttura:<\/p>\n\n\n\n

      \"Infrastruttura
      Infrastruttura per il nostro esempio di flow<\/span><\/i><\/figcaption><\/figure><\/div>\n\n\n\n

      Prima di tutto procediamo installando la CLI di AWS<\/a> <\/span>e le librerie richieste da python: <\/span><\/p>\n\n\n\n

      pip install troposphere stepfunctions.<\/pre>\n\n\n\n

      Una volta completata l’installazione, scarichiamo il codice di esempio dal nostro repository<\/a><\/span> e ci ritroveremo con un file <\/span>troposphere_main.py<\/span> che contiene la <\/span>rappresentazione troposphere<\/b> dell’intera infrastruttura (vedi sketch) e altre cartelle contenenti il \u200b\u200bcodice python delle varie funzioni Lambda (start_crawler, check_crawler status), infine un file README che spiega come eseguire il progetto. Dopodich\u00e9 dovremo creare un bucket S3 come supporto per la distribuzione di Cloudformation con il nome che preferiamo.<\/span><\/p>\n\n\n\n

      Seguendo le istruzioni presenti nel README, possiamo semplicemente eseguire il file principale, lanciando in una console python troposphere_main.py. Eseguendo questo script, compileremo il codice troposphere in un formato JSON compatibile con Cloudformation. Fatto ci\u00f2, siamo pronti per lanciare il nuovo template di AWS Cloudformation:<\/p>\n\n\n\n

      aws cloudformation package –template-file troposphere_main.json –s3-bucket <YOUR CLOUDFORMATION S3 BUCKET> –s3-prefix ‘<THE PATH YOU PREFER>’ –output-template-file troposphere_main.yml<\/span><\/p>\n\n\n\n

      Questo comando prende come input il file JSON creato da Troposphere, carica su S3 il codice delle funzioni Glue e lambda, a cui si fa riferimento, come percorsi locali ed infine restituisce un altro modello di Cloudformation (questa volta in YML), in cui i riferimenti ai percorsi locali sono stati modificati nei corrispondenti riferimenti su S3 (Qui ulteriori informazioni<\/a>).<\/span><\/p>\n\n\n\n

      Finalmente siamo pronti per distribuire il modello Cloudformation utilizzando il comando:<\/p>\n\n\n\n

      aws cloudformation deploy –template-file .\/troposphere_main.yml –stack-name testStepfunctionsStack –capabilities CAPABILITY_NAMED_IAM CAPABILITY_AUTO_EXPAND<\/span><\/p>\n\n\n\n

      In questo modo creeremo il \u201c<\/span>testStepfunctionsStack<\/b>\u201d che contiene l’infrastruttura descritta prima. Ora possiamo accedere alla console di AWS StepFunctions ed eseguire la nuova funzione (test-stepfunctions-glue), il workflow verr\u00e0 eseguito e noi vedremo importati i dati Covid.<\/span><\/p>\n\n\n\n

      \"AWS
      Il nostro flow di esempio completato<\/span><\/i><\/figcaption><\/figure><\/div>\n\n\n\n

      Sebbene questo sia solo un esempio molto basico, \u00e8 importante notare che tutto il codice presentato \u00e8 racchiuso nello stesso progetto e quindi facilmente estendibile a livello di flusso senza per\u00f2 perdere il controllo dei vari componenti: basta usare Git per il controllo di versione e Cloudformation per i deploy!<\/p>\n\n\n\n

      Conclusioni<\/h2>\n\n\n\n

      Abbiamo dimostrato che le funzioni di StepFunctions sono un ottimo modo per orchestrare i flussi basati su AWS in generale e in particolare le pipeline ETL! Inoltre, abbiamo condiviso un esempio di come utilizzare Troposphere e Python StepFunctions SDK per sviluppare, in un unico progetto python, sia una funzione di StepFunctions che il codice dei suoi vari componenti.<\/p>\n\n\n\n

      Ed eccoci arrivati alla fine! Lasciateci un commento o contattateci<\/a> per qualsiasi dubbio, domanda o idea!<\/p>\n\n\n\n

      Ci vediamo puntuali tra due settimane con un nuovo articolo su #proud2becloud<\/strong>!<\/p>\n","protected":false},"excerpt":{"rendered":"

      L’analisi dei Big Data sta diventando sempre pi\u00f9 importante per delineare le principali scelte di business in aziende di tutte […]<\/p>\n","protected":false},"author":9,"featured_media":2955,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[474],"tags":[251,275,444,488,416],"yoast_head":"\nOrchestrare pipeline ETL su AWS con AWS Glue, AWS StepFunctions e AWS Cloudformation - Proud2beCloud Blog<\/title>\n<meta name=\"description\" content=\"Come orchestrare pipeline di ETL su Amazon Web Services con AWS Step Functions, AWS Glue, and AWS CloudFormation.\" \/>\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\/orchestrare-pipeline-etl-su-aws-con-aws-glue-aws-stepfunctions-e-aws-cloudformation\/\" \/>\n<meta property=\"og:locale\" content=\"it_IT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Orchestrare pipeline di ETL su AWS con AWS Step Functions, AWS Glue, and AWS CloudFormation.\" \/>\n<meta property=\"og:description\" content=\"Come orchestrare pipeline di ETL su Amazon Web Services con AWS Step Functions, AWS Glue, and AWS CloudFormation.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blog.besharp.it\/it\/orchestrare-pipeline-etl-su-aws-con-aws-glue-aws-stepfunctions-e-aws-cloudformation\/\" \/>\n<meta property=\"og:site_name\" content=\"Proud2beCloud Blog\" \/>\n<meta property=\"article:published_time\" content=\"2021-04-02T09:31:44+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-04-02T09:31:34+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blog.besharp.it\/wp-content\/uploads\/2021\/04\/etl-social.jpg\" \/>\n<meta name=\"author\" content=\"Matteo Moroni\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:title\" content=\"Orchestrare pipeline di ETL su AWS con AWS Step Functions, AWS Glue, and AWS CloudFormation.\" \/>\n<meta name=\"twitter:description\" content=\"Come orchestrare pipeline di ETL su Amazon Web Services con AWS Step Functions, AWS Glue, and AWS CloudFormation.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/blog.besharp.it\/wp-content\/uploads\/2021\/04\/etl-social.jpg\" \/>\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=\"8 minuti\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blog.besharp.it\/it\/orchestrare-pipeline-etl-su-aws-con-aws-glue-aws-stepfunctions-e-aws-cloudformation\/\",\"url\":\"https:\/\/blog.besharp.it\/it\/orchestrare-pipeline-etl-su-aws-con-aws-glue-aws-stepfunctions-e-aws-cloudformation\/\",\"name\":\"Orchestrare pipeline ETL su AWS con AWS Glue, AWS StepFunctions e AWS Cloudformation - Proud2beCloud Blog\",\"isPartOf\":{\"@id\":\"https:\/\/blog.besharp.it\/it\/#website\"},\"datePublished\":\"2021-04-02T09:31:44+00:00\",\"dateModified\":\"2021-04-02T09:31:34+00:00\",\"author\":{\"@id\":\"https:\/\/blog.besharp.it\/it\/#\/schema\/person\/0b3e69eb2dcb125d58476b906ec1c7bc\"},\"description\":\"Come orchestrare pipeline di ETL su Amazon Web Services con AWS Step Functions, AWS Glue, and AWS CloudFormation.\",\"breadcrumb\":{\"@id\":\"https:\/\/blog.besharp.it\/it\/orchestrare-pipeline-etl-su-aws-con-aws-glue-aws-stepfunctions-e-aws-cloudformation\/#breadcrumb\"},\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blog.besharp.it\/it\/orchestrare-pipeline-etl-su-aws-con-aws-glue-aws-stepfunctions-e-aws-cloudformation\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blog.besharp.it\/it\/orchestrare-pipeline-etl-su-aws-con-aws-glue-aws-stepfunctions-e-aws-cloudformation\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/blog.besharp.it\/it\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Orchestrare pipeline ETL su AWS con AWS Glue, AWS StepFunctions e AWS Cloudformation\"}]},{\"@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":"Orchestrare pipeline ETL su AWS con AWS Glue, AWS StepFunctions e AWS Cloudformation - Proud2beCloud Blog","description":"Come orchestrare pipeline di ETL su Amazon Web Services con AWS Step Functions, AWS Glue, and AWS CloudFormation.","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\/orchestrare-pipeline-etl-su-aws-con-aws-glue-aws-stepfunctions-e-aws-cloudformation\/","og_locale":"it_IT","og_type":"article","og_title":"Orchestrare pipeline di ETL su AWS con AWS Step Functions, AWS Glue, and AWS CloudFormation.","og_description":"Come orchestrare pipeline di ETL su Amazon Web Services con AWS Step Functions, AWS Glue, and AWS CloudFormation.","og_url":"https:\/\/blog.besharp.it\/it\/orchestrare-pipeline-etl-su-aws-con-aws-glue-aws-stepfunctions-e-aws-cloudformation\/","og_site_name":"Proud2beCloud Blog","article_published_time":"2021-04-02T09:31:44+00:00","article_modified_time":"2021-04-02T09:31:34+00:00","og_image":[{"url":"https:\/\/blog.besharp.it\/wp-content\/uploads\/2021\/04\/etl-social.jpg"}],"author":"Matteo Moroni","twitter_card":"summary_large_image","twitter_title":"Orchestrare pipeline di ETL su AWS con AWS Step Functions, AWS Glue, and AWS CloudFormation.","twitter_description":"Come orchestrare pipeline di ETL su Amazon Web Services con AWS Step Functions, AWS Glue, and AWS CloudFormation.","twitter_image":"https:\/\/blog.besharp.it\/wp-content\/uploads\/2021\/04\/etl-social.jpg","twitter_misc":{"Scritto da":"Matteo Moroni","Tempo di lettura stimato":"8 minuti"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/blog.besharp.it\/it\/orchestrare-pipeline-etl-su-aws-con-aws-glue-aws-stepfunctions-e-aws-cloudformation\/","url":"https:\/\/blog.besharp.it\/it\/orchestrare-pipeline-etl-su-aws-con-aws-glue-aws-stepfunctions-e-aws-cloudformation\/","name":"Orchestrare pipeline ETL su AWS con AWS Glue, AWS StepFunctions e AWS Cloudformation - Proud2beCloud Blog","isPartOf":{"@id":"https:\/\/blog.besharp.it\/it\/#website"},"datePublished":"2021-04-02T09:31:44+00:00","dateModified":"2021-04-02T09:31:34+00:00","author":{"@id":"https:\/\/blog.besharp.it\/it\/#\/schema\/person\/0b3e69eb2dcb125d58476b906ec1c7bc"},"description":"Come orchestrare pipeline di ETL su Amazon Web Services con AWS Step Functions, AWS Glue, and AWS CloudFormation.","breadcrumb":{"@id":"https:\/\/blog.besharp.it\/it\/orchestrare-pipeline-etl-su-aws-con-aws-glue-aws-stepfunctions-e-aws-cloudformation\/#breadcrumb"},"inLanguage":"it-IT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.besharp.it\/it\/orchestrare-pipeline-etl-su-aws-con-aws-glue-aws-stepfunctions-e-aws-cloudformation\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/blog.besharp.it\/it\/orchestrare-pipeline-etl-su-aws-con-aws-glue-aws-stepfunctions-e-aws-cloudformation\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/blog.besharp.it\/it\/"},{"@type":"ListItem","position":2,"name":"Orchestrare pipeline ETL su AWS con AWS Glue, AWS StepFunctions e AWS Cloudformation"}]},{"@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\/2962"}],"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=2962"}],"version-history":[{"count":0,"href":"https:\/\/blog.besharp.it\/it\/wp-json\/wp\/v2\/posts\/2962\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.besharp.it\/it\/wp-json\/wp\/v2\/media\/2955"}],"wp:attachment":[{"href":"https:\/\/blog.besharp.it\/it\/wp-json\/wp\/v2\/media?parent=2962"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.besharp.it\/it\/wp-json\/wp\/v2\/categories?post=2962"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.besharp.it\/it\/wp-json\/wp\/v2\/tags?post=2962"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}