Estrarre dati da SAP in modo semplice con Amazon AppFlow
04 Dicembre 2024 - 2 min. read
Mehmed Dourmouch
DevOps Engineer
L'espressione "infrastructure as Code" (IaC) negli ultimi tempi è stata una delle keyword più popolari in ambito cloud.
Questo ha reso molte implementazioni infrastrutturali molto più riutilizzabili, versionabili e mantenibili.
Negli ultimi tempi sono nati parecchi standard e implementazioni che usano questo concetto.
Alcuni di questi sono più orientati ai sistemisti, e solitamente sono basati su file di configurazione, alcuni esempi sono Terraform o AWS SAM.
Altri strumenti sono più orientati ai developer e si basano su linguaggi di programmazione come Typescript, Java o Python.
Lo strumento ufficiale orientato agli sviluppatori, per implementare un'infrastruttura usando il concetto di IaC, si chiama Cloud Development Kit (CDK) ed è sviluppato da AWS.
Noi lo abbiamo usato parecchio, per diversi casi d'uso, vorremmo quindi condividere una delle nostre esperienze in questo articolo.
AWS CDK è disponibile per diversi linguaggi di programmazione, noi abbiamo scelto di usare Typescript, perchè consente allo sviluppatore di usare l'elasticità portata da Javascript, unita ad una type safety simile a Java.
Queste caratteristiche sono molto utili per mantenere brevi i tempi di sviluppo, senza sacrificare i vantaggi portati da un linguaggio type-oriented, che facilita l'implementazione di design pattern orientati agli oggetti.
Una cosa che ci ha colpito fin da subito di CDK è la sua struttura modulare.
Ogni servizio AWS è rappresentato da un modulo Node.JS, quindi identificabile come una dipendenza all'interno del progetto.
Questo ci consente di mantenere il progetto leggero e senza import inutili.
Di solito, noi strutturiamo il nostro progetto CDK dividendo lo stack primario in vari nested stack, usando un criterio Domain driven.
AWS CDK fornisce diversi livelli di astrazione che consentono di creare le risorse AWS.
Noi abbiamo identificato 3 livelli di astrazione:
Tipicamente possiamo identificarle dalla radice del nome: "Cfn". Questi elementi danno la possibilità di personalizzare le tue risorse nello stesso modo in cui lo fai in un template Cloudformation.
(esempio: CfnStateMachineProps )
Questi costrutti sono i nostri preferiti, sono in grado di astrarre e semplificare la configurazione delle risorse, senza perderne il controllo.
(esempio: StateMachine)
Questi costrutti possono essere molto utili, se il tuo requisito non prevede una personalizzazione avanzata delle tue risorse, poichè viene fornita un unica configurazione per creare gruppi di elementi, già integrati fra loro.
Noi raccomandiamo di leggere molto attentamente la documentazione prima di procedere con l'implementazione di questi costrutti, per essere sicuri che le risorse create vi servano realmente.
(esempio: FargateService)
AWS StepFunction è un servizio che abilita alla creazione di macchine a stati in Cloud.
Noi lo abbiamo trovato molto comodo e ben implementato all'interno di AWS CDK.
Ogni step della macchina a stati ha un input e un output e può essere di diverso tipo:
Per creare e far funzionare una macchina a stati, Amazon ha creato un linguaggio basato su JSON, Amazon States Languages.
Questo permette agli sviluppatori di creare e personalizzare gli stati, in modo da connetterli a vicenda.
Questo linguaggio è composto da un macro oggetto JSON che contiene questi attributi:
Questo campo è usato come i commenti nei linguaggi di programmazione tradizionali.
È utilizzato per riassumere il comportamento della macchina a stati, non è un campo obbligatorio.
Questo campo non è obbligatorio e definisce il numero massimo di secondi che un esecuzione di una macchina a stati può impiegare a finire.
Se questo limite viene violato, lo stato della macchina diventa Fail.
Questo campo non è obbligatorio, definisce la versione del Amazon State Language utilizzato (il default è "1.0").
Questo campo è obbligatorio, è un oggetto JSON, e viene usato per descrivere gli stati che compongono la macchina a stati.
Ogni chiave di quell'oggetto rappresenta il nome dello stato.
Ecco un esempio:
{
"State1" : {
},
"State2" : {
},
...
}
Questo attributo è obbligatorio e definisce il primo step della macchina a stati da invocare.
Per creare una StepFunction usando le tecnologie IaC tramite strumenti AWS ufficiali, puoi usare il servizio Cloudformation.
Qui sotto troviamo un esempio di implementazione di una StepFunction in CloudFormation.
Come puoi notare, un semplice HelloWorld può essere molto verboso e non semplice da configurare con un template Cloudformation, questo succede perchè il JSON state language non è ben integrato con il nostro YAML Template.
In uno dei nostri casi d'uso, avevamo bisogno di sviluppare una macchina che da una serie di operazioni multiple, eseguite in parallelo, riuscisse ad elaborare un report al termine di tutte le computazioni.
Con un template standard, questo può diventare difficile da implementare, così abbiamo provato a farlo usando CDK.
Abbiamo scoperto che il costrutto relativo a StepFunction, oltre a fornire un modo semplice per integrare le risorse esterne con la tua macchina a stati, è in grado di fornire un ulteriore astrazione per lo State Language visto in precedenza.
Grazie a questo, sviluppare un flusso diventa molto più intuitivo e mantenibile.
AWS CDK è indubbiamente uno strumento molto potente. Ad ogni modo, è importante tenere a mente che, prima di avvicinarsi ai costruttori di CDK, è necessario padroneggiare alcune conoscenze di programmazione fondamentali come l'OOP (Programmazione orientata agli oggetti).
In questo articolo abbiamo condiviso un caso d'uso reale, dove AWS CDK può essere molto utile, insieme all'applicazione di qualche nostra best practice interna.
Spero che questa panoramica sul modo CDK e Step Function vi sia stata utile. Diteci cosa ne pensate!
Ci vediamo tra 14 giorni su Proud2beCloud con un nuovo articolo!