Ir para o conteúdo

Como posso solucionar problemas com regras do EventBridge?

8 minuto de leitura
0

Minha regra do Amazon EventBridge não é enviada para o destino.

Resolução

Observação: as etapas de solução de problemas a seguir se aplicam a todos os tipos de destinos do EventBridge. 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.

Verifique sua configuração

Para garantir que você tenha configurado corretamente suas regras do EventBridge, valide as configurações a seguir.

Confirme se o evento ocorreu

Observação: serviços globais da AWS estão disponíveis somente na região us-east-1. Se você criou uma regra para esses serviços em outra região, os serviços não encaminharão os eventos para o EventBridge. Como resultado, o EventBridge não executa a regra.

Verifique as métricas do CloudWatch

Para identificar a causa do problema, verifique o console do Amazon CloudWatch no namespace AWS/Events as seguintes métricas do EventBridge:

  • Verifique TriggeredRules para ver se o EventBridge executou a regra. Se o valor for 0, verifique suas chamadas de API para validar se o evento ocorreu. É possível usar o carimbo de data/hora dessa métrica para verificar quando o evento ocorreu.
  • Verifique Invocações para ver se o EventBridge invocou o destino. Se houver um valor em TriggeredRules, mas não em Invocações, a regra não invocou o destino. Para resolver esse problema, verifique a configuração de destino da regra.
  • Verifique FailedInvocations para ver se a invocação de destino falhou. Se houver um valor em Invocações e também em FailedInvocations, o problema ocorreu no destino.

Verifique as chamadas de API da sua configuração

Verifique o Histórico de eventos do AWS CloudTrail para ver se a chamada da API do evento ocorreu no horário esperado. Além disso, certifique-se de que o evento corresponda a todos os campos no padrão do evento.

Confirme se o evento correspondeu ao padrão de evento da regra

Para que o EventBridge execute uma regra, todos os campos em um padrão de evento devem corresponder ao evento dessa regra. Use a ferramenta Sandbox do EventBridge para testar se o evento corresponde a um campo de padrão de evento específico. É uma prática recomendada iniciar os testes com um padrão de eventos que usa poucos campos.

Exemplo de padrão de evento:

{    "source": ["aws.s3"]}

Se você conseguir uma correspondência bem-sucedida para esse padrão de evento, aumente a complexidade do padrão de evento. Cada novo campo restringe o foco do teste de padrão de eventos.

Se você não conhece seu esquema de eventos, anexe temporariamente um alvo de grupo do Amazon CloudWatch Logs ou um tópico do Amazon Simple Notification Service (Amazon SNS). Analise a estrutura de eventos que o EventBridge entrega ao destino do grupo do CloudWatch Logs ou ao tópico do Amazon SNS. Em seguida, reescreva o padrão para corresponder ao evento.

Exemplo de padrão de evento:

{  "source": [    "aws.s3"
  ],
  "detail-type": [
    "AWS API Call via CloudTrail"
  ],
  "detail": {
    "eventName": [
      "PutObject",
      "DeleteObject",
      "DeleteObjects"
    ],
    "requestParameters": {
      "bucketName": [
        "123456789012-prod-app1"
      ],
      "key": [
        {
          "prefix": "feature1/"
        },
        {
          "prefix": "feature2/"
        }
      ]
    }
  }
}

Observação: o padrão anterior é para uma lista de chamadas de API do Amazon Simple Storage Service (Amazon S3). Ele compara as chamadas de API com um bucket específico do Amazon S3 para um objeto que começa com feature1 ou feature2.

Também é possível usar a API TestEventPattern para verificar se o evento corresponde ao padrão do evento.

Use os seguintes padrões de eventos comuns com base no serviço da AWS que tem o evento.

Alterações do estado da instância do Amazon Elastic Compute Cloud (Amazon EC2):

{
    "source": ["aws.ec2"],
    "detail-type": ["EC2 Instance State-change Notification"],
    "detail": {
        "state": ["running", "stopped"]
    }
}

Failovers ou falhas do Amazon Relational Database Service (Amazon RDS):

{
    "source": ["aws.rds"],
    "detail-type": ["RDS DB Instance Event"],
    "detail": {
        "EventCategories": ["failover", "failure"]
    }
}

Execuções do AWS Step Functions que falham, atingem o tempo limite ou são canceladas:

{
  "source": ["aws.states"],
  "detail-type": ["Step Functions Execution Status Change"],
  "detail": {
    "status": ["FAILED", "TIMED_OUT", "ABORTED"],
    "stateMachineArn": ["arn:aws:states:us-east-1:123456789012:stateMachine:MyStateMachine"]
  }
}

