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

5 minuto de leitura
0

Quero solucionar o motivo pelo qual a regra do Amazon EventBridge que eu criei usando a AWS Command Line (AWS CLI) não invoca minha função do AWS Lambda.

Breve descrição

Use as etapas a seguir para identificar o problema:

  1. Confirme se a origem do evento publicou um evento e acionou a regra associada do Amazon EventBridge.
  2. Confirme se a regra do EventBridge invocou o destino configurado.
  3. Se houver uma falha na invocação do destino, confirme se a função do AWS Lambda tem as permissões apropriadas em sua política de recursos.

Resolução

Observação: se você receber erros ao executar comandos da AWS CLI, verifique se está utilizando a versão mais recente da AWS CLI.

Analise as métricas do CloudWatch para a regra do EventBridge

  1. Abra o console do Amazon CloudWatch.
  2. No painel de navegação à esquerda, em Métricas, escolha Todas as métricas.
  3. Selecione o namespace AWS/Events.
  4. Selecione as métricas TriggerRules, Invocations e FailedInvocations (se disponíveis) para a regra em questão. Se necessário, visualize essas métricas com a estatística SUM.
    Observação: os pontos de dados TriggerRules indicam que um evento acionou a regra do EventBridge. Os pontos de dados Invocation indicam que a regra do EventBridge invocou o destino correspondente. Se as métricas incluírem pontos de dados FailedInvocations, isso indica que a regra pode ter falhado ao invocar o destino. FailedInvocations representa uma falha permanente e pode ser causado por permissões incorretas ou por um destino mal configurado.

Confirme se a política de recursos da função do Lambda tem as permissões apropriadas

Lembre-se do seguinte ao criar uma regra do EventBridge com uma função do Lambda como destino:

  • Quando você usa o console do Amazon EventBridge para criar a regra, o console adiciona automaticamente as permissões apropriadas à política de recursos da função.
  • Ao usar a AWS CLI, o SDK ou o AWS CloudFormation para criar uma regra, você deve aplicar manualmente as permissões na política de recursos.

As permissões concedem ao serviço Amazon EventBridge acesso para invocar a função do Lambda.

Revise as permissões associadas à função do Lambda de destino

Siga estas etapas:

  1. Abra o console do AWS Lambda.
  2. Escolha a função do Lambda de destino.
  3. Selecione a guia Configuração e, em seguida, escolha Permissões.
  4. Na seção Política baseada em recursos, revise o documento de política.

Ou use a API GetPolicy ou o comando get-policy da AWS CLI com as entradas apropriadas para recuperar a política de recursos da função do Lambda.

O exemplo a seguir mostra uma política de recursos que permite ao EventBridge invocar a função do 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.

Atualize a política de recursos

Siga estas etapas se precisar atualizar a política de recursos:

  1. Abra o console do AWS Lambda.
  2. Escolha a função do Lambda de destino.
  3. Selecione a guia Configuração e, em seguida, selecione Permissões.
  4. Na seção Política baseada em recursos, escolha Adicionar permissões.
  5. Selecione Serviço da AWS - EventBridge (CloudWatch Events).
  6. Forneça o ID da declaração (Sid) como um identificador opcional da sua declaração de política.
  7. Forneça a Entidade principal como events.amazonaws.com.
    Observação: normalmente, isso é preenchido automaticamente.
  8. Forneça o ARN de origem como um ARN da regra do EventBridge.
  9. Em Ação, selecione lambda:InvokeFunction na lista suspensa.
  10. Selecione Salvar.

Você também pode atualizar a política usando a API AddPermission ou o comando da AWS CLI add-permission do AWS Lambda.

Por exemplo:

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

Adicione uma fila de mensagens não entregues 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. Anexe um DLQ do Amazon SQS ao destino relatando FailedInvocations. Recupere os eventos do DLQ para análise e para obter mais contexto sobre o problema. Após a correção, os eventos com falha podem ser reenviados ao destino para processamento.

  1. Abra a regra relevante no console do EventBridge.
  2. Em Destinos, selecione Editar e, em seguida, expanda a seção Configurações adicionais.
  3. Em Fila de mensagens não entregues, escolha Selecionar uma fila do Amazon SQS na conta atual da AWS para usar como fila de mensagens não entregues.
  4. Selecione uma fila SQS para usar como DLQ.
  5. Depois de atribuir o DLQ, conclua as etapas restantes na seção Editar regra para salvar as alterações.

Informações relacionadas

Minha regra foi executada, mas minha função do Lambda não foi invocada

Uso de políticas baseadas em recursos para o Amazon EventBridge: permissões do AWS Lambda

Política de repetição de eventos e uso de filas de mensagens não entregues

Improved failure recovery for Amazon EventBridge

AWS OFICIAL
AWS OFICIALAtualizada há 7 meses