Integrazione AWS Lambda in una macchina a stati Step Functions con Amazon SQS e Amazon SNS - 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à.

Integrazione AWS Lambda in una macchina a stati Step Functions con Amazon SQS e Amazon SNS

Questo progetto di esempio dimostra come integrare AWS Lambda le funzioni nelle macchine a stati Step Functions.

In questo progetto, Step Functions utilizza le funzioni Lambda per controllare il prezzo di un'azione e determinare una raccomandazione commerciale di acquisto o vendita. L'utente riceve quindi questa raccomandazione e può scegliere se acquistare o vendere il titolo. Il risultato dello scambio viene restituito utilizzando un SNS argomento.

Per ulteriori informazioni sulle integrazioni dei servizi Step Functions, consulta quanto segue:

Nota

Questo progetto di esempio potrebbe comportare costi.

Per i nuovi AWS utenti, è disponibile un piano di utilizzo gratuito. In questo piano, i servizi sono gratuiti al di sotto di un determinato livello di utilizzo. Per ulteriori informazioni sui AWS costi e sul piano gratuito, consulta la sezione Prezzi.

Fase 1: Creare la macchina a stati e fornire risorse

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

  2. Digita Orchestrate Lambda functions nella casella di ricerca, quindi scegli Orchestrate Lambda functions dai risultati di ricerca restituiti.

  3. Seleziona Successivo per continuare.

  4. Step Functions elenca quelli AWS servizi utilizzati nel progetto di esempio selezionato. Mostra anche un grafico del flusso di lavoro per il progetto di esempio. Implementa questo progetto sul tuo Account AWS o usalo come punto di partenza per creare i tuoi progetti. In base a come vuoi procedere, scegli Esegui una demo o Sviluppa su di essa.

    Questo progetto di esempio utilizza le seguenti risorse:

    • Cinque funzioni Lambda

    • Una coda Amazon Simple Queue Service

    • Un argomento Amazon Simple Notification Service

    • Una macchina a stati AWS Step Functions

    • Ruoli AWS Identity and Access Management (IAM) correlati

    L'immagine seguente mostra il grafico del flusso di lavoro per il progetto di esempio delle Lambdafunzioni di Orchestrate:

    Grafico del flusso di lavoro del progetto di esempio delle funzioni di Orchestrate Lambda.
  5. Scegli Usa modello per continuare con la selezione.

  6. Esegui una di queste operazioni:

    • Se hai selezionato Costruisci su di esso, Step Functions crea il prototipo del flusso di lavoro, ma non distribuisce le risorse nella definizione del flusso di lavoro, quindi puoi continuare a creare il tuo prototipo di flusso di lavoro.

      In Workflow Studiomodalità di progettazione, puoi aggiungere stati al tuo prototipo di flusso di lavoro. In alternativa, puoi passare Modalità codice all'editor di codice integrato per modificare la definizione Amazon States Language (ASL) della tua macchina a stati dalla console Step Functions.

      Importante

      Potrebbe essere necessario aggiornare il segnaposto Amazon Resource Name (ARN) per le risorse utilizzate nel progetto di esempio prima di poter eseguire il flusso di lavoro.

    • Se hai selezionato Esegui una demo, Step Functions crea un progetto di sola lettura che utilizza un AWS CloudFormation modello per distribuire le AWS risorse di quel modello sul tuo. Account AWSÈ possibile visualizzare la definizione della macchina a stati scegliendo la modalità Codice.

      Scegli Distribuisci ed esegui per distribuire il progetto e creare le risorse.

      Tieni presente che la creazione di risorse e IAM autorizzazioni può richiedere fino a 10 minuti per la distribuzione. Durante la distribuzione delle risorse, puoi aprire il link AWS CloudFormation Stack ID per vedere quali risorse vengono fornite.

      Dopo aver creato tutte le risorse, dovresti vedere il progetto nella pagina State machines della console.

      Importante

      Potrebbero essere applicate tariffe standard per ogni servizio utilizzato nel CloudFormation modello.

Fase 2: Eseguire la macchina a stati