Verifique a sintaxe do padrão de evento

Certifique-se de que seu padrão de evento segue a seguinte sintaxe:

  • Use aspas em todos os nomes ou valores de campo.
  • Use notação de matriz, não igual. Por exemplo, use "state": ["running"] não "state": "running".
  • Valide se os níveis de aninhamento em seu objeto detalhado estão corretos para sua configuração.
  • Certifique-se de que todos os campos correspondam. Os padrões de eventos usam a lógica AND, não OR.
  • Certifique-se de usar corretamente os curingas com base no esquema do evento.

Confirme se o destino processou o evento com sucesso

Solucione invocações com falha

Se houver um ponto de dados em FailedInvocations no console do CloudWatch, verifique se há problemas na configuração e nas permissões do seu destino.

O EventBridge deve ter permissão para invocar um destino. Quando você usa o EventBridge para criar regras, o console adiciona automaticamente as permissões necessárias aos recursos relacionados. No entanto, se você usar AWS SDKs, AWS CLI ou o AWS CloudFormation para implantar a regra, deve configurar as permissões. É possível usar um perfil do IAM que tenha as políticas necessárias do EventBridge anexadas ou uma política baseada em recursos.

Configure uma fila de mensagens não entregues

Se uma invocação falhar, o EventBridge realizará uma nova tentativa automaticamente com recuo exponencial.

Para identificar a causa de FailedInvocations, conclua as seguintes etapas para associar uma fila de mensagens não entregues do Amazon Simple Queue Service (Amazon SQS) ao destino:

  1. Abra o console do EventBridge.
  2. Clique em Regras e selecione sua regra.
  3. Em Destinos, selecione o destino e clique em Editar.
  4. Expanda Configurações adicionais e, em seguida, defina os valores de Idade máxima do evento e Novas tentativas.
    Observação: o EventBridge envia o evento para a fila de mensagens não entregues somente depois de exceder o número máximo de eventos da idade e do número de novas tentativas. Por padrão, esses valores são definidos para o máximo de 24 horas e 185 novas tentativas.
  5. Em Fila de mensagens não entregues, selecione uma fila do Amazon SQS na mesma conta da AWS ou em uma conta diferente. Em seguida, selecione a fila do SQS que você usa para capturar eventos com falha após o EventBridge concluir seus eventos novas tentativas.
    Observação: se você não tiver uma fila existente, crie uma fila do SQS.
  6. Clique em Próximo ou em Atualizar regra para salvar suas alterações.

Observação: se não houver nenhum ponto de dados FailedInvocations, então o EventBridge entregou o evento ao destino com sucesso e o problema está no destino. Por exemplo, um destino do AWS Lambda pode encontrar erros ao ser executado ou controlado. Para solucionar esses problemas, verifique as métricas e os logs do CloudWatch para o destino.

Solucione invocações com falha com a fila de mensagens não entregues

Se houver alguma invocação com falha na regra, a fila de mensagens não entregues registrará em log a mensagem de erro.

Para analisar o erro, conclua as seguintes etapas:

  1. Abra o console do Amazon SQS.
  2. Clique em Filas e, em seguida, selecione sua fila de mensagens não entregues.
  3. Selecione Enviar e receber mensagens.
  4. Clique em Pesquisar mensagens.
  5. Selecione uma mensagem de erro na lista.
  6. Em Atributos, verifique os detalhes do erro.
    A mensagem de exemplo a seguir mostra que o EventBridge não tem as permissões necessárias para invocar o destino do Lambda:
    "MessageAttributes": {                "ERROR_CODE": {
                        "StringValue": "NO_PERMISSIONS",
                        "DataType": "String"
                    },
                    "ERROR_MESSAGE": {
                        "StringValue": "User: events.amazonaws.com is not authorized to perform: lambda:InvokeFunction on resource: arn:aws:lambda:us-east-1:123456789012:function:Hello_World because no resource-based policy allows the lambda:InvokeFunction action (Service: AWSLambdaInternal; Status Code: 403;
    Error Code: AccessDeniedException; Request ID: 6635c4c4-9c54-416e-bc40-ef25bad0aca5; Proxy: null)",
                        "DataType": "String"
                    },

Informações relacionadas

Troubleshooting Amazon EventBridge (Solução de problemas do Amazon EventBridge)

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

Como soluciono erros no Agendador do EventBridge?

Usando filas de mensagens não entregues para processar eventos não entregues em EventBridge

AWS OFICIALAtualizada há 9 meses