Invoca un AWS Lambda funciona con Step Functions - AWS Step Functions

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Invoca un AWS Lambda funciona 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 información sobre la integración con AWS servicios en Step Functions, consulte Integración de los servicios de yPasar parámetros a un servicio API en Step Functions.

Características clave de la integración optimizada de Lambda
  • El campo Payload de la respuesta se analiza de Json de escape a Json.

  • Si la respuesta contiene el campo FunctionError o se genera una excepción en la función de Lambda, se produce un error en la tarea.

Para obtener más información acerca de cómo administrar la entrada, la salida y los resultados de los estados, consulte Procesamiento de entradas y salidas en Step Functions.

Lambda compatible APIs

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", "Parameters":{ "FunctionName":"arn:aws:lambda:us-east-1:123456789012: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", "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 } } }

Al invocar una función de Lambda, la ejecución esperará a que se complete la función. Si invoca la función Lambda con una tarea de devolución de llamada, el tiempo de espera del latido no comienza a contar hasta que la función 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:

nota

Para las invocaciones asíncronas de funciones de Lambda, el período de tiempo de espera del latido comienza de inmediato.

{ "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 } } }

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 }

Como alternativa, puede invocar una función Lambda especificando una ARN 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:us-east-1:123456789012:function:HelloFunction", "End": true } } }

Puede invocar una versión o un alias específicos de la función Lambda especificando esas opciones en ARN Resource el campo. Consulte los siguientes temas en la documentación de Lambda:

IAMpolíticas de llamadas AWS Lambda

Las siguientes plantillas de ejemplo muestran cómo AWS Step Functions genera IAM políticas en función de los recursos de la definición de su máquina de estados. Para obtener más información, consulte Cómo Step Functions genera IAM políticas para servicios integrados y Descubra los patrones de integración de servicios en Step Functions.

AWS Step Functions genera una IAM política basada en la definición de su máquina de estados. Para una máquina de estados con dos AWS Lambda la tarea indica esa llamada function1 yfunction2, se debe usar una política con lambda:Invoke permisos para las dos funciones.

Esto se muestra en el siguiente ejemplo.

{ "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]]" ] } ] }