Por que minha função Lambda não foi acionada pela minha regra do EventBridge?

Data da última atualização: 15/02/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

Quando você cria uma regra do EventBridge com uma função Lambda como destino usando o console do EventBridge, as permissões apropriadas são adicionadas automaticamente à política de recursos da função. No entanto, quando a mesma regra é criada por meio da AWS CLI, do SDK ou do AWS CloudFormation, 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 Lambda.

Resolução

Observação: se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), certifique-se de que esteja 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 Select targets(Selecionar destinos), selecione Retry policy and dead-letter queue (Repetir política e fila de mensagens mortas).
  3. Selecione uma fila do SQS para usar como uma DLQ

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?