{count, plural, one {Corso} other {Corsi}}
Ogni sistema complesso è il risultato dell'orchestrazione di più sottosistemi. Costruire e mantenere un sistema del genere resta una sfida comune, soprattutto quando si lavora con infrastrutture cloud.
Per fortuna, sono stati sviluppati diversi strumenti per semplificare l'orchestrazione dei workflow, a prescindere dal livello di complessità. Tra questi, AWS Step Functions si distingue per utilità e numerosi vantaggi.
Questo articolo si concentra su come usare Step Functions per orchestrare workflow all'interno di AWS Cloud. Inizia esplorando cosa sono le step functions, insieme ai loro benefici e alle funzionalità principali.
Poi guida attraverso i passaggi per iniziare con Step Function, dalla configurazione dell'ambiente AWS all'esplorazione dell'interfaccia. Su queste basi, illustra passo dopo passo il processo di creazione e deployment di un workflow reale.
Cosa sono AWS Step Functions?
AWS Step Functions è un servizio serverless di orchestrazione progettato per facilitare la creazione di workflow visivi, consentendo il coordinamento fluido di funzioni AWS Lambda e di altre risorse AWS.
Le sue capacità di integrazione sono estese: supporta collegamenti con Amazon EC2, Amazon ECS, server on-premise, Amazon API Gateway e code Amazon SQS, per citarne alcuni. Questo garantisce workflow completi in grado di interagire con un ampio ecosistema di servizi AWS.
La versatilità di AWS Step Functions lo rende adatto a un'ampia gamma di applicazioni. Che si tratti di gestire l'evasione degli ordini, elaborare dati, alimentare applicazioni web o orchestrare qualsiasi sequenza complessa di attività, Step Functions offre una soluzione robusta per l'automazione e la gestione dei workflow.
Funzionalità chiave e vantaggi
Prima di addentrarci negli aspetti tecnici di AWS Step Functions, vediamo le sue principali funzionalità e i relativi vantaggi.
Funzionalità chiave
Step Functions offre diverse funzionalità per semplificare la creazione e la gestione dei workflow; di seguito sono evidenziate le principali:
- Integrazione con endpoint HTTPS: Consente ai workflow di invocare qualsiasi servizio web che supporti HTTPS per facilitare l'integrazione di varie API web nei processi degli utenti.
- Coordinamento di componenti distribuiti: Questa funzione rende possibile coordinare i componenti di sistemi distribuiti, cruciale per applicazioni complesse e multi-servizio.
- Gestione dello stato integrata: Monitorando meticolosamente l'avanzamento di ogni esecuzione del workflow, questa capacità preserva lo stato delle applicazioni degli utenti durante l'esecuzione e gestisce i dati trasferiti tra i passaggi del workflow.
- Approvazione umana: L'intervento umano è fondamentale in qualsiasi automazione. Questa funzione offre un meccanismo per includere interventi manuali in un workflow automatizzato quando servono approvazioni manuali.
Vantaggi
Le funzionalità chiave di AWS Step Functions offrono a sviluppatori e organizzazioni molteplici vantaggi per migliorare i workflow operativi e di sviluppo.
|
Per gli sviluppatori |
Per le organizzazioni |
|
|
Esempi reali e casi d'uso
Sulla base delle funzionalità e dei vantaggi sopra descritti, non c'è dubbio che Step Functions possa svolgere un ruolo fondamentale in vari ambiti, consentendo alle aziende di progettare, automatizzare e scalare i propri workflow in modo efficiente.
Questa sezione esplora esempi di come diversi settori usano AWS Step Functions per essere più competitivi, innovativi ed efficienti.
Coordinamento di microservizi
Le organizzazioni con architetture basate su microservizi spesso sfruttano AWS Step Functions per gestire le interazioni tra questi servizi.
Una realtà retail, ad esempio, potrebbe usare Step Functions per orchestrare i passaggi che gestiscono l'autenticazione degli utenti, la gestione dello stock, l'elaborazione dei pagamenti e la spedizione degli ordini, garantendo un'esperienza d'acquisto coerente.
Sicurezza e operation IT
AWS Step Functions può essere utilizzato per automatizzare attività ripetitive come controlli di sicurezza, aggiornamenti di sistema e verifiche di conformità.
Per esempio, nella sicurezza IT, Step Functions può essere usato per progettare workflow di risposta agli incidenti, riducendo errore umano e tempi di risposta grazie alla gestione sistematica di ogni fase, dall'allerta iniziale alla risoluzione.
Workflow dati e processi ETL
Per le aziende data-intensive, AWS Step Functions può orchestrare l'elaborazione dei dati e i task ETL. Questo può includere workflow per l'estrazione di dati da più fonti, la trasformazione in un formato coerente e il caricamento su piattaforme analitiche o data lake.
Una società di analytics, ad esempio, può implementare Step Functions per automatizzare la propria pipeline dati, garantendo una gestione efficiente dei dati per decisioni strategiche.
Operazioni di machine learning
Step Functions è utile anche nell'operatività del machine learning, includendo processi come preparazione dei dati, training del modello, valutazione e deployment.
Un'azienda di tecnologia sanitaria potrebbe usare Step Functions per gestire la pipeline di riaddestramento periodico dei propri algoritmi diagnostici, mantenendo le prestazioni dei modelli man mano che arrivano nuovi dati.
Pipeline di elaborazione media
Nel media e intrattenimento, AWS Step Functions può orchestrare workflow complessi di elaborazione dei contenuti, inclusi encoding video, elaborazione immagini e analisi dei contenuti.
Un'azienda media potrebbe applicare Step Functions per fare in modo che i nuovi contenuti, una volta caricati, attivino automaticamente conversione di formato, estrazione delle miniature e arricchimento dei metadati prima della pubblicazione.
Primi passi con AWS Step Functions
Le sezioni successive di questo articolo trattano la combinazione di Step Functions con altri servizi AWS. È quindi necessario comprendere le basi di Step Functions prima di affrontare concetti avanzati.
L'obiettivo di questa sezione è aiutarti a iniziare con AWS Step Functions, dalla comprensione dei mattoni fondamentali alla navigazione dell'interfaccia di AWS Step Functions.
I mattoni di Step Functions
Ogni sistema o modulo è una combinazione di più sottocomponenti, e così è Step Functions. Step Functions si basa sui seguenti blocchi: (1) state machine e (2) task.
Capiremo questi concetti con un esempio.
- State machine: Un workflow che definisce la sequenza degli eventi, la logica condizionale e il flusso complessivo di esecuzione dei task. In poche parole, una state machine può essere definita come un workflow.
- Task: Un'azione che esegue un'attività specifica. Riceve un input e genera un output. Un esempio può essere interrogare un database, effettuare una chiamata API o invocare una funzione Lambda, per citarne alcuni.
Considera un caso d'uso che esegue un processo di iscrizione a un asilo nido utilizzando AWS Step Functions. Prima di entrare nel merito, vediamo i passaggi complessivi:
- Raccogliere le informazioni di registrazione: il primo passo del processo è raccogliere le informazioni di registrazione dai genitori. Questo potrebbe avvenire tramite un form web, ma nel nostro caso useremo JSON. Alla conferma, si attiva una funzione Lambda che passa le informazioni di registrazione al passaggio successivo del workflow.
- Verificare le informazioni di registrazione: Il passo successivo è usare una funzione Lambda che verifica le informazioni fornite. Controlla che tutti i campi obbligatori siano compilati e che l'età del bambino rientri nell'intervallo accettabile per l'asilo. Se la verifica va a buon fine, il workflow procede; in caso contrario, viene restituito un messaggio di errore ai genitori.
- Verificare la disponibilità: una volta verificate le informazioni, un'altra funzione Lambda controlla la disponibilità di posti all'asilo. Se ci sono posti, il workflow procede; altrimenti, viene inviato un messaggio ai genitori informandoli che l'asilo è al completo.
- Confermare la registrazione: il passaggio finale è una funzione Lambda che conferma la registrazione e invia un messaggio di conferma ai genitori, includendo dettagli su data di inizio e tariffe.
Questo workflow ha una state machine con quattro task principali, tutti autoesplicativi.
checkInformationcheckAgeRangecheckSpotsAvailabilityconfirmRegistration
Workflow di iscrizione all'asilo con AWS Step Functions
Creare la tua prima AWS Step Function
Le sezioni precedenti hanno fornito più teoria; qui passiamo agli aspetti tecnici, dai prerequisiti per usare Step Functions all'implementazione di un workflow end-to-end e al suo deployment.
Prerequisiti per implementare Step Functions
Prima di esaminare i dettagli del caso d'uso, rivediamo i prerequisiti necessari per un'implementazione di successo:
- Account AWS: necessario per accedere ai servizi AWS; può essere creato dal sito web di AWS.
- Conoscenze di base dei servizi AWS: Per questo caso d'uso è necessaria familiarità con AWS Lambda e Amazon Simple Notification Service (SNS).
- Conoscenza di JSON: È richiesta una comprensione di base di JSON per capire il formato dei dati in input e output.
- AWS IAM: È necessario comprendere AWS Identity and Access Management (IAM) per impostare le autorizzazioni corrette per le funzioni Lambda utilizzate.
- Competenze di coding: Competenze di base in Python sono necessarie per scrivere le funzioni Lambda.
Navigare nell'interfaccia di AWS Step Functions
Iniziamo esplorando l'interfaccia di Step Function. Questo si fa seguendo i quattro passaggi principali dopo aver effettuato l'accesso al tuo account AWS:
- Digita la parola chiave “Step Functions” nella barra di ricerca in alto.
- Scegli l'icona corrispondente dai risultati.
- Fai clic sull'icona “Get Started” per iniziare a creare la prima step function.
- Infine, poiché vogliamo creare la nostra state machine, seleziona la scheda “Create your own”.

