A regra do Amazon EventBridge que eu criei não invoca minha função do AWS Lambda.
Resolução
Observação: se você receber mensagens de erro ao executar comandos da AWS Command Line Interface (AWS CLI), consulte Solução de problemas da AWS CLI. Além disso, verifique se você está usando a versão mais recente da AWS CLI.
Analise as métricas do CloudWatch para a regra do EventBridge
Para identificar a causa do problema, verifique o console do Amazon CloudWatch no namespace AWS/Events as seguintes métricas do EventBridge:
- Marque TriggeredRules para identificar se uma regra agendada foi executada ou correspondeu a um evento específico. Depois que a regra for executada com sucesso, o EventBridge encaminha o evento para o destino.
- Verifique Invocações para identificar se a regra invocou um destino. O EventBridge faz várias tentativas se não conseguir entregar o evento ao destino.
- Verifique FailedInvocations para identificar se o EventBridge falhou permanentemente ao invocar o destino. Essa métrica indica problemas na configuração do destino.
Confirme se a política de recursos da função do Lambda possui as permissões apropriadas
O EventBridge deve ter permissão para invocar a função do Lambda. Se você utilizar o console do Amazon EventBridge para criar a regra, o console adicionará automaticamente as permissões necessárias à política baseada em recursos da função. Se você utilizou a AWS CLI, o AWS SDK ou o AWS CloudFormation para criar uma regra, deve aplicar manualmente as permissões na política baseada em recursos.
Para usar o console do Lambda para atualizar as permissões da função de destino, conclua as seguintes etapas:
- Abra o console do Lambda.
- Selecione sua função do Lambda.
- Clique na guia Configuração e em seguida selecione Permissões.
- Em Política baseada em recursos, certifique-se de que a política permita que o EventBridge invoque a função do Lambda.
- Se a política não tiver as permissões necessárias, clique em Adicionar permissões.
- Selecione AWS Service - EventBridge.
- (Opcional) Insira um ID de declaração como identificador para sua declaração de política.
- Em Entidade principal, insira events.amazonaws.com.
- Em ARN de origem, insira o nome do recurso da Amazon (ARN) da regra do EventBridge.
- Em Ações, selecione Lambda:InvokeFunction.
- Clique em Salvar.
Também é possível usar a API GetPolicy para visualizar a política baseada em recursos da função. Ou execute o seguinte comando get-policy da AWS CLI:
aws lambda get-policy \
--function-name my-function
Observação: substitua my-function pelo nome da sua função.
Para atualizar a política, use a API AddPermission. Execute o seguinte comando add-permission:
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
Observação: substitua MyFunction pelo nome da sua função, myID pelo ID da sua declaração e arn:aws:events:us-east-1:123456789012:rule/MyRule pelo ARN da regra.
Certifique-se de que seu perfil de execução tenha as permissões necessárias
Se você usar um perfil de execução, certifique-se de que o perfil tenha permissão para invocar a função do Lambda.
Se você usar o console do EventBridge para criar o perfil, o console adicionará automaticamente as permissões necessárias ao perfil do IAM que está anexado à regra. Se você usou a AWS CLI, o AWS SDK ou o CloudFormation para criar uma regra, deve adicionar manualmente permissões ao perfil do IAM.
Para verificar as permissões do perfil do IAM, conclua as seguintes etapas:
- Abra o console do EventBridge.
- Clique em Regras.
- Selecione a regra do EventBridge.
- Clique na guia Destino e, em seguida, selecione o perfil do IAM para a regra.
- Em Permissão, certifique-se de que a política permita que o EventBridge invoque funções do Lambda e que a política de confiança permita que o perfil acesse o Lambda.
Exemplo de política do IAM:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"lambda:InvokeFunction"
],
"Resource": [
"arn:aws:lambda:region:account-id:function:function-name"
]
}
]
}
Exemplo de relação de confiança:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "TrustEventBridgeService",
"Effect": "Allow",
"Principal": {
"Service": "events.amazonaws.com"
},
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals": {
"aws:SourceAccount": "account-id",
"aws:SourceArn": "arn:aws:events:region:account-id:rule/rule-name"
}
}
}
]
}
Observação: substitua arn:aws:lambda:region:account-id:function:function-name pelo ARN da função, account-ID pelo ID da sua conta da AWS e arn:aws:events:region:account-id:rule/rule-name pelo ARN da regra.
Também é possível usar a API GetRole para recuperar a política do IAM. Ou execute o seguinte comando get-role:
aws iam get-role \
--role-name Test-Role
Observação: substitua Test-Role pelo nome do seu perfil.
Se a política ou a relação de confiança não tiverem as permissões necessárias, use o console do IAM para atualizar a política e a relação de confiança.
Adicione uma fila de mensagens não entregues ao destino no Amazon SQS
O EventBridge utiliza fila de mensagens não entregues no Amazon Simple Queue Service (Amazon SQS) para armazenar eventos que o EventBridge não conseguiu entregar a um destino.
Para obter mais informações sobre por que uma invocação falhou, conclua as etapas a seguir para anexar uma fila de mensagens não entregues ao destino:
- Crie uma fila do Amazon SQS para usar como fila de mensagens não entregues.
- Abra o console do EventBridge.
- Clique em Regras.
- Selecione a regra do EventBridge.
- Em Destinos, selecione Editar e, em seguida, expanda a seção Configurações adicionais.
- Em Fila de mensagens não entregues, clique em Selecionar uma fila do Amazon SQS na conta da AWS atual para utilizar como fila de mensagens não entregues.
- Selecione sua fila do SQS.
- Revise suas alterações e clique em Salvar.
Em seguida, execute novamente o evento para registrá-lo na fila de mensagens não entregues e obter mais informações sobre por que a regra falhou ao invocar a função.
Informações relacionadas
Minha regra foi executada, mas minha função do Lambda não foi invocada
Improved failure recovery for Amazon EventBridge (Recuperação aprimorada de falhas para o Amazon EventBridge)