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 una 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 ulteriori informazioni sull'integrazione con AWS i servizi in Step Functions, vedere Integrazione dei servizi ePassaggio di parametri a un'API di servizio in Step Functions.
Caratteristiche principali dell'integrazione Optimized Lambda
-
Il
Payload
campo della risposta viene analizzato da Json in escape a Json. -
Se viene sollevata un'eccezione all'interno della funzione Lambda, il Task avrà esito negativo. Per un esempio pratico, vediGestione delle condizioni di errore in una macchina a stati Step Functions.
Lambda ottimizzata 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",
"Arguments":{
"FunctionName":"arn:aws:lambda:region
:account-id
: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",
"Arguments":{
"FunctionName":"arn:aws:lambda:region
:account-id
:function:get-model-review-decision
",
"Payload":{
"model":"{% $states.input.my-model %}",
"TaskToken": "{% $states.context.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:
{
"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",
"Arguments": {
"FunctionName": "arn:aws:lambda:region
:account-id
:function:echo
",
"InvocationType": "Event"
},
"End": true
}
}
}
Nota
Per le chiamate asincrone delle funzioni Lambda, il periodo di timeout dell'heartbeat inizia immediatamente.
Quando viene restituito il Task
risultato, l'output della funzione viene annidato all'interno di un dizionario di metadati. Ad 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 }
Risorsa funzionale specificata direttamente
In alternativa, puoi richiamare una funzione Lambda specificando l'ARN di una 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:region
:account-id
:function:HelloFunction
",
"End": true
}
}
}
Con questa forma di integrazione, la funzione potrebbe avere successo ma inviare una risposta che contiene un FunctionError
campo. In questo scenario, l'operazione del flusso di lavoro avrà esito negativo.
Puoi richiamare una versione o un alias specifico della funzione Lambda specificando tali opzioni nell'ARN nel campo. Resource
Vedi quanto segue nella documentazione di Lambda:
politiche IAM per le chiamate AWS Lambda
I seguenti modelli di esempio mostrano come AWS Step Functions generare le politiche IAM in base alle risorse nella definizione della macchina a stati. Per ulteriori informazioni, consultare In che modo Step Functions genera policy IAM per servizi integrati e Scopri i modelli di integrazione dei servizi in Step Functions.
Nell'esempio seguente, una macchina a stati con due stati di AWS Lambda attività che chiamano function1
efunction2
, la politica generata automaticamente include l'lambda:Invoke
autorizzazione per entrambe le funzioni.
-
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "lambda:InvokeFunction" ], "Resource": [ "arn:aws:lambda:
us-east-1
:123456789012
:function:myFn1", "arn:aws:lambda:us-east-1
:123456789012
:function:myFn2" ] } ] }