

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

# Iterare un ciclo con una funzione Lambda in Step Functions
<a name="tutorial-create-iterate-pattern-section"></a>

In questo tutorial, implementi un modello di progettazione che utilizza una macchina a stati e una funzione AWS Lambda per eseguire l'iterazione di un loop un determinato numero di volte. 

Utilizza questo modello di progettazione ogni volta che devi tenere traccia del numero di loop in una macchina a stati. Questa implementazione può consentirti di suddividere task di grandi dimensioni o esecuzioni di lungo durata in blocchi più piccoli oppure terminare un'esecuzione dopo un determinato numero di eventi. È possibile utilizzare un'implementazione simile per terminare e riavviare periodicamente un'esecuzione di lunga durata per evitare il superamento delle quote di servizio per AWS Step Functions AWS Lambda, o altri servizi. AWS 

Prima di iniziare, segui il [Creazione di una macchina a stati Step Functions che utilizza Lambda](tutorial-creating-lambda-state-machine.md) tutorial per assicurarti di avere familiarità con l'uso congiunto di Lambda e Step Functions.

## Passaggio 1: creare una funzione Lambda per iterare un conteggio
<a name="create-iterate-pattern-step-1"></a>

Utilizzando una funzione Lambda è possibile tenere traccia del numero di iterazioni di un ciclo nella macchina a stati. La seguente funzione Lambda riceve valori di input per `count``index`, e. `step` Restituisce quindi tali valori con un `index` aggiornato e un valore booleano denominato `continue`. La funzione Lambda viene impostata `continue` su `true` se `index` è minore di. `count`

La macchina a stati implementa quindi uno stato `Choice` che esegue alcune logiche di applicazione se `continue` è `true` o che termina se è `false`.

### Creazione della funzione Lambda
<a name="create-iterate-pattern-create-lambda-function"></a>

