View a markdown version of this page

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

AWS Step Functions fornisce un'orchestrazione visiva del flusso di lavoro per coordinare le funzioni Lambda con altri servizi. AWS Con integrazioni native con oltre 220 AWS servizi e un'infrastruttura completamente gestita e senza manutenzione, Step Functions è ideale quando hai bisogno di una progettazione visiva del flusso di lavoro e integrazioni di servizi completamente gestite.

Per l'orchestrazione utilizzando linguaggi di programmazione standard all'interno di Lambda in cui la logica del flusso di lavoro convive con la logica aziendale, prendi in considerazione le funzioni durevoli di Lambda. Funzioni durevoli Lambda Per assistenza nella scelta tra queste opzioni, consulta Durable functions o Step Functions.

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 tue funzioni e gestisce gli errori in ogni fase. Questa separazione semplifica la visualizzazione, la modifica e la manutenzione dei flussi di lavoro man mano che diventano più complessi.

Quando usare Step Functions con Lambda

I seguenti scenari sono buoni esempi di quando Step Functions è particolarmente adatto per orchestrare Lambda-based le applicazioni.

Elaborazione sequenziale

L'elaborazione sequenziale è quando un'attività deve essere completata prima di poter 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:

  • Richiamare altre funzioni Lambda in sequenza

  • Analisi e convalida delle risposte di ciascuna funzione

  • Implementazione della logica di gestione e ripristino degli errori

  • 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 mediante:

  • Esecuzione delle attività nella sequenza corretta

  • Passaggio di dati tra funzioni

  • Implementazione della gestione degli errori in ogni fase

  • Utilizzo degli stati Choice per garantire che solo gli ordini validi procedano 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 i percorsi di successo e fallimento.
Nota

Code-first alternativa: per l'elaborazione sequenziale con checkpoint e riprova basati su codice, vedi i passaggi di Lambda durable functions. Concetti di base

Gestione complessa degli errori

Mentre Lambda fornisce funzionalità di ripetizione 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 i tentativi automatici con backoff esponenziale e impostare politiche di ripetizione diverse per diversi tipi di errori. Quando i tentativi sono esauriti, utilizzalo per indirizzare gli errori Catch a uno stato di fallback. https://docs.aws.amazon.com/step-functions/latest/dg/concepts-error-handling.html#error-handling-fallback-states Ciò è particolarmente utile quando è necessaria una gestione degli errori a livello di flusso di lavoro che coordini più funzioni e servizi.

Per saperne di più sulla gestione degli errori delle funzioni Lambda in una macchina a stati, vedi Gestione degli errori in The Workshop. AWS Step Functions

Una singola funzione Lambda gestisce tutto quanto segue:

  • Tenta 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 falliscono, individua l'errore e scegli un altro flusso

Utilizza un'unica funzione Lambda focalizzata 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 non riuscito.
Nota

Code-first alternativa: le funzioni durevoli forniscono la gestione degli errori try-catch con strategie di riprova configurabili. Vedi Gestione degli errori nelle funzioni durevoli.

Flussi di lavoro condizionali e approvazioni umane

Usa lo stato Step Functions Choice per indirizzare i flussi di lavoro in base all'output delle funzioni e al ForTaskToken suffisso di attesa per mettere in pausa i flussi di lavoro per prendere 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 pattern di integrazione del token di callback task, vedi Callback with Task Token in The Workshop. AWS Step Functions

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

  • Implementazione di una 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 della logica di timeout e 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 responsabile 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 corrente di ogni richiesta

Esempio grafico del flusso di lavoro
Grafico del flusso di lavoro di Step Functions che mostra la valutazione della richiesta di credito che si dirama fino all'approvazione automatica o da parte del manager in base al rischio.
Nota

Code-first alternativa: le funzioni durevoli supportano i callback per flussi di lavoro «human-in-the-loop». Vedi Callback nelle funzioni durevoli.

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. Usalo per set di dati di piccole e medie dimensioni in cui devi eseguire la stessa operazione su ogni 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). Utilizzalo 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:

  • Richiamando contemporaneamente più funzioni di elaborazione delle immagini

  • Implementazione della logica di esecuzione parallela personalizzata

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

  • Raccolta e aggregazione dei risultati di tutte le funzioni

Utilizza 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 di ciascuna funzione in una matrice ordinata

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

  • Procedendo solo quando tutti i rami paralleli sono completi

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

Code-first alternativa: le funzioni durevoli forniscono operazioni. parallel() map() Vedere Esecuzione parallela.

Quando non usare Step Functions con Lambda

Non tutte le Lambda-based applicazioni traggono vantaggio dall'utilizzo di Step Functions. Considerate questi scenari nella scelta dell'architettura dell'applicazione.

Applicazioni semplici

Nota

Per i flussi di lavoro che non richiedono una progettazione visiva o integrazioni estese di servizi, le funzioni durevoli di Lambda potrebbero essere un'alternativa più semplice che mantiene la logica del flusso di lavoro nel codice all'interno di Lambda.

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 EventBridge eventi Amazon, puoi configurare questi servizi per richiamare direttamente le tue funzioni Lambda. Allo stesso modo, se la tua applicazione è composta solo da una o due funzioni Lambda con una semplice gestione degli errori, l'invocazione diretta di Lambda o le architetture basate sugli eventi potrebbero essere più semplici da implementare e mantenere.

Elaborazione complessa dei dati

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, considera queste alternative:

  • Pipeline di trasformazione dei dati: da utilizzare AWS Glue per lavori ETL che elaborano dati strutturati o semistrutturati da più fonti. AWS Glue è particolarmente utile quando sono necessarie funzionalità integrate di gestione del catalogo dei dati e degli schemi.

  • Analisi dei dati: usa Amazon EMR per l'analisi dei dati su scala di petabyte, soprattutto quando hai bisogno di strumenti Apache Hadoop ecosistemici o per carichi di lavoro di machine learning che superano i limiti di memoria di Lambda. Configurare la memoria di una funzione Lambda

CPU-intensive carichi di lavoro

Sebbene Step Functions sia in grado di orchestrare CPU-intensive le attività, le funzioni Lambda potrebbero non essere adatte a questi carichi di lavoro a causa delle risorse CPU limitate. Per operazioni ad alta intensità di calcolo all'interno dei flussi di lavoro, considera queste alternative:

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

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