Ir para o conteúdo

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

5 minuto de leitura
0

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:

  1. Abra o console do Lambda.
  2. Selecione sua função do Lambda.
  3. Clique na guia Configuração e em seguida selecione Permissões.
  4. Em Política baseada em recursos, certifique-se de que a política permita que o EventBridge invoque a função do Lambda.
  5. Se a política não tiver as permissões necessárias, clique em Adicionar permissões.
  6. Selecione AWS Service - EventBridge.
  7. (Opcional) Insira um ID de declaração como identificador para sua declaração de política.
  8. Em Entidade principal, insira events.amazonaws.com.
  9. Em ARN de origem, insira o nome do recurso da Amazon (ARN) da regra do EventBridge.
  10. Em Ações, selecione Lambda:InvokeFunction.
  11. 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:

  1. Abra o console do EventBridge.
  2. Clique em Regras.
  3. Selecione a regra do EventBridge.
  4. Clique na guia Destino e, em seguida, selecione o perfil do IAM para a regra.
  5. 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:

  1. Crie uma fila do Amazon SQS para usar como fila de mensagens não entregues.
  2. Abra o console do EventBridge.
  3. Clique em Regras.
  4. Selecione a regra do EventBridge.
  5. Em Destinos, selecione Editar e, em seguida, expanda a seção Configurações adicionais.
  6. 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.
  7. Selecione sua fila do SQS.
  8. 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)