Crea un esempio di pattern di callback con Amazon SQSSNS, Amazon e 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à.

Crea un esempio di pattern di callback con Amazon SQSSNS, Amazon e Lambda

Questo progetto di esempio dimostra come avere AWS Step Functions fai una pausa durante un'attività e attendi che un processo esterno restituisca un token di attività generato all'avvio dell'attività.

Quando questo progetto di esempio viene distribuito e viene avviata l'esecuzione, si verificano i seguenti passaggi:

  1. Step Functions passa un messaggio che include un token di attività a una coda Amazon Simple Queue Service (AmazonSQS).

  2. Step Functions fa quindi una pausa, in attesa che quel token venga restituito.

  3. La SQS coda Amazon attiva un AWS Lambda funzione che chiama SendTaskSuccesscon lo stesso token di attività.

  4. Quando viene ricevuto il token dell’attività, il flusso di lavoro continua.

  5. L'"Notify Success"attività pubblica un messaggio Amazon Simple Notification Service (AmazonSNS) che indica che la richiamata è stata ricevuta.

Per informazioni su come implementare il pattern di callback in Step Functions, vedereAttendi una richiamata con Task Token.

Per ulteriori informazioni su come AWS Step Functions può controllarne altri AWS servizi, vediIntegrazione dei servizi con Step Functions.

Fase 1: Creare la macchina a stati

  1. Apri la console Step Functions e scegli Crea macchina a stati.

  2. Digita Callback pattern example nella casella di ricerca, quindi scegli Esempio di pattern di callback dai risultati della ricerca restituiti.

  3. Seleziona Successivo per continuare.

  4. Scegli Esegui una demo per creare un ready-to-deploy flusso di lavoro di sola lettura o scegli Crea su di esso per creare una definizione di macchina a stati modificabile da utilizzare e distribuire in un secondo momento.

    Questo progetto di esempio utilizza le seguenti risorse:

    • Una coda di SQS messaggi Amazon.

    • Una funzione Lambda che richiama l'azione Step FunctionsAPI. SendTaskSuccess

    • Un SNS argomento di Amazon per notificare l'esito positivo o negativo di un'attività che indica se il flusso di lavoro può continuare o meno.

    • Un record AWS Step Functions macchina a stati

    • Correlati AWS Identity and Access Management (IAM) ruoli

    L'immagine seguente mostra il grafico del flusso di lavoro per il progetto di esempio del pattern Callback:

    Grafico illustrativo del flusso di lavoro Gestisci un processo in batch.
  5. Scegli Usa modello per continuare con la selezione.

I passaggi successivi dipendono dalla scelta precedente:

  1. Esegui una demo: puoi esaminare la macchina a stati prima di creare un progetto di sola lettura con risorse distribuite da AWS CloudFormation al tuo Account AWS.

    Puoi visualizzare la definizione della macchina a stati e, quando sei pronto, scegli Implementa ed esegui per distribuire il progetto e creare le risorse.

    La creazione di risorse e autorizzazioni può richiedere fino a 10 minuti per la distribuzione. Puoi utilizzare il link Stack ID per monitorare i progressi in AWS CloudFormation.

    Una volta completata la distribuzione, dovresti vedere la tua nuova macchina a stati nella console.

  2. Sviluppala: puoi rivedere e modificare la definizione del flusso di lavoro. Potrebbe essere necessario impostare i valori per i segnaposto nel progetto di esempio prima di provare a eseguire il flusso di lavoro personalizzato.

Nota

Potrebbero essere applicati costi standard per i servizi distribuiti sul tuo account.

Passaggio 2: Esegui la macchina a stati

  1. Nella pagina Macchine a stati, scegli il tuo progetto di esempio.

  2. Nella pagina del progetto di esempio, scegli Avvia esecuzione.

  3. Nella finestra di dialogo Avvia esecuzione, effettuate le seguenti operazioni:

    1. (Facoltativo) Immettete un nome di esecuzione personalizzato per sovrascrivere il valore predefinito generato.

      ASCIINomi diversi e registrazione

      Step Functions accetta nomi per macchine a stati, esecuzioni, attività ed etichette che contengono non ASCII caratteri. Poiché tali caratteri non funzionano con Amazon CloudWatch, ti consigliamo di utilizzare solo ASCII caratteri in modo da poter tenere traccia delle metriche. CloudWatch

    2. (Facoltativo) Nella casella Input, inserisci i valori di input comeJSON. Puoi saltare questo passaggio se stai eseguendo una demo.

    3. Selezionare Start execution (Avvia esecuzione).

    La console Step Functions ti indirizzerà a una pagina dei dettagli di esecuzione in cui puoi scegliere gli stati nella vista Graph per esplorare le informazioni correlate nel Dettagli del passaggio riquadro.

    Ad esempio, per verificare in che modo Step Functions ha proceduto nel flusso di lavoro e ha ricevuto una richiamata da AmazonSQS, esamina le voci nella tabella Eventi. L'immagine seguente mostra l'output dell'esecuzione per la fase Notify Success. Mostra anche i primi cinque eventi della cronologia degli eventi di esecuzione. Espandi ogni evento per visualizzare ulteriori dettagli su quell'evento.

    Estratto dell'output di esecuzione per la fase «Notifica successo», che mostra cinque eventi.

Esempio di callback Lambda

Per vedere come interagiscono i componenti di questo progetto di esempio, guarda le risorse che sono state distribuite nel AWS conto. Ad esempio, ecco la funzione Lambda che chiama Step Functions con il token task.

console.log('Loading function'); const aws = require('aws-sdk'); exports.lambda_handler = (event, context, callback) => { const stepfunctions = new aws.StepFunctions(); for (const record of event.Records) { const messageBody = JSON.parse(record.body); const taskToken = messageBody.TaskToken; const params = { output: "\"Callback task completed successfully.\"", taskToken: taskToken }; console.log(`Calling Step Functions to complete callback task with params ${JSON.stringify(params)}`); stepfunctions.sendTaskSuccess(params, (err, data) => { if (err) { console.error(err.message); callback(err.message); return; } console.log(data); callback(null); }); } };