Quattro passaggi principali per accedere all'interfaccia di Step Function
Dopo il quarto passaggio, possiamo iniziare a progettare la state machine con la scheda “Design”, che contiene tre funzionalità principali: “Actions”, “Flow” e “Patterns”.

Le tre componenti principali della scheda "Design"
- Actions: Corrispondono a operazioni individuali eseguibili all'interno di un workflow e mappano servizi AWS specifici, come invocare una funzione Lambda, pubblicare un messaggio su SNS, eseguire un task su ECS o avviare un job in AWS Glue.
- Flow: Rappresenta le strutture di controllo del flusso che determinano il percorso di esecuzione della state machine. Elementi come "Choice" per la logica di diramazione, "Parallel" per percorsi in parallelo, "Map" per iterare su una collezione, "Pass" come no-op o arricchitore dei dati di stato, "Wait" per ritardi temporali, "Success" per concludere con successo un workflow e "Fail" per terminarlo a causa di un errore fanno parte del controllo di flusso del workflow.
- Patterns: Template predefiniti o best practice per scenari comuni di workflow, utili per costruire più facilmente state machine complesse. I pattern possono riguardare task di data processing specifici per la gestione di oggetti S3, file JSON, file CSV, o pattern generici come un Job Poller per orchestrare l'esecuzione asincrona dei job.
Creazione del workflow
Il workflow iniziale aveva l'obiettivo di fornire una panoramica generale dei componenti principali della state machine. In questa sezione rivediamo il processo di implementazione.
Per farlo, ci servono quattro funzioni Lambda, ognuna corrispondente a un task specifico.
I sette passaggi seguenti evidenziano tutto ciò che serve per creare una funzione Lambda. Il processo di creazione è lo stesso per tutte e quattro; l'unica differenza riguarda il contenuto di ciascuna funzione.
Il codice completo dell'articolo è disponibile sulla pagina GitHub. Anche se il codice è facile da capire, è altamente consigliato seguire l'intero contenuto dell'articolo per un'esperienza migliore.
7 passaggi principali per creare una funzione Lambda
Dopo aver completato i sette passaggi, dovrebbe apparire la seguente finestra, che mostra informazioni importanti come:
- Il nome della funzione
- Il link Amazon Resource Name (ARN) e
- L'area integrata in cui implementare la logica della funzione.
Dettagli della funzione Lambda checkInformation
Ora ripeti lo stesso processo per i restanti tre task (funzioni) checkAgeRange, checkSpotsAvailability e confirmRegistration.
Di seguito è riportato un esempio di JSON di input. È importante comprenderlo perché influisce sul modo in cui vengono implementate le funzioni.
- Il JSON contiene informazioni sul bambino da iscrivere, inclusi nome, cognome e data di nascita.
- Include anche dettagli sui genitori, i giorni della settimana in cui il bambino frequenterà l'asilo e eventuali informazioni aggiuntive.
{
"registration_info": {
"child": {
"firstName": "Mohamed",
"lastName": "Diallo",
"dateOfBirth": "2016-07-01"
},
"parents": {
"mother": {
"firstName": "Aicha",
"lastName": "Cisse",
"email": "aicha.cisse@example.com",
"phone": "123-456-7890"
},
"father": {
"firstName": "Ibrahim",
"lastName": "Diallo",
"email": "ibrahim.diallo@example.com",
"phone": "098-765-4321"
}
},
"daysOfWeek": [
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday"
],
"specialInstructions": "Mohamed has a peanut allergy."
}
}
Ogni funzione Lambda è descritta di seguito:
|
Funzione |
Descrizione |
|
|
|
|
|
|
|
|
|
|
|
|
L'implementazione di base di ciascuna funzione è riportata di seguito:
checkInformation function
import json
def checkInformation(event, context):
registration_info = event['registration_info']
required_fields = ['child', 'parents', 'daysOfWeek']
for field in required_fields:
if field not in registration_info:
return {
'statusCode': 400,
'body': f'Missing required field: {field}'
}
return {
'statusCode': 200,
'body': json.dumps(registration_info)
}
checkAgeRange function
import json
import datetime
def checkAgeRange(event, context):
registration_info = json.loads(event['body'])
dob = registration_info['child']['dateOfBirth']
today = datetime.date.today()
dob_date = datetime.datetime.strptime(dob, '%Y-%m-%d').date()
age = today.year - dob_date.year - ((today.month, today.day) < (dob_date.month, dob_date.day))
if age < 2 or age > 5:
return {
'statusCode': 400,
'body': json.dumps('Child is not within the acceptable age range for this daycare.')
}
registration_info['child']['age'] = age
return {
'statusCode': 200,
'body': json.dumps(registration_info)
}
checkSpotsAvailability function
import json
def checkSpotsAvailability(event, context):
registration_info = json.loads(event['body'])
spots_available = 20 # This should be dynamically determined, not hardcoded
if spots_available <= 0:
return {
'statusCode': 400,
'body': json.dumps('No spots available in the daycare.')
}
return {
'statusCode': 200,
'body': json.dumps(registration_info)
}
confirmRegistration function
import json
import datetime
def confirmRegistration(event, context):
registration_info = json.loads(event['body'])
age = registration_info['child']['age'] # This was added in the checkAgeRange function
if age >= 2 and age < 3:
fees = 800
elif age >= 3 and age < 4:
fees = 750
elif age >= 4 and age < 5:
fees = 700
else: # age >= 5
fees = 650
start_date = datetime.date.today() + datetime.timedelta(weeks=2)
confirmation_details = {
'fees': fees,
'start_date': start_date.isoformat()
}
response = {**registration_info, **confirmation_details}
return {
'statusCode': 200,
'body': json.dumps(response)
}
Con tutto questo in atto, possiamo iniziare a creare la nostra state machine per l'asilo utilizzando l'interfaccia grafica di Step Functions.
La state machine finale è mostrata di seguito; vediamo i passaggi principali che hanno portato a questo workflow:

