Este laboratório prático demonstra a implementação de uma arquitetura completa na AWS, incluindo a criação de uma Virtual Private Cloud (VPC) personalizada, provisionamento de instâncias EC2, configuração de banco de dados RDS PostgreSQL e deployment de uma API Simples em Node.js. O projeto explora conceitos fundamentais de redes, segurança e computação em nuvem na AWS.
- Criar uma VPC personalizada com sub-redes públicas e privadas
- Configurar Internet Gateway e tabelas de rotas para conectividade externa
- Implementar Security Groups para segmentação de tráfego de rede
- Provisionar uma instância EC2 na sub-rede pública para hospedar a aplicação
- Criar um banco de dados RDS PostgreSQL em sub-redes privadas
- Configurar grupos de sub-redes para alta disponibilidade do RDS
- Implementar e testar uma API em Node.js com NGINX como proxy reverso
- Estabelecer comunicação segura entre EC2 e RDS usando Security Groups
A arquitetura implementada segue as melhores práticas de segurança e disponibilidade da AWS:
- VPC Personalizada: Rede isolada com CIDR 10.0.0.0/16
- Sub-rede Pública: Hospeda a instância EC2 com acesso à Internet via Internet Gateway
- Sub-redes Privadas: Duas sub-redes em zonas de disponibilidade diferentes para o RDS, garantindo alta disponibilidade
- Internet Gateway: Fornece conectividade de entrada/saída para recursos na sub-rede pública
- Security Groups:
- Web Server SG: Controla acesso HTTP (porta 80) e SSH (porta 22) para a instância EC2
- Database SG: Permite apenas tráfego PostgreSQL (porta 5432) originado do Web Server SG
- Instância EC2: Servidor web executando Amazon Linux 2023 com Node.js e NGINX
- RDS PostgreSQL: Banco de dados gerenciado em sub-redes privadas, sem acesso público
O primeiro passo foi a criação de uma VPC personalizada que servirá como ambiente isolado para todos os recursos. A configuração foi feita através do console da AWS, onde foram definidos o CIDR block e as opções de DNS.
A VPC foi criada com as seguintes características:
- CIDR Block: 10.0.0.0/16 (65.536 endereços IP disponíveis)
- Habilitação de DNS: Resolução de nomes DNS e hostnames DNS habilitados
- Sub-redes inicialmente criadas:
- Sub-rede pública (Public-Subnet-1) na zona us-west-2a com CIDR 10.0.0.0/24
- Sub-rede privada (Private-Subnet-1) na zona us-west-2a com CIDR 10.0.1.0/24
- Internet Gateway: Criado e anexado automaticamente à VPC
Para atender aos requisitos do Amazon RDS, que necessita de sub-redes em pelo menos duas zonas de disponibilidade diferentes, foi criada uma segunda sub-rede privada.
Configurações da sub-rede adicional:
- Nome: Private-Subnet-2
- Zona de Disponibilidade: us-west-2b (diferente da primeira sub-rede)
- CIDR Block: 10.0.3.0/24
- Tipo: Privada (sem rota direta para o Internet Gateway)
O Amazon RDS exige um grupo de sub-redes (DB Subnet Group) que abranja pelo menos duas zonas de disponibilidade, garantindo alta disponibilidade e failover automático em caso de falhas.
O grupo de sub-redes foi configurado com:
- Nome: DB Subnet Group
- Descrição: Database subnet group
- VPC: VPC-Projeto-Node
- Zonas de Disponibilidade: us-west-2a e us-west-2b
- Sub-redes: Private-Subnet-1 (10.0.2.0/24) e Private-Subnet-2 (10.0.3.0/24)
Os Security Groups atuam como firewalls virtuais para controlar o tráfego de entrada e saída das instâncias. O primeiro Security Group criado protege o servidor web que hospedará a API Node.js.
Regras de entrada configuradas:
- HTTP (porta 80): Permite requisições HTTP de qualquer origem (0.0.0.0/0) para acesso público à API
- SSH (porta 22): Permite acesso remoto ao servidor apenas do IP do administrador para gerenciamento seguro
O Security Group do banco de dados implementa o princípio de menor privilégio, permitindo conexões apenas da instância EC2 do servidor web.
Regra de entrada configurada:
- PostgreSQL (porta 5432): Aceita conexões apenas originadas do Security Group do servidor web
- Origem personalizada: Referência ao Security Group do Web Server (sg-0dfd2ed50dff0aec1)
Esta configuração garante que o banco de dados permaneça isolado e acessível apenas pela aplicação autorizada.
A instância EC2 serve como ambiente de execução para a aplicação Node.js e o servidor web NGINX.
Especificações da instância:
- Nome: Web Server NodeJS
- AMI: Amazon Linux 2023
- Tipo de Instância: t3.micro (1 vCPU, 1 GB RAM)
- Armazenamento: 8 GB SSD (gp3)
Configuração de rede:
- VPC: VPC-Projeto-Node
- Sub-rede: Sub-rede pública na zona us-west-2a
- IP Público: Habilitado para acesso externo
- Security Group: Web Server Security Group
Após o provisionamento, é possível verificar que a instância foi criada com sucesso e está em execução.
A instância recebeu um endereço IP público que será usado para acessar a API posteriormente.
O Amazon RDS gerencia automaticamente tarefas como provisionamento de hardware, configuração de banco de dados, patches e backups.
Foi selecionada a opção "Configuração completa" para ter controle total sobre as configurações de segurança e disponibilidade.
Escolha do mecanismo:
- Engine: PostgreSQL (compatível com padrões SQL)
- Versão: Versão mais recente disponível
Configuração da instância:
- Identificador: database-postgres
- Credenciais Master: Usuário e senha para administração do banco
- Classe de Instância: db.t4g.micro (adequada para desenvolvimento e testes)
- Armazenamento: 20 GB SSD
Configurações de rede:
- VPC: VPC-Projeto-Node
- Grupo de Sub-redes: DB Subnet Group (multi-AZ)
- Acesso Público: Não (banco acessível apenas dentro da VPC)
- Security Group: DB Security Group
Configurações de banco de dados:
- Nome do Banco Inicial: Criação de um database inicial para a aplicação
Após alguns minutos, a instância RDS está disponível e pronta para receber conexões da aplicação.
Com a instância EC2 em execução, o próximo passo é conectar via SSH e preparar o ambiente para a aplicação.
Todas as depedências foram instaladas corretamente na instância e prontas para utilização.
A aplicação Node.js foi configurada com as seguintes características:
Estrutura da API:
- Endpoint raiz (/): Retorna informações sobre a versão da API
- Endpoint /health: Verifica a saúde da aplicação e conectividade com o banco de dados
- Endpoint /api/users: CRUD completo para gerenciamento de usuários
Repositório com o código da API: https://github.com/Israel-SoaresPorto/aws-api-nodejs
Configuração do Banco de Dados:
A aplicação se conecta ao RDS PostgreSQL usando as credenciais e o endpoint fornecido pela AWS, garantindo comunicação segura através dos Security Groups configurados.
NGINX como Proxy Reverso:
O NGINX foi configurado para escutar na porta 80 e encaminhar requisições para a aplicação Node.js que executa na porta 3000, adicionando uma camada de segurança e performance.
O primeiro teste valida que a API está respondendo corretamente:
GET http://ec2-54-214-60-210.us-west-2.compute.amazonaws.com/Resposta:
{
"message": "API funcionando!",
"version": "1.0.0"
}Status: 200 OK - A API está operacional e acessível pela Internet.
O endpoint de health check valida a conectividade com o banco de dados:
GET http://ec2-54-214-60-210.us-west-2.compute.amazonaws.com/healthResposta:
{
"status": "OK",
"database": "Connected",
"timestamp": "2026-03-05T19:31:37.057Z"
}Este resultado confirma que:
- A aplicação está funcionando corretamente
- A conexão com o RDS PostgreSQL foi estabelecida com sucesso
- Os Security Groups estão permitindo a comunicação entre EC2 e RDS
Teste de criação de um novo usuário no banco de dados:
PUT http://ec2-54-214-60-210.us-west-2.compute.amazonaws.com/api/users/1
Content-Type: application/json
{
"name": "Admin AWS 001",
"email": "adminaws001@example.com"
}Resposta:
{
"message": "Usuário atualizado com sucesso",
"user": {
"id": 1,
"name": "Admin AWS 001",
"email": "adminaws001@example.com",
"created_at": "2026-03-05T19:26:10.993Z",
"updated_at": "2026-03-05T19:01:31.540Z"
}
}Status: 200 OK - O usuário foi criado/atualizado com sucesso no banco PostgreSQL.
Recuperação de todos os usuários cadastrados:
GET http://ec2-54-214-60-210.us-west-2.compute.amazonaws.com/api/usersA API retorna a lista completa de usuários armazenados no RDS.
Busca de um usuário específico por ID:
GET http://ec2-54-214-60-210.us-west-2.compute.amazonaws.com/api/users/1A API retorna os detalhes do usuário solicitado.
Atualização dos dados de um usuário existente:
PUT http://ec2-54-214-60-210.us-west-2.compute.amazonaws.com/api/users/1
Content-Type: application/json
{
"name": "Admin AWS 001",
"email": "adminaws001@example.com"
}Resposta:
{
"message": "Usuário deletado com sucesso"
}Status: 200 OK - O usuário foi removido com sucesso do banco de dados.
Este laboratório prático proporcionou uma experiência completa na implementação de uma pequena aplicação na AWS, cobrindo aspectos fundamentais de computação em nuvem:
A criação de uma VPC personalizada permite total controle sobre o espaço de endereçamento IP e segmentação de recursos, com separação entre sub-redes públicas e privadas para garantir que recursos críticos (como bancos de dados) permaneçam inacessíveis diretamente da Internet
A implementação de múltiplas camadas de segurança (Security Groups, sub-redes privadas) segue as melhores práticas, garantindo que apenas o tráfego autorizado possa acessar os recursos. A comunicação entre EC2 e RDS é restrita, garantindo a segurança dos dados e da aplicação.
A instância EC2 fornece controle total sobre o ambiente de execução da aplicação, enquanto o Amazon RDS elimina a complexidade de gerenciar backups, patches e replicação do banco de dados
A adição do NGINX fornece uma camada adicional de segurança e performance, atuando como proxy reverso para a aplicação Node.js. A API implementada demonstra operações CRUD básicas, validando a comunicação entre a aplicação e o banco de dados.
- VPC Personalizada: Criação e configuração de rede virtual isolada na AWS
- Security Groups Eficazes: Implementação de firewall stateful para controle granular de tráfego
- EC2 com Sub-rede Pública: Provisionamento de servidor com acesso à Internet
- RDS Multi-AZ: Configuração de banco de dados gerenciado com alta disponibilidade
- Comunicação EC2-RDS: Estabelecimento de conexão segura entre camadas da aplicação
- API RESTful Funcional: Deploy e teste de aplicação Node.js com operações CRUD
- Proxy Reverso NGINX: Configuração de servidor web como gateway para a aplicação
- Testes End-to-End: Validação completa de todos os endpoints da API
Laboratório concluído com sucesso! 🚀
Esta documentação serve como referência para futuras implementações de arquiteturas na AWS, destacando boas práticas e os principais conceitos envolvidos na construção de aplicações em nuvem.





















