Tutorial 3: Implementa una condizione if-else nel tuo flusso di lavoro - 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à.

Tutorial 3: Implementa una condizione if-else nel tuo flusso di lavoro

Puoi implementare le condizioni if-else nei tuoi flussi di lavoro utilizzando lo stato. Choice Determina il percorso di esecuzione del flusso di lavoro in base al fatto che una condizione specificata sia vera o falsa.

In questo tutorial, aggiungerai la logica condizionale per determinare se l'importo del credito applicato restituito dalla funzione RandomNumberforCredit Lambda utilizzata nel Tutorial 2 supera un limite di soglia specifico. Se la quantità supera il limite di soglia, la domanda richiede l'intervento umano per l'approvazione. In caso contrario, l'applicazione viene approvata automaticamente e passa alla fase successiva.

Simulerai la fase di interazione umana sospendendo l'esecuzione del flusso di lavoro fino alla restituzione di un task token. Per fare ciò, passerai un task token all'integrazione AWS SDK che utilizzerai in questo tutorial, che è Amazon Simple Notification Service. L'esecuzione del flusso di lavoro verrà sospesa fino a quando non riceverà nuovamente il task token con una chiamata SendTaskSuccessAPI. Per ulteriori informazioni sull'utilizzo dei token di attività, vedereAttendere un callback con il token dell’attività.

Poiché hai già definito i passaggi per l'approvazione umana e l'approvazione automatica nel tuo prototipo di flusso di lavoro, in questo tutorial crei innanzitutto un argomento Amazon SNS che riceve il token di callback. Quindi, si crea una funzione Lambda per implementare la funzionalità di callback. Infine, aggiorni il prototipo del tuo flusso di lavoro aggiungendo i dettagli di queste Servizio AWS integrazioni.

Fase 1: Crea un argomento Amazon SNS che riceva il token di callback

Per implementare la fase di interazione umana, pubblicherai su un argomento di Amazon Simple Notification Service e passerai il token dell'attività di callback a questo argomento. L'attività di callback interromperà l'esecuzione del flusso di lavoro fino a quando il token dell'attività non verrà restituito con un payload.

  1. Apri la console Amazon SNS e crea un tipo di argomento Standard. Per informazioni sulla creazione di un argomento, consulta Creare un argomento Amazon SNS nella Amazon Simple Notification Service Developer Guide.

  2. Specifica il nome dell'argomento comeTaskTokenTopic.

  3. Assicurati di copiare l'argomento ARN e di salvarlo in un file di testo. Avrai bisogno dell'argomento ARN mentre specifichi l'integrazione del servizio per lo stato di attesa di approvazione umana. Di seguito è riportato un esempio di argomento ARN:

    arn:aws:sns:us-east-2:123456789012:TaskTokenTopic
  4. Crea un abbonamento via e-mail per l'argomento, quindi conferma l'iscrizione. Per informazioni sulla sottoscrizione a un argomento, consulta Creare un abbonamento all'argomento nella Amazon Simple Notification Service Developer Guide.

Passaggio 2: creare una funzione Lambda per gestire il callback

Per gestire la funzionalità di callback, definirai una funzione Lambda e aggiungerai l'argomento Amazon SNS che hai creato nel passaggio 1 come trigger per questa funzione. Quando pubblichi sull'argomento Amazon SNS con un task token, la funzione Lambda viene richiamata con il payload del messaggio pubblicato.

Fase 2.1: Creare la funzione Lambda per gestire il callback

In questa funzione, elaborerai la richiesta di approvazione del limite di credito e restituirai il risultato della richiesta con esito positivo con la chiamata SendTaskSuccessAPI. Questa funzione Lambda restituirà anche il task token ricevuto dall'argomento Amazon SNS.