Workflow della state machine per il caso d'uso dell'asilo
Prima di procedere, è importante notare che il campo statusCode nell'output di una funzione Lambda è utilizzato per determinare lo stato successivo nella state machine.
- Se il valore è 200, significa che il controllo è andato a buon fine e si procede al passaggio successivo.
- Se lo
statusCodeè 400, il controllo è fallito; in tal caso, si restituisce il messaggio pertinente a seconda della funzione che ha eseguito il task sottostante.
Check Information
- La state machine inizia da questo passaggio.
- Si invoca una funzione Lambda per verificare che tutte le informazioni obbligatorie siano presenti nel modulo di registrazione.
- Se le informazioni sono complete, si passa al passaggio successivo. In caso contrario, termina con uno stato di errore che segnala informazioni incomplete.
Check Age Range
- Questo passaggio viene raggiunto solo se il controllo delle informazioni ha avuto esito positivo.
- Si invoca un'altra funzione Lambda per verificare se l'età del bambino rientra nella fascia accettabile per l'asilo.
- Se l'età è nell'intervallo, si passa al passaggio successivo. Altrimenti, termina con uno stato di errore che segnala età non valida.
Check Spots Availability
- Questo passaggio viene raggiunto solo se il controllo dell'età è andato a buon fine.
- Si invoca una funzione Lambda per verificare se ci sono posti disponibili nell'asilo.
- Se ci sono posti, si procede al passaggio successivo. In caso contrario, termina con uno stato di errore che segnala l'assenza di posti disponibili.
Confirm Registration
- Questo è il passaggio finale e viene raggiunto solo se ci sono posti disponibili nell'asilo.
- Si invoca una funzione Lambda per confermare la registrazione e calcolare le tariffe in base all'età del bambino.
- Il processo termina dopo questo passaggio con uno stato di successo, confermando la registrazione.
Per saperne di più sulle funzioni Lambda, Streaming Data with AWS Kinesis and Lambda insegna a lavorare con dati in streaming utilizzando tecnologie serverless su AWS.
Creare i ruoli IAM
Il passo successivo è definire i ruoli IAM affinché le step functions possano invocare le nostre funzioni Lambda. Questo si fa seguendo questi passaggi:

