MÓDULO 11 - Serverless: AWS Lambda
Visão Geral
Este módulo introduz o serverless com AWS Lambda. É um paradigma diferente onde você não precisa gerenciar servidores - você apenas escreve o código que é executado sob demanda.
Avaliação Somativa
Este módulo inclui a Avaliação 3 (25%) cobrindo Lambda e validação.
LocalStack Suporta Lambda!
Boa notícia: o LocalStack emula bem o Lambda. Você poderá praticar de verdade neste módulo!
Objetivos de Aprendizagem
- Compreender o paradigma serverless
- Comparar Lambda vs máquinas virtuais
- Criar e fazer deploy de funções Lambda
- Configurar permissões IAM mínimas
- Analisar logs do CloudWatch
- Testar e validar funções
Conteúdo da Semana
1. Serverless vs VM
┌─────────────────────────────────────────────────────────────┐
│ SERVERLESS vs VM │
├─────────────────────────────────────────────────────────────┤
│ │
│ EC2 (VM) LAMBDA (Serverless) │
│ ──────── ──────────────────── │
│ │
│ ┌─────────────────┐ ┌─────────────────┐ │
│ │ Instance │ │ Função │ │
│ │ (24/7) │ │ (sob demanda) │ │
│ │ │ │ │ │
│ │ OS + Runtime │ │ Apenas código │ │
│ │ + Aplicação │ │ │ │
│ │ │ │ Acionada por │ │
│ │ Sempre UP │ │ evento │ │
│ └─────────────────┘ └─────────────────┘ │
│ │
│ Você gerencia: Você gerencia: │
│ • OS • Código │
│ • Patching • Configuração │
│ • Scaling │
│ • Disponibilidade AWS gerencia o resto! │
│ │
│ Faturamento: Faturamento: │
│ • Por hora • Por execução │
│ • Mesmo se ocioso • R$0 se não executar │
│ │
└─────────────────────────────────────────────────────────────┘
2. Anatomia de uma Função Lambda
# Exemplo Python
def handler(event, context):
"""
Handler = Ponto de entrada da função
event = Dados de entrada (JSON)
context = Infos de runtime (timeout restante, memória...)
"""
# Sua lógica aqui
name = event.get('name', 'World')
message = f"Hello, {name}!"
# Retorno (formato depende do trigger)
return {
'statusCode': 200,
'body': message
}
3. Triggers (Disparadores)
| Trigger | Descrição | Exemplo |
|---|---|---|
| API Gateway | Requisição HTTP | REST API |
| S3 | Upload de arquivo | Processamento de imagem |
| DynamoDB | Mudança de dados | Sync, notificação |
| SQS | Mensagem em fila | Processamento assíncrono |
| CloudWatch Events | Agendamento | Cron job |
| SNS | Notificação | Fan-out |
4. Limites do Lambda
| Limite | Valor | Observações |
|---|---|---|
| Timeout máx | 15 minutos | Por execução |
| Memória | 128 MB - 10 GB | CPU proporcional |
| Pacote | 50 MB (zip) / 250 MB (descompactado) | Código + dependências |
| Concorrência | 1000 (padrão) | Por conta/região |
| /tmp storage | 512 MB - 10 GB | Temporário |
Lab Prático com LocalStack
Criar uma Função Lambda
# 1. Criar o arquivo da função
cat > lambda_function.py << 'EOF'
def handler(event, context):
name = event.get('name', 'World')
return {
'statusCode': 200,
'body': f'Hello, {name}!'
}
EOF
# 2. Compactar
zip function.zip lambda_function.py
# 3. Criar a função no LocalStack
awslocal lambda create-function \
--function-name hello-function \
--runtime python3.9 \
--handler lambda_function.handler \
--zip-file fileb://function.zip \
--role arn:aws:iam::000000000000:role/lambda-role
# 4. Invocar a função
awslocal lambda invoke \
--function-name hello-function \
--payload '{"name": "AWS Student"}' \
output.txt
# 5. Ver o resultado
cat output.txt
Testar com API Gateway (LocalStack)
# Criar uma API REST
awslocal apigateway create-rest-api \
--name 'Hello API'
# Listar as APIs
awslocal apigateway get-rest-apis
Avaliação 3 (25%)
Formato
- Lab prático LocalStack (60%)
- Questões teóricas (40%)
Conteúdo Abrangido
- Criação de funções Lambda
- Invocação e testes
- Leitura de logs
- Casos de uso serverless
- Comparação com EC2
Entregável
Função Lambda documentada + testes:
- Código fonte comentado
- Capturas de tela da invocação
- Análise dos logs
- Propostas de melhoria
Navegação
- Conceitos Lambda
- Criação de Funções
- Quiz de Validação - 30 questões para validar seus conhecimentos
- Lab: Lambda
Próxima semana: MÓDULO 12 - Troubleshooting Lambda