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.
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 AWS los servicios de 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
-
-
Parámetros admitidos
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 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:
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
En las siguientes plantillas de ejemplo, se muestra 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 políticas de IAM para servicios integrados y Descubrimiento de 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. En el caso de una máquina de estados con dos estados de AWS Lambda tareas a los que llamar 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]]
"
]
}
]
}