Per semplicità, la funzione Lambda utilizzata per la fase di interazione umana approva automaticamente qualsiasi attività e restituisce il token dell'operazione con una chiamata SendTaskSuccess API. È possibile denominare la funzione Lambda comecallback-human-approval.

  1. In una nuova scheda o finestra, apri la console Lambda e crea una funzione Lambda Node.js 16.x intitolata. callback-human-approval Per informazioni sulla creazione di una funzione Lambda utilizzando la console, vedi Creare una funzione Lambda nella console nella Guida per gli AWS Lambdasviluppatori.

  2. Nella callback-human-approvalpagina, sostituisci il codice esistente nell'area Codice sorgente con il codice seguente.

    // Sample Lambda function that will automatically approve any task whenever a message is published to an Amazon SNS topic by Step Functions. console.log('Loading function'); const AWS = require('aws-sdk'); const resultMessage = "Successful"; exports.handler = async (event, context) => { const stepfunctions = new AWS.StepFunctions(); let message = JSON.parse(event.Records[0].Sns.Message); let taskToken = message.TaskToken; console.log('Message received from SNS:', message); console.log('Task token: ', taskToken); // Return task token to Step Functions let params = { output: JSON.stringify(resultMessage), taskToken: taskToken }; console.log('JSON Returned to Step Functions: ', params); let myResult = await stepfunctions.sendTaskSuccess(params).promise(); console.log('State machine - callback completed..'); return myResult; };
  3. Tieni aperta questa finestra ed esegui i passaggi indicati nella sezione successiva per ulteriori azioni.

Fase 2.2: aggiungi l'argomento Amazon SNS come trigger per la funzione Lambda

Quando aggiungi l'argomento Amazon SNS che hai creato nella fase 1 di questo tutorial come trigger per la funzione Lambda creata nella fase 2.1 di questo tutorial, la funzione Lambda viene attivata ogni volta che pubblichi sull'argomento Amazon SNS. Quando pubblichi sull'argomento Amazon SNS con un task token, la funzione Lambda viene richiamata con il payload del messaggio pubblicato. Per ulteriori informazioni sulla configurazione dei trigger per le funzioni Lambda, consulta Configurazione dei trigger nella Guida per gli sviluppatori. AWS Lambda

  1. Nella sezione Panoramica delle funzioni della funzione callback-human-approval Lambda, scegli Aggiungi trigger.

  2. Dall'elenco a discesa dei trigger, scegli SNS come trigger.

  3. Per l'argomento SNS, inizia a digitare il nome dell'argomento Amazon SNS che hai creato nella fase 1 di questo tutorial e sceglilo dall'elenco a discesa visualizzato.

  4. Scegli Add (Aggiungi).

  5. Tieni aperta questa finestra ed esegui i passaggi indicati nella sezione successiva per ulteriori azioni.

Fase 2.3: Fornire le autorizzazioni necessarie per il ruolo IAM della funzione Lambda

È necessario fornire alla funzione callback-human-approval Lambda le autorizzazioni per accedere a Step Functions per restituire il task token insieme alla chiamata SendTaskSucess API.

  1. Nella callback-human-approvalpagina, scegli la scheda Configurazione, quindi scegli Autorizzazioni.

  2. In Ruolo di esecuzione, scegli il nome del ruolo per accedere alla pagina Ruoli della AWS Identity and Access Management console.

  3. Per aggiungere l'autorizzazione richiesta, scegli Aggiungi autorizzazioni, quindi scegli Allega criteri.

  4. Nella casella di ricerca, digita AWSStepFunctions e premi Invio.

  5. Scegli, AWSStepFunctionsFullAccessquindi scorri verso il basso per selezionare Allega politiche. Questo aggiunge la politica contenente l'autorizzazione necessaria per il ruolo della funzione callback-human-approval Lambda.

Passaggio 3: aggiorna il flusso di lavoro: aggiungi la logica delle condizioni if-else nello stato Choice

Nella console Step Functions, definisci la logica condizionale per il tuo flusso di lavoro utilizzando lo Choice stato. Se l'output restituito dalla funzione RandomNumberforCredit Lambda è inferiore a 5000, il credito richiesto viene approvato automaticamente. Se l'output restituito è maggiore o uguale a 5000, l'esecuzione del flusso di lavoro procede alla fase di interazione umana per l'approvazione del limite di credito.

Nello Choice stato, si utilizza un operatore di confronto per confrontare una variabile di input con un valore specifico. È possibile specificare la variabile di input come input di esecuzione durante l'avvio dell'esecuzione di una macchina a stati o utilizzare l'output di un passaggio precedente come input per il passaggio corrente. Per impostazione predefinita, l'output di un passaggio viene memorizzato in una variabile chiamataPayload. Per utilizzare il valore della Payload variabile per il confronto nello Choice stato, utilizzate la $ sintassi illustrata nella procedura seguente.

