Orchestrazione delle funzioni Lambda con Step Functions - AWS Lambda

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Orchestrazione delle funzioni Lambda con Step Functions

Le funzioni Lambda che gestiscono più attività, implementano la logica di ripetizione dei tentativi o contengono la logica di ramificazione sono anti-pattern. Consigliamo invece di scrivere funzioni Lambda che eseguano singole attività e di utilizzarle AWS Step Functions per orchestrare i flussi di lavoro delle applicazioni.

Ad esempio, l'elaborazione di un ordine potrebbe richiedere la convalida dei dettagli dell'ordine, il controllo dei livelli di inventario, l'elaborazione del pagamento e la generazione di una fattura. Scrivi funzioni Lambda separate per ogni attività e usa Step Functions per gestire il flusso di lavoro. Step Functions coordina il flusso di dati tra le funzioni e gestisce gli errori in ogni fase. Questa separazione semplifica la visualizzazione, la modifica e la gestione dei flussi di lavoro man mano che diventano più complessi.

Quando usare Step Functions con Lambda

I seguenti scenari sono buoni esempi di quando utilizzare Step Functions per orchestrare applicazioni basate su Lambda.

Elaborazione sequenziale

L'elaborazione sequenziale si verifica quando un'attività deve essere completata prima che possa iniziare l'attività successiva. Ad esempio, in un sistema di elaborazione degli ordini, l'elaborazione dei pagamenti non può iniziare fino al completamento della convalida dell'ordine e la generazione della fattura deve attendere la conferma del pagamento. Scrivi funzioni Lambda separate per ogni attività e usa Step Functions per gestire la sequenza e gestire il flusso di dati tra le funzioni.

Una singola funzione Lambda gestisce l'intero flusso di lavoro di elaborazione degli ordini tramite:

  • Richiamo di altre funzioni Lambda in sequenza

  • Analisi e convalida delle risposte di ogni funzione

  • Implementazione della gestione degli errori e della logica di ripristino

  • Gestione del flusso di dati tra le funzioni

Utilizza due funzioni Lambda: una per convalidare l'ordine e una per elaborare il pagamento. Step Functions coordina queste funzioni tramite:

  • Esecuzione delle attività nella sequenza corretta

  • Passaggio di dati tra le funzioni

  • Implementazione della gestione degli errori in ogni fase

  • L'utilizzo di Choice indica che solo gli ordini validi procedono al pagamento

Esempio grafico del flusso di lavoro
Grafico del flusso di lavoro di Step Functions che mostra la convalida degli ordini, lo stato della scelta e l'elaborazione dei pagamenti con percorsi di successo e fallimento

Gestione complessa degli errori

Mentre Lambda offre funzionalità di ripetizione dei tentativi per chiamate asincrone e mappature delle sorgenti degli eventi, Step Functions offre una gestione degli errori più sofisticata per flussi di lavoro complessi. È possibile configurare nuovi tentativi automatici con backoff esponenziale e impostare politiche di nuovo tentativo diverse per diversi tipi di errori. Quando i tentativi sono esauriti, utilizza per indirizzare gli errori Catch verso uno stato di fallback. Ciò è particolarmente utile quando è necessaria una gestione degli errori a livello di flusso di lavoro che coordini più funzioni e servizi.

Per ulteriori informazioni sulla gestione degli errori della funzione Lambda in una macchina a stati, vedere Gestione degli errori in The AWS Step Functions Workshop.

Una singola funzione Lambda gestisce tutto quanto segue:

  • Tentativi di chiamare un servizio di elaborazione dei pagamenti

  • Se il servizio di pagamento non è disponibile, la funzione attende e riprova più tardi.

  • Implementa un backoff esponenziale personalizzato per il tempo di attesa

  • Dopo che tutti i tentativi sono falliti, catch l'errore e scegli un altro flusso

Utilizza una singola funzione Lambda incentrata esclusivamente sull'elaborazione dei pagamenti. Step Functions gestisce la gestione degli errori tramite:

Esempio grafico del flusso di lavoro
Grafico del flusso di lavoro di Step Functions per l'elaborazione dei pagamenti con tre risultati: pagamento riuscito, pagamento non valido e pagamento fallito

Flussi di lavoro condizionali e approvazioni umane

Utilizza lo stato Step Functions Choice per indirizzare i flussi di lavoro in base all'output della funzione e il suffisso waitForTask Token per sospendere i flussi di lavoro per decisioni umane. Ad esempio, per elaborare una richiesta di aumento del limite di credito, utilizza una funzione Lambda per valutare i fattori di rischio. Quindi, utilizza Step Functions per indirizzare le richieste ad alto rischio all'approvazione manuale e le richieste a basso rischio all'approvazione automatica.

Per implementare un flusso di lavoro di esempio che utilizza un modello di integrazione dei token di attività di callback, consulta Callback with Task Token in The Workshop. AWS Step Functions

