

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
<a name="with-step-functions"></a>

AWS Step Functions fornisce l'orchestrazione visiva del flusso di lavoro per coordinare le funzioni Lambda con altri servizi. AWS Con integrazioni native per oltre 220 AWS servizi e un'infrastruttura completamente gestita e senza manutenzione, Step Functions è ideale quando è necessario progettare flussi di lavoro visivi 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 Lambda.](durable-functions.md) Per informazioni sulla scelta tra queste opzioni, consulta [Durable functions o Step Functions](durable-step-functions.md).

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
<a name="when-to-use-step-functions"></a>

Gli scenari seguenti sono buoni esempi di quando Step Functions è particolarmente adatto per l'orchestrazione di applicazioni basate su Lambda.
+ [Elaborazione sequenziale](#sequential-processing)
+ [Gestione complessa degli errori](#complex-error-handling)
+ [Flussi di lavoro condizionali e approvazioni umane](#conditional-workflows-human-approvals)
+ [Elaborazione parallela](#parallel-processing)

### Elaborazione sequenziale
<a name="sequential-processing"></a>

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.

#### Esempio anti-pattern
<a name="anti-pattern-sequential"></a>

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

#### Approccio consigliato
<a name="recommended-sequential"></a>

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 funzioni
+ Implementazione della gestione degli errori in ogni fase
+ L'utilizzo di [Choice](https://docs.aws.amazon.com/step-functions/latest/dg/state-choice.html) indica che solo gli ordini validi procedono al pagamento

**Example grafico del flusso di lavoro**  

![\[\]](http://docs.aws.amazon.com/it_it/lambda/latest/dg/images/sequential_workflow.png)


**Nota**  
**Alternativa basata sul codice: per l'elaborazione sequenziale con checkpoint e ripetizione** [basati sul codice, consulta le fasi delle funzioni durevoli di Lambda.](durable-basic-concepts.md)

### Gestione complessa degli errori
<a name="complex-error-handling"></a>

Mentre Lambda offre [funzionalità di ripetizione dei tentativi per chiamate asincrone e mappature delle sorgenti degli eventi, Step](invocation-retries.md) 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](https://docs.aws.amazon.com/step-functions/latest/dg/concepts-error-handling.html#error-handling-retrying-after-an-error) diverse per diversi tipi di errori. [Quando i tentativi sono esauriti, utilizza per indirizzare gli errori `Catch` verso 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 ulteriori informazioni sulla gestione degli errori della funzione Lambda in una macchina a stati, vedere [Gestione degli errori](https://catalog.workshops.aws/stepfunctions/handling-errors) in *The AWS Step Functions * Workshop.

#### Esempio anti-pattern
<a name="anti-pattern-error-handling"></a>

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

#### Approccio consigliato
<a name="recommended-error-handling"></a>

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](https://docs.aws.amazon.com/step-functions/latest/dg/concepts-error-handling.html#error-handling-retrying-after-an-error)
+ 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

**Example grafico del flusso di lavoro**  

![\[\]](http://docs.aws.amazon.com/it_it/lambda/latest/dg/images/error_handling_workflow.png)


**Nota**  
**Alternativa Code-first:** le funzioni durevoli forniscono la gestione degli errori try-catch con strategie di riprova configurabili. [Vedi Gestione degli errori nelle funzioni durevoli.](durable-execution-sdk-retries.md)

### Flussi di lavoro condizionali e approvazioni umane
<a name="conditional-workflows-human-approvals"></a>

Utilizza lo [stato Step Functions Choice](https://docs.aws.amazon.com/step-functions/latest/dg/state-choice.html) per indirizzare i flussi di lavoro in base all'output della funzione e il [suffisso waitForTask Token](https://docs.aws.amazon.com/step-functions/latest/dg/connect-to-resource.html#connect-wait-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](https://catalog.workshops.aws/stepfunctions/integrating-services/3-callback-token) Token in The Workshop. AWS Step Functions * 

#### Esempio anti-pattern
<a name="anti-pattern-conditional"></a>

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

#### Approccio consigliato
<a name="recommended-conditional"></a>

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](https://docs.aws.amazon.com/step-functions/latest/dg/state-choice.html) 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

**Example grafico del flusso di lavoro**  

![\[\]](http://docs.aws.amazon.com/it_it/lambda/latest/dg/images/conditional_workflow.png)


**Nota**  
**Alternativa Code-first:** le funzioni durevoli supportano i callback per i flussi di lavoro. human-in-the-loop Vedi [Callback](durable-execution-sdk.md) nelle funzioni durevoli.

### Elaborazione parallela
<a name="parallel-processing"></a>

Step Functions offre tre modi per gestire l'elaborazione parallela:
+ [Lo stato Parallel](https://docs.aws.amazon.com/step-functions/latest/dg/state-parallel.html) 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](https://docs.aws.amazon.com/step-functions/latest/dg/state-map-inline.html) 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](https://docs.aws.amazon.com/step-functions/latest/dg/state-map-distributed.html) 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.

#### Esempio anti-pattern
<a name="anti-pattern-parallel"></a>

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

#### Approccio consigliato
<a name="recommended-parallel"></a>

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](https://docs.aws.amazon.com/step-functions/latest/dg/state-parallel.html)
+ 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

**Example grafico del flusso di lavoro**  

![\[\]](http://docs.aws.amazon.com/it_it/lambda/latest/dg/images/parallel_workflow.png)


**Nota**  
**Alternativa incentrata sul codice**: funzionalità e operazioni durevoli. `parallel()` `map()` Vedere Esecuzione [parallela](durable-execution-sdk.md).

## Quando non usare Step Functions con Lambda
<a name="when-not-to-use"></a>

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](#simple-applications)
+ [Elaborazione di dati complessi](#complex-data-processing)
+ [Carichi di lavoro che richiedono un uso intensivo della CPU](#cpu-intensive)

### Applicazioni semplici
<a name="simple-applications"></a>

**Nota**  
Per i flussi di lavoro che non richiedono progettazione visiva o integrazioni estese di servizi, le [funzioni durevoli Lambda](durable-functions.md) possono 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 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
<a name="complex-data-processing"></a>

Puoi utilizzare lo stato Step Functions [Distributed Map](https://docs.aws.amazon.com/step-functions/latest/dg/state-map-distributed.html) 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 hai bisogno di strumenti Apache Hadoop ecosistemici o per carichi di lavoro di machine learning che superano i limiti di memoria di Lambda.](configuration-memory.md)

### Carichi di lavoro che richiedono un uso intensivo della CPU
<a name="cpu-intensive"></a>

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.