Per informazioni su come le informazioni fluiscono da uno stato all'altro e su come specificare input e output nei flussi di lavoro, vedere Tutorial 7: Configurazione di input e output e. Elaborazione di input e output in Step Functions

Nota

Se lo Choice stato utilizza una variabile di input specificata nell'input di esecuzione della macchina a stati per il confronto, utilizza la $.variable_name sintassi per eseguire il confronto. Ad esempio, per confrontare una variabile, ad esempiomyAge, usa la sintassi$.myAge.

Poiché in questo passaggio, lo Choice stato riceverà input dallo stato Ottieni limite di credito, utilizzerai la $ sintassi per la configurazione dello Choice stato. Per scoprire in che modo il risultato dell'esecuzione della macchina a stati differisce quando si utilizza la $.variable_name sintassi nella configurazione dello Choice stato per fare riferimento all'output di un passaggio precedente, vedere la Effettuare il debug del percorso non valido Errore di stato della scelta sezione del Tutorial 8.

Per aggiungere la logica delle condizioni if-else utilizzando lo stato Choice
  1. Apri la finestra della console Step Functions contenente il prototipo del flusso di lavoro in cui hai creato. Tutorial 1: Crea il prototipo per la tua macchina a stati

  2. Scegli il credito applicato >= 5000? state e nella scheda Configurazione, specificare la logica condizionale come segue:

    1. In Regole di scelta, scegli l'icona Modifica nel riquadro Regola #1 per definire la regola di prima scelta.

    2. Scegli Aggiungi condizioni.

    3. Nella finestra di dialogo Condizioni per la regola #1, per Variabile, immettere$.

    4. Per Operator, la scelta è inferiore a.

    5. Per Valore, scegli Numero costante, quindi inserisci il 5000 campo accanto all'elenco a discesa Valore.

    6. Scegli Salva condizioni.

    7. Per lo stato Quindi successivo è: elenco a discesa, scegli Limite di approvazione automatica.

    8. Scegliete Aggiungi nuova regola di scelta, quindi definite la regola della seconda scelta quando l'importo del credito è maggiore o uguale a 5000 ripetendo i passaggi da 2.b a 2.f. Per Operator, la scelta è maggiore o uguale a.

    9. Per lo stato Quindi successivo è: elenco a discesa, scegli Attendi l'approvazione umana.

    10. Nella casella Regola predefinita, scegli l'icona Modifica per definire la regola di scelta predefinita, quindi scegli Attendi l'approvazione umana dall'elenco a discesa Stato predefinito. Definisci la regola Default per specificare lo stato successivo a cui passare se nessuna delle condizioni dello stato di scelta restituisce vero o falso.

  3. Configura lo stato di attesa dell'approvazione umana come segue:

    1. Nella scheda Configurazione, per Argomento, inizia a digitare il nome dell'argomento Amazon SNS e scegli il nome visualizzato nell'elenco a discesa. TaskTokenTopic

    2. Per Messaggio, scegli Inserisci messaggio dall'elenco a discesa. Nel campo Messaggio, specifichi il messaggio che desideri pubblicare sull'argomento di Amazon SNS. Per questo tutorial, pubblichi un task token come messaggio.

      Un task token consente di sospendere un flusso di lavoro Step Functions di tipo standard fino al completamento di un processo esterno e alla restituzione del task token. Quando si specifica uno stato Task come attività di callback specificando il modello di integrazione del .waitForTaskToken servizio, viene generato un task token che viene inserito nell'oggetto di contesto all'avvio dell'attività. L'oggetto di contesto è una struttura JSON interna disponibile durante un'esecuzione e contiene informazioni sulla macchina a stati e sulla sua esecuzione. Per ulteriori informazioni sugli oggetti di contesto, vedereOggetto Context.

    3. Nella casella visualizzata, inserisci quanto segue come messaggio:

      { "TaskToken.$": "$$.Task.Token" }
    4. Seleziona la casella di controllo Attendi la richiamata.

    5. Scegli Fine nella finestra di dialogo che appare.

  4. Tieni aperta questa finestra e passa al tutorial successivo per ulteriori azioni.

Fasi successive

Nel prossimo tutorial, imparerai come eseguire più attività in parallelo.