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
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 per assicurarti di avere familiarità con l'uso congiunto di Lambda e Step Functions.
Passaggio 1: creare una funzione Lambda per iterare un conteggio
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 countindex, 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
-
Accedi alla console Lambda
, quindi scegli Crea funzione. -
Nella pagina Create function (Crea funzione), scegliere Author from scratch (Crea da zero).
-
Nella sezione Informazioni di base, configura la tua funzione Lambda come segue:
-
Nel campo Function name (Nome funzione), immettere
Iterator. -
In Runtime scegli Node.js.
-
In Modifica ruolo di esecuzione predefinito, scegli Crea un nuovo ruolo con autorizzazioni Lambda di base.
-
Scegli Crea funzione.
-
-
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,indexestep. Incrementa l'indexdel valore distepe restituisce tali valori con il booleanocontinue. Il valore dicontinueètrueseindexè inferiore acount. -
Seleziona Deploy (Implementa).
Fase 2: testare la funzione Lambda
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
-
Scegli Test (Esegui test).
-
Nella finestra di dialogo Configura evento di test, immettete
TestIteratornella casella Nome evento. -
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
continuequandotruel'indice è inferiore a.countPer questo test, l'indice ha già subito un incremento a5. Il test verrà incrementato6eindeximpostato su.continuetrue -
Scegli Create (Crea).
-
Scegli Test per testare la tua funzione Lambda.
I risultati del test vengono visualizzati nella scheda Risultati di esecuzione.
-
Scegli la scheda Risultati di esecuzione per vedere l'output.
{ "index": 6, "step": 1, "count": 10, "continue": true }Nota
Se impostate su
index9e testate nuovamente, gliindexincrementi saranno pari a10econtinuesarannofalse.
Fase 3: creazione di una macchina a stati
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 percountindex, estep. -
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 alloDonestato, in base al valore restituito dallaIteratorfunzione. -
ExampleWork— Un abbozzo per il lavoro che deve essere svolto. In questo esempio, il flusso di lavoro ha unoPassstato, ma in una soluzione reale è probabile utilizzare unTask. -
Done— Stato finale del flusso di lavoro.
Per creare la macchina a stati nella console:
-
Apri la console Step Functions
, 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.
-
Seleziona il modello Blank.
-
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.
{ "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:", "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 } } }region:123456789012:function:Iterate -
Sostituisci il
Iterator Resourcecampo con l'ARN per la funzioneIteratorLambda che hai creato in precedenza. -
Seleziona Config e inserisci un nome per la tua macchina a stati, ad esempio.
IterateCountNota
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-\\u001fo\\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.
-
-
Per Type, accetta il valore predefinito di Standard. Per Autorizzazioni, scegli Crea nuovo ruolo.
-
Scegli Crea, quindi Conferma le creazioni del ruolo.
Fase 4: avvio di una nuova esecuzione
Una volta creata la macchina a stati, è possibile avviare un'esecuzione.
-
Nella IterateCountpagina, scegli Avvia esecuzione.
-
(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.
-
Selezionare Start Execution (Avvia esecuzione).
Viene avviata una nuova esecuzione della macchina a stati che mostra l'esecuzione in corso.
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
ExampleWorkdella macchina a stati.Quando il conteggio raggiunge il numero specificato nello stato
ConfigureCountdella macchina a stati, l'iterazione viene arrestata e l'esecuzione risulta completata.