Entendendo o modelo de execução do Lambda

Aplicações Serverless com AWS Lambda

Claudio Canales

Senior DevOps Engineer

Execução automática

AWS orientada a eventos

  • O Lambda roda código quando um evento ocorre.
  • Exemplo: upload no S3 -> redimensionar imagem.
  • Gatilhos diferentes, mesmo padrão.
Aplicações Serverless com AWS Lambda

Ocioso até ser acionado

Ocioso -> evento -> executa -> para

  • Ocioso: nada executa.
  • Evento: o handler roda e depois para.

Analogia: luz com sensor de movimento

  • Como uma luz com sensor: fica ociosa até ser acionada.
  • O gatilho muda de "off" para "on".
Aplicações Serverless com AWS Lambda

O que é AWS Lambda?

AWS Lambda em resumo

  • Serviço de computação orientado a eventos.
  • Escala automaticamente conforme a demanda.
  • Você paga só pelo tempo de execução.
Aplicações Serverless com AWS Lambda

Como o Lambda executa seu código

Fluxo de execução do Lambda

  • Uma fonte de evento aciona o Lambda.
  • O Lambda passa o payload do evento pro teu handler.
  • Teu handler retorna um resultado.
Aplicações Serverless com AWS Lambda

Escalonando conforme a demanda

Escalonar cria mais ambientes

  • Mais eventos: mais invocações em paralelo.
  • O Lambda cria mais ambientes.
  • Podem rolar cold starts em cada novo ambiente.
Aplicações Serverless com AWS Lambda

A função handler

def lambda_handler(event, context):
    # Your code here
    return {
        'statusCode': 200,
        'body': 'Hello from Lambda!'
    }
  • event: payload de entrada (JSON).
  • context: metadados de runtime.
  • retorno: saída (ou sucesso/erro).

Handler recebe event e context

Aplicações Serverless com AWS Lambda

O objeto event

Payload de evento de armazenamento de objetos

Evento S3: bucket + chave do objeto.

# event["Records"][0]["s3"]
{
  "bucket": {"name": "my-bucket"},
  "object": {"key": "data.csv"}
}
  • Mesmo trabalho: extrair o que você precisa.

Payload de evento de requisição HTTP

Evento de API: método, caminho, corpo.

# API request event
{
  "httpMethod": "POST",
  "path": "/users",
  "body": "{\"name\": \"John\"}"
}
  • Gatilhos diferentes, JSON diferente.
Aplicações Serverless com AWS Lambda

O objeto context

def lambda_handler(event, context):
    time_left = (
        context.get_remaining_time_in_millis()
    )
    request_id = context.aws_request_id
  • get_remaining_time_in_millis Tempo restante antes do timeout.
  • aws_request_id ID da requisição para rastrear logs.
Aplicações Serverless com AWS Lambda

Execução stateless

Reuso em warm start vs reset

  • Cada invocação é independente.
  • Pode haver reuso, não é garantido.
  • Guarde estado fora do Lambda.
counter = 0

def lambda_handler(event, context):
    global counter
    counter += 1  # pode resetar
    return counter
Aplicações Serverless com AWS Lambda

Cold starts

Linha do tempo de cold start

  • Novo ambiente de execução.
  • Carrega código e dependências.
  • Roda a inicialização e depois o handler.
Aplicações Serverless com AWS Lambda

Warm starts

Linha do tempo de warm start

  • Reaproveita o ambiente existente.
  • Pula a maior parte da inicialização.
  • O handler roda mais cedo.
Aplicações Serverless com AWS Lambda

Init, invoke, freeze

Ciclo de vida do ambiente de execução

  • A init roda uma vez por ambiente.
  • O handler roda a cada invocação.
  • Entre execuções, o ambiente pode congelar.
Aplicações Serverless com AWS Lambda

Otimizar para cold starts

# init (uma vez por ambiente)
import boto3
s3 = boto3.client('s3')
# handler (toda invocação)
def lambda_handler(event, context):
    return {"statusCode": 200}

Init uma vez vs handler por invocação

  • Coloque imports e clientes do SDK fora do handler.
Aplicações Serverless com AWS Lambda

Vamos praticar!

Aplicações Serverless com AWS Lambda

Preparing Video For Download...