AWS Lambda
Guia do desenvolvedor

Aplicativo de amostra de processador de erros para o AWS Lambda

O aplicativo de amostra de processador de erros demonstra o uso do AWS Lambda para processar eventos de uma inscrição no Amazon CloudWatch Logs. O CloudWatch Logs permite invocar uma função do Lambda quando uma entrada de log 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 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. Siga as instruções no README para fazer download, configurar e implantá-la em sua conta.

Estrutura de eventos e arquitetura

O aplicativo de amostra usa os seguintes serviços da AWS.

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

  • Amazon CloudWatch Logs – coleta logs e invoca uma função quando uma entrada de log 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 os artefatos de implantação e a saída do aplicativo.

  • AWS CloudFormation – cria recursos do aplicativo e implanta o código da função.

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

exemplo Evento de mensagem do – CloudWatch Logs

{ "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 decodificados do – de eventos do CloudWatch Logs

{ "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 de processador usa informações do evento do CloudWatch Logs para fazer download do fluxo de logs e do rastreamento do X-Ray completos 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 usa o AWS X-Ray para rastrear invocações de função e as chamadas que as funções fazem para serviços da AWS. 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. O mapa de serviços a seguir mostra função de erro aleatório gerando erros para algumas solicitações. Ele também mostra a função do processador chamando X-Ray, CloudWatch Logs e Amazon S3.

As duas funções Node.js são configuradas para o rastreamento ativo no modelo, e são instrumentadas com o SDK do AWS X-Ray para 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 do 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 SDK do X-Ray, para fazer download do rastreamento e do fluxo de logs e os armazena no bucket de saída. Depois, ela os armazena no bucket de saída. O SDK do X-Ray registra essas chamadas e eles aparecem como subsegmentos no rastreamento.

Modelo do AWS CloudFormation e recursos adicionais

O aplicativo é implementado em dois módulos — do Node.js, um modelo do AWS CloudFormation e os scripts de shell de suporte. 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.

  • Inscrição no CloudWatch Logs – uma inscrição no fluxo de logs que aciona a função de processador quando a palavra ERROR é registrada.

  • Política baseada em recursos – uma instrução de permissão na função de 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.

Visualize o modelo error-processor.yamlno 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 logs do CloudWatch Logs que armazena a saída de 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, o aplicativo 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.