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 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
Payloadcampo 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. Per gestire le eccezioni transitorie del servizio Lambda, vedere. Gestire le eccezioni transitorie del servizio Lambda
API Lambda ottimizzate
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. 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, il workflow Task avrà esito negativo. Per informazioni dettagliate su come gli errori Lambda si propagano a Step Functions, vedere. Gestione degli errori nei flussi di lavoro di Step Functions
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:Invokeautorizzazione 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" ] } ] }
Nota
Se utilizzi il Qualifier parametro o specifichi una versione o un alias della funzione inFunctionName, devi includere il qualificatore nella risorsa ARN della policy IAM. Usa :* per consentire qualsiasi versione o alias:
"arn:aws:lambda:us-east-1:123456789012:function:myFn1:*"Un ARN non qualificato (senza :* il suffisso) non concede l'autorizzazione a richiamare una versione o un alias specifici e la chiamata avrà esito negativo con un errore di accesso negato.