Una singola funzione Lambda gestisce un flusso di lavoro di approvazione complesso mediante:

  • Implementazione della logica condizionale annidata per valutare le richieste di credito

  • Richiamo di diverse funzioni di approvazione in base agli importi delle richieste

  • Gestione di più percorsi di approvazione e punti decisionali

  • Monitoraggio dello stato delle approvazioni in sospeso

  • Implementazione del timeout e della logica di notifica per le approvazioni

Utilizza tre funzioni Lambda: una per valutare il rischio di ogni richiesta, una per approvare le richieste a basso rischio e una per indirizzare le richieste ad alto rischio a un manager per la revisione. Step Functions gestisce il flusso di lavoro tramite:

  • Utilizzo degli stati Choice per indirizzare le richieste in base all'importo e al livello di rischio

  • Sospensione dell'esecuzione in attesa dell'approvazione umana

  • Gestione dei timeout per le approvazioni in sospeso

  • Fornire visibilità sullo stato attuale di ogni richiesta

Esempio grafico del flusso di lavoro
Grafico del flusso di lavoro di Step Functions che mostra la valutazione delle richieste di credito che passa all'approvazione automatica o all'approvazione del manager in base al rischio

Elaborazione parallela

Step Functions offre tre modi per gestire l'elaborazione parallela:

  • Lo stato Parallel esegue più rami del flusso di lavoro contemporaneamente. Usalo quando devi eseguire diverse funzioni in parallelo, come la generazione di miniature durante l'estrazione dei metadati delle immagini.

  • Lo stato Inline Map elabora matrici di dati con un massimo di 40 iterazioni simultanee. Utilizzatelo per set di dati di piccole e medie dimensioni in cui è necessario eseguire la stessa operazione su ciascun elemento.

  • Lo stato Distributed Map gestisce l'elaborazione parallela su larga scala con un massimo di 10.000 esecuzioni simultanee, supportando sia gli array JSON che le origini dati Amazon Simple Storage Service (Amazon S3) Simple Storage Service (Amazon S3). Usalo quando elabori set di dati di grandi dimensioni o quando hai bisogno di una maggiore concorrenza.

Una singola funzione Lambda tenta di gestire l'elaborazione parallela mediante:

  • Richiamo simultaneo di più funzioni di elaborazione delle immagini

  • Implementazione di una logica di esecuzione parallela personalizzata

  • Gestione dei timeout e degli errori per ogni attività parallela

  • Raccolta e aggregazione dei risultati di tutte le funzioni

Usa tre funzioni Lambda: una per creare un'immagine in miniatura, una per aggiungere una filigrana e una per estrarre i metadati. Step Functions gestisce queste funzioni tramite:

  • Esecuzione simultanea di tutte le funzioni utilizzando lo stato Parallel

  • Raccolta dei risultati da ciascuna funzione in un array ordinato

  • Gestione dei timeout e degli errori in tutte le esecuzioni parallele

  • Procedere solo quando tutti i rami paralleli sono completi

Esempio grafico del flusso di lavoro
Grafico del flusso di lavoro di Step Functions con tre funzioni Lambda parallele: creazione di miniature, aggiunta di filigrana ed estrazione di metadati

Quando non usare Step Functions con Lambda

Non tutte le applicazioni basate su Lambda traggono vantaggio dall'utilizzo di Step Functions. Considerate questi scenari quando scegliete l'architettura dell'applicazione.

Applicazioni semplici

Per le applicazioni che non richiedono un'orchestrazione complessa, l'utilizzo di Step Functions potrebbe aggiungere complessità non necessarie. Ad esempio, se stai semplicemente elaborando messaggi da una coda Amazon SQS o rispondendo a eventi EventBridge Amazon, puoi configurare questi servizi per richiamare direttamente le tue funzioni Lambda. Allo stesso modo, se l'applicazione è composta solo da una o due funzioni Lambda con una gestione semplice degli errori, l'invocazione diretta Lambda o le architetture basate sugli eventi potrebbero essere più semplici da implementare e gestire.

Elaborazione di dati complessi

Puoi utilizzare lo stato Step Functions Distributed Map per elaborare contemporaneamente set di dati Amazon S3 di grandi dimensioni con funzioni Lambda. Ciò è efficace per molti carichi di lavoro paralleli su larga scala, inclusa l'elaborazione di dati semistrutturati come file JSON o CSV. Tuttavia, per trasformazioni di dati più complesse o analisi avanzate, prendi in considerazione queste alternative:

Carichi di lavoro che richiedono un uso intensivo della CPU

Sebbene Step Functions sia in grado di orchestrare attività che richiedono un uso intensivo della CPU, le funzioni Lambda potrebbero non essere adatte a questi carichi di lavoro a causa delle risorse limitate della CPU. Per le operazioni ad alta intensità di calcolo all'interno dei flussi di lavoro, prendi in considerazione queste alternative:

  • Orchestrazione dei container: usa Step Functions per gestire le attività di Amazon Elastic Container Service (Amazon ECS) per risorse di elaborazione più coerenti e scalabili.

  • Elaborazione in batch: integrazione AWS Batch con Step Functions per la gestione di processi batch ad alta intensità di calcolo che richiedono un utilizzo prolungato della CPU.