As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Invocar um AWS Lambda função com 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 AWS serviços 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. Para lidar com exceções transitórias do serviço Lambda, consulte. Processar exceções transitórias do serviço Lambda
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á. Para obter detalhes sobre como os erros do Lambda se propagam para Step Functions, consulte. Tratar erros em fluxos de trabalho do Step Functions
É 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 chamadas AWS Lambda
Os modelos de exemplo a seguir mostram como AWS Step Functions gera políticas do IAM com base nos recursos na definição da sua 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, uma máquina de estado com dois estados de AWS Lambda tarefa que chamam function1 efunction2, a política gerada automaticamente inclui lambda:Invoke permissão 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" ] } ] }
nota
Se você usar o Qualifier parâmetro ou especificar uma versão ou alias da função emFunctionName, deverá incluir o qualificador no ARN do recurso de política do IAM. Use :* para permitir qualquer versão ou alias:
"arn:aws:lambda:us-east-1:123456789012:function:myFn1:*"Um ARN não qualificado (sem :* o sufixo) não concede permissão para invocar uma versão ou alias específico, e a invocação falhará com um erro de acesso negado.