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

  1. Abra o console do CloudWatch.
  2. No painel de navegação à esquerda, em Metrics (Métricas), selecione All Metrics (Todas as métricas).
  3. Selecione o namespace AWS/Events.
  4. 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

  1. Abra o console do AWS Lambda.
  2. Selecione a função de destino.
  3. Selecione a guia Configuration (Configuração) e escolha Permissions (Permissões).
  4. 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.

  1. Abra a regra relevante no console do EventBridge.
  2. Em Targets (Destinos), selecione Edit (Editar) e expanda a seção Additional settings (Configurações adicionais).
  3. 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).
  4. Selecione uma fila do SQS para usar como a DLQ.
  5. Depois que a DLQ for atribuída, conclua as etapas restantes na seção Edit Rule (Editar regra) para salvar as alterações.

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?