Este projeto foi desenvolvido como uma API de Produtos utilizando Function as a Service (FaaS) com AWS Lambda e API Gateway, demonstrando arquitetura serverless moderna e boas práticas de desenvolvimento.
Implementar uma API REST completa para gerenciamento de produtos utilizando arquitetura serverless, com funcionalidades CRUD (Create, Read, Update, Delete) e validações robustas.
O projeto segue uma arquitetura serverless com separação clara de responsabilidades:
┌─────────────────────────────────────┐
│ API Gateway │ ← Endpoints REST
├─────────────────────────────────────┤
│ Lambda Functions │ ← Handlers (HTTP)
├─────────────────────────────────────┤
│ Controllers │ ← Lógica de requisições
├─────────────────────────────────────┤
│ Services │ ← Lógica de negócio
├─────────────────────────────────────┤
│ Repositories │ ← Acesso a dados
├─────────────────────────────────────┤
│ Entities │ ← Validações e estrutura
├─────────────────────────────────────┤
│ DynamoDB │ ← Banco de dados NoSQL
└─────────────────────────────────────┘
faas-serverless-architecture/
├── src/
│ ├── handlers/ # Handlers das funções Lambda
│ │ ├── getProducts.js
│ │ ├── getProductById.js
│ │ ├── createProduct.js
│ │ ├── updateProduct.js
│ │ └── deleteProduct.js
│ ├── controllers/ # Controllers para gerenciar requisições HTTP
│ │ └── productController.js
│ ├── services/ # Services para lógica de negócio
│ │ └── productService.js
│ ├── repositories/ # Repositories para acesso a dados
│ │ └── productRepository.js
│ ├── entities/ # Entidades com estrutura e validações
│ │ ├── Product.js
│ │ └── index.js
│ └── utils/ # Utilitários
├── scripts/ # Scripts de teste e automação
│ ├── interactive-api.sh # Script interativo para testar API
│ └── README.md # Documentação dos scripts
├── terraform/ # Infraestrutura como Código
│ ├── main.tf
│ ├── variables.tf
│ ├── lambda.tf
│ ├── dynamodb.tf
│ ├── outputs.tf
│ ├── prod.tfvars
│ ├── deploy.sh
│ └── destroy.sh
├── package.json # Dependências Node.js
├── Makefile # Comandos de automação
└── README.md # Esta documentação
- AWS Lambda - Computação serverless
- API Gateway - Gerenciamento de APIs REST
- DynamoDB - Banco de dados NoSQL
- Terraform - Infrastructure as Code (IaC)
- Node.js - Runtime JavaScript
- AWS SDK v3 - SDK oficial da AWS
- Shell Scripting - Automação de deploy
- AWS CLI configurado
- Terraform instalado
- Node.js (versão 18+)
- Make (opcional, para automação)
- curl e jq (para testes)
# Clone o repositório
git clone <url-do-repositorio>
cd faas-serverless-architecture
# Instalar dependências
make install
# Deploy para desenvolvimento
make deploy-dev
# Testar a API
make test-interactive# 1. Instalar dependências
npm install
# 2. Deploy da infraestrutura
cd terraform
./deploy.sh dev
cd ..
# 3. Testar a API
./scripts/interactive-api.shmake help # Mostrar ajuda
make install # Instalar dependências
make deploy-dev # Deploy para desenvolvimento
make deploy-staging # Deploy para staging
make deploy-prod # Deploy para produção
make destroy-dev # Destruir infraestrutura de desenvolvimento
make test-interactive # Executar script interativo
make test-url # Mostrar URL da API
make test-endpoints # Mostrar todos os endpoints
make logs # Ver logs das funções Lambda
make clean # Limpar arquivos temporáriosApós o deploy, a API estará disponível em:
- API Base:
https://[api-id].execute-api.sa-east-1.amazonaws.com/dev - Endpoints: Veja a seção de endpoints abaixo
| Método | Endpoint | Descrição |
|---|---|---|
| GET | /products |
Listar todos os produtos |
| GET | /products/{id} |
Buscar produto por ID |
| POST | /products |
Criar novo produto |
| PUT | /products/{id} |
Atualizar produto |
| DELETE | /products/{id} |
Remover produto |
- Product - Entidade principal com validações
- Validação de nome (2-100 caracteres)
- Validação de preço (positivo)
- Validação de estoque (boolean)
- Normalização automática de dados
- Handlers - Ponto de entrada das funções Lambda
- Controllers - Gerenciamento de requisições HTTP
- Services - Lógica de negócio
- Repositories - Acesso a dados (DynamoDB)
- Entities - Estrutura e validações
- Nome: 2-100 caracteres, obrigatório
- Preço: Número positivo, obrigatório
- Estoque: Boolean, opcional (padrão: true)
- Categoria: String, opcional
- Imagem: URL, opcional
curl -X GET "https://[api-id].execute-api.sa-east-1.amazonaws.com/dev/products"curl -X GET "https://[api-id].execute-api.sa-east-1.amazonaws.com/dev/products/1"curl -X POST "https://[api-id].execute-api.sa-east-1.amazonaws.com/dev/products" \
-H "Content-Type: application/json" \
-d '{
"name": "iPhone 15 Pro",
"description": "Smartphone Apple com chip A17 Pro",
"price": 8999,
"category": "Eletrônicos",
"inStock": true,
"image": "https://example.com/iphone15pro.jpg"
}'curl -X PUT "https://[api-id].execute-api.sa-east-1.amazonaws.com/dev/products/1" \
-H "Content-Type: application/json" \
-d '{
"name": "iPhone 15 Pro Max",
"price": 9999
}'curl -X DELETE "https://[api-id].execute-api.sa-east-1.amazonaws.com/dev/products/1"Para facilitar os testes, criamos um script interativo completo:
# Executar script interativo
make test-interactive
# Ou diretamente
./scripts/interactive-api.sh- Detecção automática da URL via Terraform
- Interface colorida e profissional
- Teste de conectividade antes das operações
- Validação de entrada e formatação JSON
- Menu completo com todas as operações CRUD
- Configurar URL da API - Configuração manual
- Listar todos os produtos - GET /products
- Buscar produto por ID - GET /products/{id}
- Criar novo produto - POST /products
- Atualizar produto - PUT /products/{id}
- Deletar produto - DELETE /products/{id}
- Testar todos os endpoints - Teste completo
- Mostrar URL atual - Informações da API
- Sair - Encerrar script
A API possui um sistema robusto de tratamento de erros que garante respostas consistentes:
| Código | Tipo | Descrição |
|---|---|---|
| 400 | ValidationError |
Erro de validação (nome inválido, preço negativo, etc.) |
| 404 | NotFoundError |
Produto não encontrado |
| 500 | InternalServerError |
Erro interno do servidor |
{
"success": false,
"message": "Dados inválidos: Nome deve ter entre 2 e 100 caracteres",
"error": "ValidationError",
"timestamp": "2025-08-08T11:00:00.000Z"
}{
"success": true,
"message": "Produto criado com sucesso",
"data": {
"id": 6,
"name": "iPhone 15 Pro",
"description": "Smartphone Apple com chip A17 Pro",
"price": 8999,
"category": "Eletrônicos",
"inStock": true,
"image": "https://example.com/iphone15pro.jpg",
"createdAt": "2025-08-08T11:00:00.000Z",
"updatedAt": "2025-08-08T11:00:00.000Z"
}
}O projeto utiliza Terraform para gerenciar toda a infraestrutura na AWS:
- API Gateway - Endpoints REST
- Lambda Functions - 5 funções (CRUD + listagem)
- DynamoDB Table - Armazenamento de produtos
- IAM Roles & Policies - Permissões de acesso
- CloudWatch Logs - Monitoramento e logs
NODE_ENV=dev # Ambiente de execução
DYNAMODB_TABLE=products # Nome da tabela DynamoDB
AWS_REGION=sa-east-1 # Região AWS# Deploy para desenvolvimento
make deploy-dev
# Deploy para staging
make deploy-staging
# Deploy para produção
make deploy-prod# Destruir ambiente de desenvolvimento
make destroy-dev
# Destruir ambiente de staging
make destroy-staging
# Destruir ambiente de produção
make destroy-prod# Ver logs das funções Lambda
make logs
# Ver status da infraestrutura
make statusEste projeto demonstra os seguintes conceitos:
-
Serverless Architecture
- Function as a Service (FaaS)
- Event-driven programming
- Pay-per-use model
-
Infrastructure as Code (IaC)
- Terraform para provisionamento
- Versionamento de infraestrutura
- Multi-environment deployment
-
Arquitetura em Camadas
- Separação de responsabilidades
- Clean Architecture principles
- Dependency injection
-
Boas Práticas
- Error handling robusto
- Input validation
- Logging e monitoring
- Security best practices
Prof. Danilo Aparecido é instrutor na plataforma Torne-se um Programador, especializado em arquiteturas de software, desenvolvimento de sistemas escaláveis e tecnologias modernas como serverless computing.
Para aprender mais sobre arquiteturas de software, serverless computing e aprofundar seus conhecimentos, acesse o curso completo:
Arquiteturas de Software Modernas
Este projeto demonstra os seguintes conceitos aprendidos no curso:
-
Serverless Architecture
- Function as a Service (FaaS)
- Event-driven programming
- Pay-per-use model
- AWS Lambda e API Gateway
-
Infrastructure as Code (IaC)
- Terraform para provisionamento
- Versionamento de infraestrutura
- Multi-environment deployment
- Cloud-agnostic approach
-
Arquitetura em Camadas
- Separação de responsabilidades
- Clean Architecture principles
- Dependency injection
- Domain-driven design concepts
-
Boas Práticas
- Error handling robusto
- Input validation
- Logging e monitoring
- Security best practices
- Code organization
Este projeto foi desenvolvido como parte do curso de Arquiteturas de Software Modernas. Contribuições são bem-vindas através de issues e pull requests.
Este projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.
Desenvolvido com ❤️ para o curso de Arquiteturas de Software do Torne-se um Programador 🚀