Dopo aver fornito e distribuito tutte le risorse, viene visualizzata la finestra di dialogo Avvia esecuzione.

  1. Nella pagina State machines, scegliete il vostro 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) Per identificare l'esecuzione, è possibile specificare un nome o utilizzare il nome di esecuzione generato di default.

      Nota

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

    2. (Facoltativo) Nella casella Input, inserisci i valori di input nel JSON formato per eseguire il flusso di lavoro.

      Se avete scelto di eseguire una demo, non è necessario fornire alcun input di esecuzione.

      Nota

      Se il progetto demo che hai distribuito contiene dati di input di esecuzione precompilati, usa quell'input per eseguire la macchina a stati.

    3. Selezionare Start execution (Avvia esecuzione).

    4. La console Step Functions ti indirizza a una pagina intitolata con il tuo ID di esecuzione. Questa pagina è nota come pagina dei dettagli di esecuzione. In questa pagina è possibile esaminare i risultati dell'esecuzione man mano che l'esecuzione procede o dopo il suo completamento.

      Per esaminare i risultati dell'esecuzione, scegliete i singoli stati nella vista Grafico, quindi scegliete le singole schede Dettagli del passaggio nel riquadro per visualizzare i dettagli di ogni stato, inclusi rispettivamente input, output e definizione. Per i dettagli sulle informazioni sull'esecuzione che è possibile visualizzare nella pagina Dettagli di esecuzione, vederePagina dei dettagli di esecuzione: panoramica dell'interfaccia.

Informazioni sulla macchina a stati e sulla sua esecuzione

La macchina a stati di questo progetto di esempio si integra AWS Lambda passando i parametri direttamente a tali risorse, utilizza una SQS coda Amazon per gestire la richiesta di approvazione umana e utilizza un SNS argomento Amazon per restituire i risultati della query.

Un'esecuzione di Step Functions riceve un JSON testo come input e lo passa al primo stato del workflow. I singoli stati ricevono JSON i dati come input e in genere JSON li passano come output allo stato successivo. In questo progetto di esempio, l'output di ogni fase viene passato come input alla fase successiva del flusso di lavoro. Ad esempio, la fase di raccomandazione Generate Buy/Sell riceve come input l'output della fase Check Stock Price. Inoltre, l'output della fase di raccomandazione Generate Buy/Sell viene passato come input alla fase successiva, Request Human Approval, che simula una fase di approvazione umana.

Nota

Per visualizzare l'output restituito da un passaggio e l'input passato a un passaggio, apri la pagina Dettagli di esecuzione per l'esecuzione del flusso di lavoro. Nella sezione Dettagli del passaggio, visualizza l'input e l'output per ogni passaggio selezionato nella modalità Visualizza.

Per implementare una fase di approvazione umana, in genere si sospende l'esecuzione del flusso di lavoro fino alla restituzione di un token di attività. In questo progetto di esempio, un messaggio viene passato a una SQS coda Amazon, che viene utilizzata come trigger per la funzione Lambda definita per gestire la funzionalità di callback. Il messaggio contiene un token di attività e l'output restituito dal passaggio precedente. La funzione Lambda viene richiamata con il payload del messaggio. L'esecuzione del flusso di lavoro viene sospesa fino a quando non riceve il token dell'attività con una chiamata. SendTaskSuccessAPI Per ulteriori informazioni sui task token, vedere. Attendere un callback con il token dell’attività

Il codice seguente per la StepFunctionsSample-HelloLambda-ApproveSqsLambda funzione mostra come viene definita l'approvazione automatica di qualsiasi attività inviata dalla SQS coda Amazon tramite la macchina a stati Step Functions.