1. Accedi alla [console Lambda](https://console.aws.amazon.com/lambda/home), quindi scegli **Crea** funzione.

1. Nella pagina **Create function (Crea funzione)**, scegliere **Author from scratch (Crea da zero)**.

1. Nella sezione **Informazioni di base**, configura la tua funzione Lambda come segue:

   1. Nel campo **Function name (Nome funzione)**, immettere `Iterator`.

   1. In **Runtime** scegli **Node.js**.

   1. In **Modifica ruolo di esecuzione predefinito**, scegli **Crea un nuovo ruolo con autorizzazioni Lambda di base**.

   1. Scegli **Crea funzione**.

1. Copia il codice seguente per la funzione Lambda nel **codice sorgente.**

   ```
   export const handler = function (event, context, callback) {
     let index = event.iterator.index
     let step = event.iterator.step
     let count = event.iterator.count
    
     index = index + step
    
     callback(null, {
       index,
       step,
       count,
       continue: index < count
     })
   }
   ```

   Questo codice ammette valori di input per `count`, `index` e `step`. Incrementa l'`index` del valore di `step` e restituisce tali valori con il booleano `continue`. Il valore di `continue` è `true` se `index` è inferiore a `count`.

1. Seleziona **Implementa**.

## Fase 2: testare la funzione Lambda
<a name="create-iterate-pattern-step-2"></a>

Esegui la funzione Lambda con valori numerici per vederla in funzione. Puoi fornire valori di input per la tua funzione Lambda che imitano un'iterazione. 

### Per testare la tua funzione Lambda
<a name="create-iterate-pattern-test-lambda-function"></a>

1. Scegli **Test (Esegui test)**.

1. Nella finestra di dialogo **Configura evento di test**, immettete `TestIterator` nella casella **Nome evento**.

1. Sostituire i dati di esempio con quanto segue.

   ```
   {
     "Comment": "Test my Iterator function",
     "iterator": {
       "count": 10,
       "index": 5,
       "step": 1
     }
   }
   ```

   Tali valori simulano quelli generati da una macchina a stati durante un'iterazione. La funzione Lambda incrementa l'indice e restituisce `continue` quando `true` l'indice è inferiore a. `count` Per questo test, l'indice ha già subito un incremento a `5`. Il test verrà incrementato `6` e `index` impostato su. `continue` `true`

1. Scegli **Create** (Crea).

1. Scegli **Test** per testare la tua funzione Lambda.

   I risultati del test vengono visualizzati nella scheda **Risultati di esecuzione**. 

1. Scegli la scheda **Risultati di esecuzione** per vedere l'output.

   ```
   {
     "index": 6,
     "step": 1,
     "count": 10,
     "continue": true
   }
   ```
**Nota**  
Se impostate su `index` `9` e testate nuovamente, gli `index` incrementi saranno pari a `10` e `continue` saranno`false`.

## Fase 3: creazione di una macchina a stati
<a name="create-iterate-pattern-step-3"></a>

**Prima di lasciare la console Lambda...**  
Copia la funzione Lambda ARN. Incollalo in una nota. Questo valore servirà nella fase successiva.

Successivamente, creerai una macchina a stati con i seguenti stati:
+ `ConfigureCount`— Imposta i valori predefiniti per `count``index`, e`step`.
+ `Iterator`— Si riferisce alla funzione Lambda creata in precedenza, che trasmette i valori configurati in. `ConfigureCount`
+ `IsCountReached`— Uno stato di scelta che continua il ciclo o procede allo `Done` stato, in base al valore restituito dalla `Iterator` funzione.
+ `ExampleWork`— Un abbozzo per il lavoro che deve essere svolto. In questo esempio, il flusso di lavoro ha uno `Pass` stato, ma in una soluzione reale è probabile utilizzare un`Task`.
+ `Done`— Stato finale del flusso di lavoro.

Per creare la macchina a stati nella console:

1. Apri la [console Step Functions](https://console.aws.amazon.com/states/home), quindi scegli **Crea una macchina a stati**.
**Importante**  
La macchina a stati deve trovarsi nello stesso AWS account e nella stessa regione della funzione Lambda.

1. Seleziona il modello **Blank**.

1. Nel riquadro **Codice**, incolla il seguente codice JSON che definisce la macchina a stati.

   Per ulteriori informazioni su Amazon States Language, consulta [State Machine Structure](statemachine-structure.md).

   ```
   {
       "Comment": "Iterator State Machine Example",
       "StartAt": "ConfigureCount",
       "States": {
           
           "ConfigureCount": {
               "Type": "Pass",
               "Result": {
                   "count": 10,
                   "index": 0,
                   "step": 1
               },
               "ResultPath": "$.iterator",
               "Next": "Iterator"
           },
           "Iterator": {
               "Type": "Task",
               "Resource": "arn:aws:lambda:region:123456789012:function:Iterate",
               "ResultPath": "$.iterator",
               "Next": "IsCountReached"
           },
           "IsCountReached": {
               "Type": "Choice",
               "Choices": [
                   {
                       "Variable": "$.iterator.continue",
                       "BooleanEquals": true,
                       "Next": "ExampleWork"
                   }
               ],
               "Default": "Done"
           },
           "ExampleWork": {
               "Comment": "Your application logic, to run a specific number of times",
               "Type": "Pass",
               "Result": {
                 "success": true
               },
               "ResultPath": "$.result",
               "Next": "Iterator"
           },
           "Done": {
               "Type": "Pass",
               "End": true
             
           }
       }
   }
   ```

1. Sostituisci il `Iterator Resource` campo con l'ARN per la funzione `Iterator` Lambda che hai creato in precedenza.

1. Seleziona **Config** e inserisci un **nome** per la tua macchina a stati, ad esempio. `IterateCount`
**Nota**  
I nomi delle macchine a stati, delle esecuzioni e delle attività non devono superare gli 80 caratteri di lunghezza. Questi nomi devono essere univoci per l'account e la AWS regione e non devono contenere nessuno dei seguenti elementi:  
Spazi bianchi
Caratteri jolly () `? *`
Caratteri tra parentesi quadre () `< > { } [ ]`
Caratteri speciali () `" # % \ ^ | ~ ` $ & , ; : /`
Caratteri di controllo (`\\u0000`- `\\u001f` o `\\u007f` -`\\u009f`).
Step Functions accetta nomi per macchine a stati, esecuzioni, attività ed etichette che contengono caratteri non ASCII. Poiché tali caratteri impediranno ad Amazon CloudWatch di registrare i dati, consigliamo di utilizzare solo caratteri ASCII per tenere traccia delle metriche di Step Functions.

1. **Per **Type**, accetta il valore predefinito di Standard.** Per **Autorizzazioni**, scegli **Crea nuovo ruolo**.

1. Scegli **Crea**, quindi **Conferma** le creazioni del ruolo.

## Fase 4: avvio di una nuova esecuzione
<a name="create-iterate-pattern-step-4"></a>

Una volta creata la macchina a stati, è possibile avviare un'esecuzione.

1. Nella **IterateCount**pagina, scegli **Avvia esecuzione**.

1. (Facoltativo) Immettete un nome di esecuzione personalizzato per sovrascrivere il valore predefinito generato.
**Nomi e log non ASCII**  
Step Functions accetta nomi per macchine a stati, esecuzioni, attività ed etichette che contengono caratteri non ASCII. Poiché tali caratteri impediranno ad Amazon CloudWatch di registrare i dati, consigliamo di utilizzare solo caratteri ASCII per tenere traccia delle metriche di Step Functions.

1. Selezionare **Start Execution (Avvia esecuzione)**.

   Viene avviata una nuova esecuzione della macchina a stati che mostra l'esecuzione in corso.  
![\[Grafico a stati della macchina che mostra lo stato blu dell'iteratore che indica lo stato in corso.\]](http://docs.aws.amazon.com/it_it/step-functions/latest/dg/images/tutorial-create-iterate-running.png)

   L'esecuzione aumenta in fasi, tracciando il conteggio utilizzando la funzione Lambda. In ogni iterazione, esegue l'esempio di lavoro a cui si fa riferimento nello stato `ExampleWork` della macchina a stati. 

   Quando il conteggio raggiunge il numero specificato nello stato `ConfigureCount` della macchina a stati, l'iterazione viene arrestata e l'esecuzione risulta completata.   
![\[Il grafico della macchina a stati mostra gli stati Iterator e Done in verde per indicare che entrambi hanno avuto successo.\]](http://docs.aws.amazon.com/it_it/step-functions/latest/dg/images/tutorial-create-iterate-done.png)