Primi nove passaggi per creare un ruolo IAM

Decimo e undicesimo passaggio per creare un ruolo IAM
Questo ruolo IAM può essere assegnato alla state machine come segue, a partire dalla scheda “Config”.

3 passaggi principali per concedere il ruolo IAM
Dopo il salvataggio, dovremmo vedere il seguente messaggio per verificare che tutto sia andato a buon fine.

Messaggio di successo per la creazione della state machine
Una volta soddisfatti della state machine, il passo successivo è crearla usando il pulsante “Create” in alto a destra.
Illustrazione dell'esecuzione della state machine
Deployment e test del tuo workflow
Abbiamo effettuato il deployment del workflow ed è il momento di testare la state machine. Testeremo due scenari:
- Un caso di errore con un intervallo di età valido, in cui il bambino che stiamo cercando di iscrivere ha più di 5 anni. Questo corrisponde al JSON iniziale.
- Un caso di successo in cui il bambino ha 3 anni.

Risultato di un caso di successo

Risultato di un caso di errore
Ottimizzare le tue Step Functions
L'ottimizzazione di qualsiasi processo parte dall'adozione delle best practice relative a quel processo, che possono migliorare prestazioni ed economicità. Le seguenti best practice possono aiutarti a ottenere il massimo da qualsiasi AWS Step Function.
- Best practice sulle prestazioni: Includono strategie come minimizzare il numero di transizioni di stato, usare impostazioni di timeout appropriate e ottimizzare le funzioni AWS Lambda.
- Best practice per l'economicità: Includono strategie come usare il giusto tipo di state machine (Standard o Express), gestire i costi di AWS Lambda e comprendere e gestire i prezzi di Step Functions.
Conclusione
Questo articolo ha fornito una guida completa alla comprensione e all'utilizzo di AWS Step Functions. Ha iniziato introducendo le AWS Step Functions e le loro funzionalità e vantaggi principali.
Ha poi guidato il lettore nella configurazione dell'ambiente AWS e nella navigazione dell'interfaccia di AWS Step Functions.
Inoltre, ha illustrato il processo di costruzione della prima AWS Step Function, dalla creazione di un workflow di base al deployment e al test. L'articolo ha anche esplorato funzionalità avanzate e casi d'uso di AWS Step Functions, per poi discutere come ottimizzarle per la massima efficienza e convenienza economica.
Per chiudere
I nostri articoli Confronto tra servizi AWS, Azure e GCP per Data Science & AI e Introduzione ad AWS Boto in Python possono essere ottimi prossimi passi per continuare ad apprendere.
Il primo offre un confronto dei principali servizi necessari per il lavoro su dati e AI, dall'ingegneria dei dati all'analisi e data science, fino alla creazione di applicazioni data-driven. Questo cheat sheet può aiutarti a comprendere il panorama dei servizi cloud per data science e AI sulle tre principali piattaforme.
Il secondo articolo fornisce un'introduzione semplice ad AWS Boto in Python, insegnando come sfruttare la tecnologia cloud per ottimizzare il workflow sui dati. È una grande risorsa per chiunque voglia automatizzare le operazioni AWS usando Python.
I servizi su AWS sono molti, e la chiave per padroneggiare AWS Step Functions è comprendere i requisiti della tua applicazione e usare la giusta combinazione di servizi e funzionalità AWS per soddisfarli.
Un data scientist poliedrico che ama condividere le proprie conoscenze e restituire valore agli altri, Zoumana è un content creator su YouTube e un top writer tech su Medium. Trova soddisfazione nel parlare in pubblico, programmare e insegnare. Zoumana ha due lauree magistrali: la prima in informatica con specializzazione in Machine Learning conseguita a Parigi, Francia, e la seconda in Data Science alla Texas Tech University negli Stati Uniti. Ha iniziato la sua carriera come Software Developer presso Groupe OPEN in Francia, per poi passare a IBM come Machine Learning Consultant, dove ha sviluppato soluzioni di IA end-to-end per compagnie assicurative. Successivamente, è entrato in Axionable, la prima startup di Sustainable AI con sede a Parigi e Montréal. Lì ha lavorato come Data Scientist e ha implementato prodotti di IA, principalmente casi d’uso di NLP, per clienti in Francia, Montréal, Singapore e Svizzera. Inoltre, ha dedicato il 5% del suo tempo ad attività di Ricerca e Sviluppo. Attualmente lavora come Senior Data Scientist presso IFC - World Bank Group.






