Invoca un AWS Lambda funzione con Step Functions - 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à.

Invoca un AWS Lambda funzione con Step Functions

Scopri come usare Step Functions per richiamare le funzioni Lambda in modo sincrono o asincrono come parte di un'applicazione serverless basata sugli eventi.

Per saperne di più sull'integrazione con AWS servizi in Step Functions, vedere Integrazione dei servizi e. Passaggio di parametri a un servizio API in Step Functions

Caratteristiche principali dell'integrazione Optimized Lambda
  • Il Payload campo della risposta viene analizzato da Json in escape a Json.

  • Se la risposta contiene il campo FunctionError o viene sollevata un'eccezione all'interno della funzione Lambda, l'attività ha esito negativo.

Per ulteriori informazioni sulla gestione di input, output e risultati dello stato, consulta Elaborazione di input e output in Step Functions.

Lambda supportata APIs

Esempi di flussi di lavoro

Quanto segue include uno Task stato che richiama una funzione Lambda.

{ "StartAt":"CallLambda", "States":{ "CallLambda":{ "Type":"Task", "Resource":"arn:aws:states:::lambda:invoke", "Parameters":{ "FunctionName":"arn:aws:lambda:us-east-1:123456789012:function:MyFunction" }, "End":true } } }

L’esempio seguente include uno stato Task che implementa il modello di integrazione del servizio di callback.

{ "StartAt":"GetManualReview", "States":{ "GetManualReview":{ "Type":"Task", "Resource":"arn:aws:states:::lambda:invoke.waitForTaskToken", "Parameters":{ "FunctionName":"arn:aws:lambda:us-east-1:123456789012:function:get-model-review-decision", "Payload":{ "model.$":"$.new_model", "token.$":"$$.Task.Token" }, "Qualifier":"prod-v1" }, "End":true } } }

Quando richiami una funzione Lambda, l'esecuzione attenderà il completamento della funzione. Se si richiama la funzione Lambda con un'attività di callback, il timeout del battito cardiaco inizia a contare solo dopo che la funzione Lambda non ha completato l'esecuzione e restituito un risultato. Finché la funzione Lambda è in esecuzione, il timeout del battito cardiaco non viene applicato.

È anche possibile chiamare Lambda in modo asincrono utilizzando il InvocationType parametro, come illustrato nell'esempio seguente:

Nota

Per le chiamate asincrone delle funzioni Lambda, il periodo di timeout dell'heartbeat inizia immediatamente.

{ "Comment": "A Hello World example of the Amazon States Language using Pass states", "StartAt": "Hello", "States": { "Hello": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "Parameters": { "FunctionName": "arn:aws:lambda:us-east-1:123456789012:function:echo", "InvocationType": "Event" }, "End": true } } }

Quando viene restituito il Task risultato, l'output della funzione viene annidato all'interno di un dizionario di metadati. Per esempio:

{ "ExecutedVersion":"$LATEST", "Payload":"FUNCTION OUTPUT", "SdkHttpMetadata":{ "HttpHeaders":{ "Connection":"keep-alive", "Content-Length":"4", "Content-Type":"application/json", "Date":"Fri, 26 Mar 2021 07:42:02 GMT", "X-Amz-Executed-Version":"$LATEST", "x-amzn-Remapped-Content-Length":"0", "x-amzn-RequestId":"0101aa0101-1111-111a-aa55-1010aaa1010", "X-Amzn-Trace-Id":"root=1-1a1a000a2a2-fe0101aa10ab;sampled=0" }, "HttpStatusCode":200 }, "SdkResponseMetadata":{ "RequestId":"6b3bebdb-9251-453a-ae45-512d9e2bf4d3" }, "StatusCode":200 }

In alternativa, puoi richiamare una funzione Lambda specificando una ARN funzione direttamente nel campo «Risorsa». Quando si richiama una funzione Lambda in questo modo, non è possibile .waitForTaskToken specificare e il risultato dell'attività contiene solo l'output della funzione.

{ "StartAt":"CallFunction", "States":{ "CallFunction": { "Type":"Task", "Resource":"arn:aws:lambda:us-east-1:123456789012:function:HelloFunction", "End": true } } }

Puoi richiamare una versione o un alias specifico della funzione Lambda specificando tali opzioni nel ARN campo. Resource Vedi quanto segue nella documentazione di Lambda:

IAMpolitiche per le chiamate AWS Lambda

I seguenti modelli di esempio mostrano come AWS Step Functions genera IAM politiche basate sulle risorse nella definizione della macchina a stati. Per ulteriori informazioni, consulta In che modo Step Functions genera IAM politiche per servizi integrati e Scopri i modelli di integrazione dei servizi in Step Functions.

AWS Step Functions genera una IAM politica basata sulla definizione della macchina a stati. Per una macchina a stati con due AWS Lambda task afferma che la chiamata function1 e function2 deve essere utilizzata una politica con lambda:Invoke autorizzazioni per le due funzioni.

Questo viene mostrato nell'esempio seguente.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "lambda:InvokeFunction" ], "Resource": [ "arn:aws:lambda:[[region]]:[[accountId]]:function:[[function1]]", "arn:aws:lambda:[[region]]:[[accountId]]:function:[[function2]]" ] } ] }