con AWS Step Functions e Amazon SQS
Livello: Intermedio
Durata: 10 minuti
Questo tutorial illustra come usare AWS Step Functions e Amazon SQS per progettare ed eseguire un flusso di lavoro serverless che coordini un microservizio basato su una coda di messaggi. Step Functions è un servizio di gestione serverless che consente di coordinare facilmente più servizi AWS in flussi di lavoro flessibili, di cui è semplice eseguire il debug, e facili da modificare. Amazon SQS è un servizio AWS che consente ai componenti di applicazioni di comunicare con il cloud.
Questo tutorial simulerà le richieste di verifica dell'inventario dagli ordini in entrata in un'applicazione di e-commerce come parte di un flusso di lavoro di elaborazione degli ordini. Step Functions invierà le richieste di verifica inventario a una coda su SQS. Una funzione AWS Lambda agirà da microservizio di inventario che utilizza una cosa per memorizzare le richieste nel buffer. Quando richiama una richiesta, controlla l'inventario e quindi restituisce il risultato a Step Functions. Se un’attività in Step Functions è configurata in questo modo, allora è detta modello di callback. I modelli di callback consentono di integrare attività asincrone nel flusso di lavoro, ad esempio il microservizio di verifica dell'inventario di questo tutorial.

Questo tutorial richiede un account AWS
Crea un account gratuitoNon sono previsti costi aggiuntivi per l'utilizzo di AWS Step Functions o Amazon SQS. Le risorse create in questo tutorial sono idonee per il piano gratuito.
a. Apri la Console di gestione AWS e tieni sotto mano questa guida dettagliata. Quando viene caricata la schermata, inserisci nome utente e password per iniziare. Successivamente, digita SQS nella casella di ricerca e seleziona Servizio di coda semplice per aprire la console del servizio.
In questa fase, creerai e configurerai una coda di Amazon SQS. Una coda è un buffer affidabile e a scalabilità elevata che memorizza i messaggi durante il trasferimento fra applicazioni distribuite o microservizi. Le code aiutano a disaccoppiare le applicazioni, collegare microservizi, attività batch o memorizzare le notifiche.
Il nostro caso d’uso per SQS in questo tutorial simulerà le richieste di verifica dello storage dell'inventario dagli ordini in entrata in un'applicazione di e-commerce.
La fase successiva consiste nel progettare un flusso di lavoro che descriva in che modo desideri processare i tuoi ordini e-commerce. I flussi di lavoro descrivono un processo come una serie di attività distinte che possono essere ripetute più volte.
Quindi, progetterai il tuo flusso di lavoro in AWS Step Functions. Il flusso di lavoro richiederà la verifica dell’inventario da un microservizio. Numerosi microservizi utilizzano le code per ricevere le richieste. In questo tutorial, utilizzeremo una funzione AWS Lambda che rappresenta il microservizio.
a. Apri la console AWS Step Functions. Seleziona Autore con frammenti di codice, quindi assegna il nome InventoryStateMachine alla macchina a stati.
b. Sostituisci il contenuto della finestra di definizione della macchina a stati con la definizione della macchina a stati Amazon States Language (ASL) di seguito. Amazon States Language è un linguaggio strutturato basato su JSON, utilizzato per definire la tua macchina a stati.
Questa macchina a stati utilizza uno stato di attività per inserire un messaggio in una coda SQS. Lo stato dell’attività è configurato per un modello di callback. Quando aggiungi .waitForTaskToken alla tua risorsa, Step Functions aggiungerà un token dell’attività al payload JSON e attenderà un callback. Il microservizio potrà quindi restituire un risultato a Step Functions richiamando l’API Step Functions.
{ "Comment": "An example of the Amazon States Language for starting a callback task.", "StartAt": "Check Inventory", "States": { "Check Inventory": { "Type": "Task", "Resource": "arn:aws:states:::sqs:sendMessage.waitForTaskToken", "Parameters": { "QueueUrl": "<INSERT SQS QUEUE URL HERE>", "MessageBody": { "MessageTitle": "Callback Task started by Step Functions", "TaskToken.$": "$$.Task.Token" } }, "Next": "Notify Success", "Catch": [ { "ErrorEquals": [ "States.ALL" ], "Next": "Notify Failure" } ] }, "Notify Success": { "Type": "Pass", "Result": "Callback Task started by Step Functions succeeded", "End": true }, "Notify Failure": { "Type": "Pass", "Result": "Callback Task started by Step Functions failed", "End": true } } }
d. Fai clic sul pulsante Aggiorna per consentire a Step Functions di tradurre la definizione della macchina a stati ASL in un flusso di lavoro visivo. Puoi facilmente verificare se il processo sia descritto o meno nel modo controllando il flusso di lavoro visivo. Quando il microservizio restituisce un risultato, la macchina a stati avanzerà verso il basso nel ramo riuscito. Se qualcosa va storto, puoi catturare l'eccezione e scendere nel ramo giusto per intraprendere le azioni correttive.
Fai clic su Successivo.
e. Successivamente, aggiungerai un ruolo IAM al tuo flusso di lavoro. Seleziona Crea un ruolo IAM e rinominalo in delivery-state-machine-role. Step Functions analizzerà il tuo flusso di lavoro e genererà una policy IAM che include le risorse utilizzate dal flusso di lavoro stesso. Fai clic su Crea macchina a stati. Sulla schermata apparirà un banner verde a conferma dell’avvenuta creazione della macchina a stati.
AWS IAM è un servizio Web che permette di controllare in modo sicuro l'accesso alle risorse AWS. In questa fase, creerai un ruolo IAM che consentirà a Step Functions di accedere a SQS.
a. In un'altra finestra del browser, apri la Console di gestione AWS. Una volta caricata la schermata, digita IAM nella barra di ricerca, quindi seleziona IAM per aprire la console del servizio.
In questa fase, creerai una funzione Lambda che simulerà un microservizio di inventario. La funzione Lambda richiama i messaggi da SQS e restituisce un messaggio a Step Functions con il risultato della richiesta.
d. Sostituisci il contenuto della finestra Codice funzione con il seguente codice, quindi fai clic su Salva.
console.log('Loading function'); const aws = require('aws-sdk'); exports.handler = (event, context, callback) => { const stepfunctions = new aws.StepFunctions(); for (const record of event.Records) { const messageBody = JSON.parse(record.body); const taskToken = messageBody.TaskToken; const params = { output: "\"Callback task completed successfully.\"", taskToken: taskToken }; console.log(`Calling Step Functions to complete callback task with params ${JSON.stringify(params)}`); stepfunctions.sendTaskSuccess(params, (err, data) => { if (err) { console.error(err.message); callback(err.message); return; } console.log(data); callback(null); }); } };
Il tuo flusso di lavoro serverless è pronto per essere eseguito. L'esecuzione di una macchina a stati è un'istanza del tuo flusso di lavoro e si verifica ogni volta che una macchina a stati Step Functions viene eseguita ed esegue le sue attività. Ogni macchina a stati Step Functions può avere più esecuzioni simultanee che si possono avviare dalla console Step Functions (che è quello che farai dopo), oppure utilizzando gli SDK AWS, le azioni API di Step Functions, o il CLI AWS. Un'esecuzione riceve input JSON e produce JSON output.
e. Quando il tuo flusso di lavoro è in esecuzione, ciascuna fase cambierà colore nel riquadro del flusso di lavoro visivo. Attendi il completamento dell'esecuzione per alcuni secondi. Quindi, nel riquadro Dettagli esecuzione, fai clic su Input e Output per visualizzare gli input e i risultati del flusso di lavoro.
f. Step Functions ti consente di ispezionare ciascuna fase dell'esecuzione del flusso di lavoro, compresi gli input e gli output di ciascuno stato. Fai clic su ciascuna attività nel tuo flusso di lavoro ed espandi i campi Input e Output in Dettagli fase. Puoi vedere che il payload di input nella macchina a stati è passato da ciascuna fase a quella successiva e che il payload viene aggiornato man mano che ogni fase viene completata.
h. In base all’output di InventoryStateMachine, il completamento del flusso di lavoro può avere esisto positivo o negativo.
In uno scenario del mondo reale, potresti decidere di riprovare l'attività o di intraprendere altre azioni, a seconda del messaggio di errore ricevuto.
In questa fase interromperai le tue risorse relative ad AWS Step Functions e AWS Lambda.
Importante: l'arresto delle risorse che non vengono utilizzate attivamente consente di ridurre i costi e costituisce una best practice. La mancata interruzione delle risorse potrebbe determinare costi non desiderati.
b. Nella finestra Macchine a stati, fai clic su InventoryStateMachine e seleziona Elimina. Conferma l'azione selezionando Elimina macchina a stati nella finestra di dialogo. La tua macchina a stati verrà eliminata entro uno o due minuti, dopo che Step Functions avrà confermato che qualsiasi esecuzione in corso è stata completata.
Hai coordinato un microservizio nel cloud con una coda di messaggi utilizzando AWS Step Functions e Amazon SQS. Step Functions può essere un’ottima soluzione quando hai bisogno di coordinare risorse applicative che devono garantire produttività e agilità.
Ora che hai imparato a coordinare i microservizi basati sulle code, puoi passare al prossimo tutorial dove imparerai a usare Step Functions per gestire gli errori. Creerai una macchina a stati con i campi Riprova e Rileva che rispondono a codici di risposta a un'API fittizia basata sul tipo di messaggio di errore: un metodo chiamato gestione degli errori di funzione.
Ulteriori informazioni
Approfondisci
Esplora AWS Step Functions