Por que minha função do Lambda não foi acionada pela minha regra do EventBridge?
Data da última atualização: 10/08/2022
Eu criei uma regra do Amazon EventBridge usando a AWS Command Line Interface (AWS CLI), a API ou o AWS CloudFormation. Contudo, a função AWS Lambda de destino não está sendo invocada. Quando crio ou atualizo a mesma regra do EventBridge por meio do Console de Gerenciamento da AWS, a regra funciona corretamente. Como posso solucionar isso?
Breve descrição
Ao criar uma regra do EventBridge com uma função do Lambda como destino, lembre-se do seguinte:
- Ao usar o console do EventBridge para criar a regra, as permissões apropriadas são adicionadas automaticamente à política de recursos da função.
- Ao usar a AWS CLI, o SDK ou o AWS CloudFormation para criar a mesma regra, você deve aplicar as permissões na política de recursos manualmente.
As permissões concedem acesso ao serviço do Amazon EventBridge para invocar a função do Lambda.
Resolução
Observação: se você receber erros ao executar comandos da AWS CLI, certifique-se de estar usando a versão mais recente da AWS CLI.
Revise as métricas do CloudWatch para a regra do EventBridge
- Abra o console do CloudWatch.
- No painel de navegação à esquerda, em Metrics (Métricas), selecione All Metrics (Todas as métricas).
- Selecione o namespace AWS/Events.
- Selecione as métricas Invocations e FailedInvocations para a regra que está sendo revisada.
Os pontos de dados da métrica Invocation indicam que o destino foi invocado pela regra. Se os pontos de dados da métrica FailedInvocations estiverem presentes, é porque há um problema ao invocar o destino. FailedInvocations representa uma falha permanente e pode ser resultante de permissões incorretas ou de erros na configuração do destino.
Confirme as permissões apropriadas na resource-policy da função Lambda
- Abra o console do AWS Lambda.
- Selecione a função de destino.
- Selecione a guia Configuration (Configuração) e escolha Permissions (Permissões).
- Na seção Resource-based policy (Política baseada em recursos), revise o documento da política.
Veja a seguir um exemplo de política de recursos que permite que o EventBridge invoque a função Lambda:
{
"Effect": "Allow",
"Action": "lambda:InvokeFunction",
"Resource": "arn:aws:lambda:region:account-id:function:function-name",
"Principal": {
"Service": "events.amazonaws.com"
},
"Condition": {
"ArnLike": {
"AWS:SourceArn": "arn:aws:events:region:account-id:rule/rule-name"
}
},
"Sid": "InvokeLambdaFunction"
}
Observação: substitua o ARN pela região, ID da conta e nome do recurso apropriados antes de implantar.
Como alternativa, você pode usar a API GetPolicy para recuperar a política de recursos da função Lambda.
Se a política de recursos existente não contiver as permissões necessárias, atualize a política usando as etapas anteriores como referência. Você também pode atualizar a política usando o comando AddPermission (Adicionar permissão) na AWS CLI. A seguir está um exemplo do comando AddPermission:
aws lambda add-permission \
--function-name MyFunction \
--statement-id MyId \
--action 'lambda:InvokeFunction' \
--principal events.amazonaws.com \
--source-arn arn:aws:events:us-east-1:123456789012:rule/MyRule
Adicionar uma fila de mensagens mortas do Amazon SQS ao destino
O EventBridge usa DLQs do Amazon Simple Queue Service (Amazon SQS) para armazenar eventos que não puderam ser entregues a um destino. Uma DLQ do SQS pode ser anexada ao relatório de destino FailedInvocations. Os eventos podem ser recuperados da DLQ e analisados para obter mais contexto sobre o problema. Depois que a remediação for concluída, os eventos que falharam anteriormente poderão ser reenviados ao destino para processamento.
- Abra a regra relevante no console do EventBridge.
- Em Targets (Destinos), selecione Edit (Editar) e expanda a seção Additional settings (Configurações adicionais).
- Em Dead-letter queue (Fila de mensagens não entregues), escolha Select an Amazon SQS queue in the current AWS account to use as the dead-letter queue (Selecione uma fila do Amazon SQS na conta atual da AWS para usar como fila de mensagens não entregues).
- Selecione uma fila do SQS para usar como a DLQ.
- Depois que a DLQ for atribuída, conclua as etapas restantes na seção Edit Rule (Editar regra) para salvar as alterações.
Informações relacionadas
A minha regra foi executada, mas minha função Lambda não foi invocada
Using resource-based policies for Amazon EventBridge: AWS Lambda permissions(Uso de políticas baseadas em recursos para o Amazon EventBridge: permissões do AWS Lambda)
Event retry policy and using dead-letter queues (Política de repetição de eventos e uso de filas de mensagens mortas)
Improved failure recovery for Amazon EventBridge (Recuperação de falha aprimorada para o Amazon EventBridge)
Este artigo ajudou?
Precisa de ajuda com faturamento ou suporte técnico?