Aplicativo de exemplo de processador de erros para o AWS Lambda - AWS Lambda

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Aplicativo de exemplo de processador de erros para o AWS Lambda

O aplicativo de amostra do Processador de Erros demonstra o uso de AWS Lambda para lidar com eventos de uma assinatura do Amazon CloudWatch Logs. CloudWatch Os registros permitem que você invoque uma função Lambda quando uma entrada de registro corresponde a um padrão. A inscrição nesse aplicativo monitora o grupo de logs de uma função para verificar as entradas que contêm a palavra ERROR. Ela invoca uma função do Lambda do processador em resposta. A função de processador recupera o fluxo de logs e os dados de rastreamento completos para a solicitação que causou o erro e os armazena para uso posterior.

O código da função está disponível nos arquivos a seguir.

Você pode implantar a amostra em alguns minutos com a AWS CLI e o AWS CloudFormation. Para fazer download, configurar e implantá-la na conta, siga as instruções no README.

Estrutura de eventos e arquitetura

O exemplo de aplicação usa os serviços da AWS a seguir.

  • AWS Lambda— Executa o código da função, envia registros para o CloudWatch Logs e envia dados de rastreamento para o X-Ray.

  • Amazon CloudWatch Logs — Coleta registros e invoca uma função quando uma entrada de registro corresponde a um padrão de filtro.

  • AWS X-Ray: coleta de dados de rastreamento, indexa rastreamentos para pesquisa e gera um mapa de serviço.

  • Amazon Simple Storage Service (Amazon S3) — Armazena artefatos de implantação e saída de aplicativo.

Aplicam-se taxas padrão para cada serviço.

Uma função do Lambda na aplicação gera erros aleatoriamente. Quando o CloudWatch Logs detecta a palavra ERROR nos registros da função, ele envia um evento para a função do processador para processamento.

exemplo CloudWatch Registra o evento da mensagem
{ "awslogs": { "data": "H4sIAAAAAAAAAHWQT0/DMAzFv0vEkbLYcdJkt4qVXmCDteIAm1DbZKjS+kdpB0Jo350MhsQFyVLsZ+unl/fJWjeO5asrPgbH5..." } }

Quando decodificados, os dados contém detalhes sobre o evento de log. A função usa isso para identificar o fluxo de logs e analisa a mensagem de log para obter o ID da solicitação que causou o erro.

exemplo dados de eventos de CloudWatch registros decodificados
{ "messageType": "DATA_MESSAGE", "owner": "123456789012", "logGroup": "/aws/lambda/lambda-error-processor-randomerror-1GD4SSDNACNP4", "logStream": "2019/04/04/[$LATEST]63311769a9d742f19cedf8d2e38995b9", "subscriptionFilters": [ "lambda-error-processor-subscription-15OPDVQ59CG07" ], "logEvents": [ { "id": "34664632210239891980253245280462376874059932423703429141", "timestamp": 1554415868243, "message": "2019-04-04T22:11:08.243Z\t1d2c1444-efd1-43ec-b16e-8fb2d37508b8\tERROR\n" } ] }

A função do processador usa as informações do evento CloudWatch Logs para baixar o stream de log completo e o rastreamento X-Ray de uma solicitação que causou um erro. Ela armazena ambos em um bucket do Amazon S3. Para permitir que o fluxo de logs e o tempo de rastreamento sejam finalizados, a função aguarda por um curto período antes de acessar os dados.

Instrumentação com o AWS X-Ray

O aplicativo usaAWS X-Raypara rastrear chamadas de função e as chamadas que as funções fazem paraAWSServiços da . O X-Ray usa os dados de rastreamento que recebe das funções para criar um mapa de serviço que ajuda a identificar erros.

As duas funções Node.js são configuradas para o rastreamento ativo no modelo, e são instrumentadas com o AWS X-Ray SDK for Node.js no código. Com o rastreamento ativo, as tags do Lambda adicionam um cabeçalho de rastreamento a solicitações de entrada e envia um rastreamento com detalhes de tempo ao X-Ray. Além disso, a função de erro aleatório usa o X-Ray SDK para registrar o ID da solicitação e as informações do usuário nas anotações. As anotações são anexadas ao rastreamento e você pode usá-las para localizar o rastreamento de uma solicitação específica.

A função de processador obtém o ID da solicitação do evento CloudWatch Logs e usa o AWS SDK for JavaScript para pesquisar essa solicitação no X-Ray. Ela usa clientes do AWS SDK, instrumentados com o X-Ray SDK, para fazer download do rastreamento e da transmissão de logs. Depois, ela os armazena no bucket de saída. O X-Ray SDK registra essas chamadas e eles aparecem como subsegmentos no rastreamento.

Modelo do AWS CloudFormation e recursos adicionais

O aplicativo é implementado em módulos do Node.js e implantado com um modelo do AWS CloudFormation e scripts de shell. O modelo cria a função de processador, a função de erro aleatório e os recursos de suporte a seguir.

  • Função de execução: uma função do IAM que concede às funções permissão para acessar outros serviços da AWS.

  • Função de introdução: uma função adicional que invoca a função de erro aleatório para criar um grupo de logs.

  • Recurso personalizado: um recurso personalizado do AWS CloudFormation invoca a função de introdução durante a implantação para garantir que o grupo de logs exista.

  • CloudWatch Assinatura de registros — Uma assinatura para o fluxo de registros que aciona a função do processador quando a palavra ERROR é registrada.

  • Política baseada em recursos — uma declaração de permissão sobre a função do processador que permite que o CloudWatch Logs a invoque.

  • Bucket do Amazon S3: um local de armazenamento para a saída da função de processador.

Veja o modelo de aplicativo em GitHub.

Para contornar uma limitação de integração do Lambda com o AWS CloudFormation, o modelo cria uma função adicional que é executada durante as implantações. Todas as funções do Lambda vêm com um grupo de registros de CloudWatch registros que armazena a saída das execuções de funções. No entanto, o grupo de logs não é criado até que a função seja invocada pela primeira vez.

Para criar a inscrição, que depende da existência do grupo de logs, a aplicação usa uma terceira função do Lambda para invocar a função de erro aleatório. O modelo inclui o código para a função de introdução em linha. Um recurso personalizado do AWS CloudFormation a invoca durante a implantação. As propriedades DependsOn garantem que o fluxo de logs e a política baseada em recursos sejam criados antes da inscrição.