Por que minha função do Lambda não foi acionada pela minha regra do EventBridge?
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:
- Confirme se a origem do evento publicou um evento e acionou a regra associada do Amazon EventBridge.
- Confirme se a regra do EventBridge invocou o destino configurado.
- 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
- Abra o console do Amazon CloudWatch.
- No painel de navegação à esquerda, em Métricas, escolha Todas as métricas.
- Selecione o namespace AWS/Events.
- 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:
- Abra o console do AWS Lambda.
- Escolha a função do Lambda de destino.
- Selecione a guia Configuração e, em seguida, escolha Permissões.
- 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:
- Abra o console do AWS Lambda.
- Escolha a função do Lambda de destino.
- Selecione a guia Configuração e, em seguida, selecione Permissões.
- Na seção Política baseada em recursos, escolha Adicionar permissões.
- Selecione Serviço da AWS - EventBridge (CloudWatch Events).
- Forneça o ID da declaração (Sid) como um identificador opcional da sua declaração de política.
- Forneça a Entidade principal como events.amazonaws.com.
Observação: normalmente, isso é preenchido automaticamente. - Forneça o ARN de origem como um ARN da regra do EventBridge.
- Em Ação, selecione lambda:InvokeFunction na lista suspensa.
- 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.
- Abra a regra relevante no console do EventBridge.
- Em Destinos, selecione Editar e, em seguida, expanda a seção Configurações adicionais.
- 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.
- Selecione uma fila SQS para usar como DLQ.
- 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
Vídeos relacionados
Conteúdo relevante
- feita há 11 diaslg...
- Resposta aceitafeita há 9 diaslg...
- feita há 11 diaslg...
- feita há 25 diaslg...
- AWS OFICIALAtualizada há um ano
- AWS OFICIALAtualizada há um ano
- AWS OFICIALAtualizada há 3 anos
- AWS OFICIALAtualizada há 2 anos