Invocación de una función AWS Lambda con Step Functions
Aprenda a usar Step Functions para invocar funciones de Lambda de forma sincrónica o asíncrona como parte de una aplicación sin servidor basada en eventos.
Para obtener más información sobre la integración con los servicios de AWS en Step Functions, consulte Integración de los servicios de y Cómo pasar parámetros a una API de servicio en Step Functions.
Características principales de la integración optimizada de Lambda
-
El campo
Payloadde la respuesta se analiza de Json de escape a Json. -
Si se genera una excepción en la función de Lambda, se produce un error en la tarea. Para ver un ejemplo práctico, consulte Tratamiento de condiciones de error en una máquina de estado de Step Functions.
API de Lambda optimizada
Ejemplos de flujo de trabajo
El ejemplo siguiente incluye un estado Task que invoca una función de 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
}
}
}
El ejemplo siguiente incluye un estado Task que implementa el patrón de integración de servicios de devolución de llamada.
{
"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
}
}
}
Al invocar una función de Lambda, la ejecución esperará a que se complete la función. Si invoca la función de Lambda con una tarea de devolución de llamada, el tiempo de espera del latido no comienza a contar hasta que la función de Lambda haya terminado de ejecutarse y haya devuelto un resultado. Siempre y cuando se ejecute la función de Lambda, no se aplicará el tiempo de espera de latido.
También es posible llamar a Lambda de forma asíncrona mediante el parámetro InvocationType, como se muestra en el siguiente ejemplo:
{
"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
Para las invocaciones asíncronas de funciones de Lambda, el período de tiempo de espera del latido comienza de inmediato.
Cuando se devuelve el resultado Task, el resultado de la función se anida dentro de un diccionario de metadatos. Por ejemplo:
{ "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 }
Recurso de función especificado directamente
Como alternativa, puede invocar una función de Lambda especificando el ARN de una función directamente en el campo «Recurso». Cuando se invoca una función de Lambda de esta manera, no se puede especificar .waitForTaskToken y el resultado de la tarea solo contiene el resultado de la función.
{
"StartAt":"CallFunction",
"States":{
"CallFunction": {
"Type":"Task",
"Resource":"arn:aws:lambda:region:account-id:function:HelloFunction",
"End": true
}
}
}
Con esta forma de integración, la función podría funcionar correctamente y, al mismo tiempo, enviar una respuesta que contenga un campo FunctionError. En ese escenario, la tarea del flujo de trabajo producirá un error.
Puede invocar un alias o una versión de la función de Lambda específica mediante la introducción de estas opciones en el ARN, en el campo Resource. Consulte los siguientes temas en la documentación de Lambda:
Políticas de IAM para las llamadas a AWS Lambda
En estas plantillas de ejemplo, se muestra cómo AWS Step Functions genera políticas de IAM basadas en los recursos de la definición de la máquina de estado. Para obtener más información, consulte Generación de políticas de IAM para servicios integrados por Steps Functions y Descubrimiento de los patrones de integración de servicios en Step Functions.
En el siguiente ejemplo, una máquina de estado con dos estados de tareas de AWS Lambda que llaman a function1 y function2, la política generada automáticamente incluye un permiso lambda:Invoke para ambas funciones.
-
{ "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" ] } ] }