Invocar uma função do AWS Lambda com o Step Functions
Saiba como usar o Step Functions para invocar funções do Lambda de maneira síncrona ou assíncrona como parte de uma aplicação sem servidor orientada a eventos.
Para saber mais sobre a integração com serviços da AWS no Step Functions, consulte Integração de produtos da e Transmitir parâmetros a uma API de serviço no Step Functions.
Principais recursos da integração otimizada ao Lambda
-
O campo
Payloadda resposta é analisado de Json escapado para Json. -
Se uma exceção for gerada na função do Lambda, a tarefa falhará. Para obter um exemplo prático, consulte Tratar condições de erro em uma máquina de estado do Step Functions.
APIs otimizadas do Lambda
Exemplos de fluxo de trabalho
Veja a seguir um estado Task que invoca uma função do 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
}
}
}
Veja a seguir um estado Task que implementa o padrão de integração do serviço retorno de chamada.
{
"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
}
}
}
Ao invocar uma função do Lambda, a execução espera a conclusão da função. Se você invocar a função do Lambda com uma tarefa de retorno de chamada, o tempo limite de pulsação só começará a ser contado após o término da execução da função do Lambda e a exibição de um resultado. Enquanto a função do Lambda for executada, o tempo limite de pulsação não será aplicado.
Também é possível chamar o Lambda de forma assíncrona usando o parâmetro InvocationType, conforme mostrado no exemplo a seguir.
{
"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 invocações assíncronas de funções do Lambda, o período do tempo limite de pulsação começa imediatamente.
Quando o resultado da Task é retornado, a saída da função é aninhada em um dicionário de metadados. Por exemplo:
{ "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 função especificado diretamente
Como alternativa, você pode invocar uma função do Lambda especificando o ARN da função diretamente no campo “Recurso”. Ao invocar uma função do Lambda dessa forma, você não pode especificar a .waitForTaskToken e o resultado da tarefa contém somente a saída da função.
{
"StartAt":"CallFunction",
"States":{
"CallFunction": {
"Type":"Task",
"Resource":"arn:aws:lambda:region:account-id:function:HelloFunction",
"End": true
}
}
}
Com essa forma de integração, a função pode ser bem-sucedida e ainda enviar uma resposta que contenha um campo FunctionError. Nesse cenário, a tarefa do fluxo de trabalho falhará.
É possível invocar determinada versão ou alias da função do Lambda especificando essas opções no ARN no campo Resource. Consulte a seguir na documentação do Lambda:
Políticas do IAM para chamar o AWS Lambda
Os modelos de exemplo a seguir mostram como o AWS Step Functions gera políticas do IAM com base nos recursos da definição da máquina de estado. Para obter mais informações, consulte Como o Step Functions gera políticas do IAM para serviços integrados e Descobrir padrões de integração de serviços no Step Functions.
No exemplo a seguir, em uma máquina de estado com os dois estados de tarefa do AWS Lambda que chama function1 e function2, a política gerada automaticamente inclui a permissão lambda:Invoke para ambas as funções.
-
{ "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" ] } ] }