exports.lambdaHandler = (event, context, callback) => { const stepfunctions = new aws.StepFunctions(); // For every record in sqs queue for (const record of event.Records) { const messageBody = JSON.parse(record.body); const taskToken = messageBody.TaskToken; const params = { output: "\"approved\"", taskToken: taskToken }; console.log(`Calling Step Functions to complete callback task with params ${JSON.stringify(params)}`); // Approve stepfunctions.sendTaskSuccess(params, (err, data) => { if (err) { console.error(err.message); callback(err.message); return; } console.log(data); callback(null); }); } };

Sfoglia questo esempio di macchina a stati per vedere come Step Functions controlla Lambda e Amazon. SQS

Per ulteriori informazioni su come AWS Step Functions controllare altri AWS servizi, consultaIntegrazione di altri servizi con Step Functions.

{ "StartAt": "Check Stock Price", "States": { "Check Stock Price": { "Type": "Task", "Resource": "arn:aws:lambda:us-west-1:111122223333:function:StepFunctionsSample-HelloLam-CheckStockPriceLambda-444455556666", "Next": "Generate Buy/Sell recommendation" }, "Generate Buy/Sell recommendation": { "Type": "Task", "Resource": "arn:aws:lambda:us-west-1:111122223333:function:StepFunctionsSample-Hello-GenerateBuySellRecommend-123456789012", "ResultPath": "$.recommended_type", "Next": "Request Human Approval" }, "Request Human Approval": { "Type": "Task", "Resource": "arn:aws:states:::sqs:sendMessage.waitForTaskToken", "Parameters": { "QueueUrl": "https://sqs.us-west-1.amazonaws.com/111122223333/StepFunctionsSample-HelloLambda4444-5555-6666-RequestHumanApprovalSqs-777788889999", "MessageBody": { "Input.$": "$", "TaskToken.$": "$$.Task.Token" } }, "ResultPath": null, "Next": "Buy or Sell?" }, "Buy or Sell?": { "Type": "Choice", "Choices": [ { "Variable": "$.recommended_type", "StringEquals": "buy", "Next": "Buy Stock" }, { "Variable": "$.recommended_type", "StringEquals": "sell", "Next": "Sell Stock" } ] }, "Buy Stock": { "Type": "Task", "Resource": "arn:aws:lambda:us-west-1:111122223333:function:StepFunctionsSample-HelloLambda-BuyStockLambda-000000000000", "Next": "Report Result" }, "Sell Stock": { "Type": "Task", "Resource": "arn:aws:lambda:us-west-1:111122223333:function:StepFunctionsSample-HelloLambda-SellStockLambda-111111111111", "Next": "Report Result" }, "Report Result": { "Type": "Task", "Resource": "arn:aws:states:::sns:publish", "Parameters": { "TopicArn": "arn:aws:sns:us-west-1:111122223333:StepFunctionsSample-HelloLambda1111-2222-3333-ReportResultSnsTopic-222222222222", "Message": { "Input.$": "$" } }, "End": true } } }

Per informazioni su come configurare l'IAMutilizzo di Step Functions con altri AWS servizi, vedereIn che modo Step Functions genera IAM politiche per servizi integrati.

IAMEsempi

Queste politiche di esempio AWS Identity and Access Management (IAM) generate dal progetto di esempio includono il minimo privilegio necessario per eseguire la macchina a stati e le risorse correlate. Ti consigliamo di includere solo le autorizzazioni necessarie nelle tue IAM politiche.

{ "Statement": [ { "Action": [ "lambda:InvokeFunction" ], "Resource": "arn:aws:lambda:us-west-1:111122223333:function:StepFunctionsSample-HelloLam-CheckStockPriceLambda-444455556666", "Effect": "Allow" } ] }
{ "Statement": [ { "Action": [ "lambda:InvokeFunction" ], "Resource": "arn:aws:lambda:us-west-1:111122223333:function:StepFunctionsSample-Hello-GenerateBuySellRecommend-123456789012", "Effect": "Allow" } ] }
{ "Statement": [ { "Action": [ "lambda:InvokeFunction" ], "Resource": "arn:aws:lambda:us-west-1:111122223333:function:StepFunctionsSample-HelloLambda-BuyStockLambda-777788889999", "Effect": "Allow" } ] }
{ "Statement": [ { "Action": [ "lambda:InvokeFunction" ], "Resource": "arn:aws:lambda:us-west-1:111122223333:function:StepFunctionsSample-HelloLambda-SellStockLambda-000000000000", "Effect": "Allow" } ] }
{ "Statement": [ { "Action": [ "sqs:SendMessage*" ], "Resource": "arn:aws:sqs:us-west-1:111122223333:StepFunctionsSample-HelloLambda4444-5555-6666-RequestHumanApprovalSqs-111111111111", "Effect": "Allow" } ] }
{ "Statement": [ { "Action": [ "sns:Publish" ], "Resource": "arn:aws:sns:us-west-1:111122223333:StepFunctionsSample-HelloLambda1111-2222-3333-ReportResultSnsTopic-222222222222", "Effect": "Allow" } ] }

Per informazioni su come configurare l'IAMutilizzo di Step Functions con altri AWS servizi, vedereIn che modo Step Functions genera IAM politiche per servizi integrati.