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

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
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:
Riprovare automaticamente le attività non riuscite con periodi di backoff configurabili
Applicazione di politiche di riprova diverse in base ai tipi di errore
Instradamento di diversi tipi di errori verso stati di fallback appropriati
Mantenimento dello stato e della cronologia della gestione degli errori
Esempio grafico del flusso di lavoro

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
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

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

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:
-
Pipeline di trasformazione dei dati: utilizzate AWS Glue per lavori ETL che elaborano dati strutturati o semistrutturati provenienti da più fonti. AWS Glue è particolarmente utile quando sono necessarie funzionalità integrate di gestione del catalogo di dati e dello schema.
-
Analisi dei dati: usa Amazon EMR per analisi dei dati su scala petabyte, soprattutto quando ne hai bisogno Apache Hadoop strumenti ecosistemici o per carichi di lavoro di machine learning che superano i limiti di memoria di Lambda.
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.