Iterare un ciclo con Lambda - AWS Step Functions

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 Lambda

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 o altri servizi. AWS Lambda 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

  1. Accedi alla console Lambda, quindi scegli Crea funzione.

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

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

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

    2. In Runtime scegli Node.js.

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

    4. Scegli Crea funzione.

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

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

  1. Scegli Test (Esegui test).

  2. Nella finestra di dialogo Configura evento di test, immettete TestIterator nella casella Nome evento.

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

  4. Scegli Crea.

  5. Scegli Test per testare la tua funzione Lambda.

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

  6. 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 sarannofalse.

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 per countindex, 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 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 unTask.

  • Done— Stato finale del flusso di lavoro.

Per creare la macchina a stati nella console:

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

  2. Seleziona il modello Blank.

  3. 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:us-east-1: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 } } }
  4. Sostituisci il Iterator Resource campo con l'ARN per la funzione Iterator Lambda che hai creato in precedenza.

  5. 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).

    Se la macchina a stati è di tipo Express, è possibile fornire lo stesso nome a più esecuzioni della macchina a stati. Step Functions genera un ARN di esecuzione univoco per ogni esecuzione della macchina a stati Express, anche se più esecuzioni hanno lo stesso nome.

    Step Functions consente di creare nomi per macchine a stati, esecuzioni e attività ed etichette che contengono caratteri non ASCII. Questi nomi non ASCII non funzionano con Amazon. CloudWatch Per assicurarti di poter tenere traccia delle CloudWatch metriche, scegli un nome che utilizzi solo caratteri ASCII.

  6. Per Tipo, accettate il valore predefinito di Standard. Per Autorizzazioni, scegli Crea nuovo ruolo.

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

  1. Nella IterateCountpagina, scegli Avvia esecuzione.

  2. (Facoltativo) Per identificare l'esecuzione, puoi specificarne un nome nella casella Nome. Per impostazione predefinita, Step Functions genera automaticamente un nome di esecuzione univoco.

    Nota

    Step Functions consente di creare nomi per macchine a stati, esecuzioni e attività ed etichette che contengono caratteri non ASCII. Questi nomi non ASCII non funzionano con Amazon. CloudWatch Per assicurarti di poter tenere traccia delle CloudWatch metriche, scegli un nome che utilizzi solo caratteri ASCII.

  3. Selezionare Start Execution (Avvia esecuzione).

    Viene avviata una nuova esecuzione della macchina a stati che mostra l'esecuzione in corso.

    Visualizzazione grafica della macchina a stati, che mostra lo stato di Iterator in blu per indicare lo stato 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 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.

    Visualizzazione grafica della macchina a stati, che mostra lo stato Iterator e lo stato Done in verde per indicare che entrambi hanno avuto successo.