Escrevendo e testando código Lambda

Aplicações Serverless com AWS Lambda

Claudio Canales

Senior DevOps Engineer

Por que testes e logs importam

  • Eventos reais são bagunçados e variados.
  • Testes pegam erros antes dos usuários.
  • Logs são sua "caixa‑preta" de debug.

Teste é um simulado de incêndio

Aplicações Serverless com AWS Lambda

Um fluxo para lembrar

Kit do fluxo principal

  • Event entra -> handler roda -> response sai.
  • Use logs + eventos de teste para depurar.

Fluxo de invocação do Lambda

Aplicações Serverless com AWS Lambda

Para onde vão os logs: CloudWatch Logs

  • Por padrão, o Lambda grava print() e erros lá.
  • CloudWatch Logs é o armazenamento de logs da AWS.
  • Grupos de logs parecem /aws/lambda/<function-name>.

Handler envia logs ao CloudWatch Logs

Aplicações Serverless com AWS Lambda

O contrato do handler

  • event é o payload de entrada.
  • context traz metadados de execução.
  • O retorno vira a resposta da função.

Contrato do handler: event + context -> response

Aplicações Serverless com AWS Lambda

Passo a passo: event e context

def lambda_handler(event, context):
    request_id = context.aws_request_id
    time_left = context.get_remaining_time_in_millis()
    return {"statusCode": 200}

Anotações de event e context

Aplicações Serverless com AWS Lambda

Fazendo parse da entrada com segurança

  • Prefira event.get() para campos opcionais.
  • Valide entradas obrigatórias cedo.
  • Retorne erros claros para campos faltando.

Fazer parse com segurança e validar cedo

Aplicações Serverless com AWS Lambda

Passo a passo: validar entrada obrigatória

def lambda_handler(event, context):
    if not event.get("name"):
        return {"statusCode": 400, "body": "Missing: name"}
    return {"statusCode": 200, "body": f"Hello, {event.get('name')}!"}

Ramo de validação: 400 vs 200

Aplicações Serverless com AWS Lambda

Casos limite para testar

  • Campos ausentes (JSON vazio).
  • Tipos errados (name é número).
  • Campos extras ou payloads grandes.

Exemplos de payloads de borda

Aplicações Serverless com AWS Lambda

Retornando uma resposta previsível

  • Mantenha um formato de resposta consistente.
  • Use statusCode para sucesso ou erro.
  • Codifique o corpo em JSON.

Envelope da resposta: statusCode + corpo JSON

Aplicações Serverless com AWS Lambda

Passo a passo: retornando JSON

import json

def lambda_handler(event, context):
    body = {"message": "ok"}
    return {"statusCode": 200, "body": json.dumps(body)}

json.dumps: dict para texto JSON

Aplicações Serverless com AWS Lambda

Logging e rastreamento

  • Logue campos-chave (use JSON quando preciso).
  • Inclua context.aws_request_id para rastrear.
  • Evite logar segredos ou dados pessoais.
  • Por padrão, Lambdas vão para o CloudWatch Logs.

Boas práticas de logging

Aplicações Serverless com AWS Lambda

Passo a passo: logging estruturado

import json

def lambda_handler(event, context):
    print(json.dumps({"request_id": context.aws_request_id, "event": event}))
    return {"statusCode": 200}

Linha de log estruturado em JSON

Aplicações Serverless com AWS Lambda

Testando com eventos do console

  • Crie eventos de teste nomeados.
  • Teste o caminho feliz e casos limite.
  • Revise resposta + logs após cada execução.

Eventos de teste no console

Aplicações Serverless com AWS Lambda

Um loop simples de debug

  • Faça uma pequena mudança no código.
  • Faça deploy e rode um evento de teste.
  • Leia a resposta + CloudWatch Logs.

Ciclo de debug

Aplicações Serverless com AWS Lambda

Vamos praticar!

Aplicações Serverless com AWS Lambda

Preparing Video For Download...