Skip to content

Israel-SoaresPorto/projeto-aws-api-node

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 

Repository files navigation

Laboratório: API Node.js na AWS usando VPC, EC2 e RDS

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.

Objetivos

  • 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

Arquitetura

Diagrama de Arquitetura

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

1. Configuração da Infraestrutura de Rede

1.1 Criação da VPC

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.

Criação da VPC

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

1.2 Criação de Sub-rede Privada Adicional

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.

Criação de Sub-rede Adicional

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)

1.3 Configuração do Grupo de Sub-redes RDS

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.

Grupo de Sub-redes RDS

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)

2. Configuração de Segurança com Security Groups

2.1 Security Group para o Servidor Web

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.

Security Group Web Server

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

2.2 Security Group para o Banco de Dados

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.

Security Group Database

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.

3. Provisionamento da Instância EC2

3.1 Criação do Servidor Web

A instância EC2 serve como ambiente de execução para a aplicação Node.js e o servidor web NGINX.

Criação da Instância EC2

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

3.2 Verificação da Instância

Após o provisionamento, é possível verificar que a instância foi criada com sucesso e está em execução.

Instância Criada

A instância recebeu um endereço IP público que será usado para acessar a API posteriormente.

4. Configuração do Banco de Dados RDS

4.1 Criação da Instância RDS PostgreSQL

O Amazon RDS gerencia automaticamente tarefas como provisionamento de hardware, configuração de banco de dados, patches e backups.

Método de Criação do Banco

Foi selecionada a opção "Configuração completa" para ter controle total sobre as configurações de segurança e disponibilidade.

Seleção do PostgreSQL

Escolha do mecanismo:

  • Engine: PostgreSQL (compatível com padrões SQL)
  • Versão: Versão mais recente disponível

Configurações do Banco

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

Conectividade e Segurança

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 Adicionais

Configurações de banco de dados:

  • Nome do Banco Inicial: Criação de um database inicial para a aplicação

4.2 Confirmação da Criação do Banco

Banco Criado

Após alguns minutos, a instância RDS está disponível e pronta para receber conexões da aplicação.

5. Configuração do Servidor e Deploy da Aplicação

5.1 Acesso SSH e Configuração Inicial

Com a instância EC2 em execução, o próximo passo é conectar via SSH e preparar o ambiente para a aplicação.

5.2 Verificação das Dependências

Verificação Node.js e Git

Todas as depedências foram instaladas corretamente na instância e prontas para utilização.

5.3 Configuração da Aplicação Node.js

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:

Configuração do Nginx para o servidor

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.

6. Testes e Validação da API

6.1 Teste do Endpoint Principal

Teste Endpoint Raiz

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.

6.2 Verificação de Saúde e Conectividade do Banco

Teste Health Check

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/health

Resposta:

{
  "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

6.3 Criação de Usuário via API

Teste POST User

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.

6.4 Listagem de Usuários

Teste GET Users

Recuperação de todos os usuários cadastrados:

GET http://ec2-54-214-60-210.us-west-2.compute.amazonaws.com/api/users

A API retorna a lista completa de usuários armazenados no RDS.

6.5 Recuperação de Usuário Específico

Teste GET User por ID

Busca de um usuário específico por ID:

GET http://ec2-54-214-60-210.us-west-2.compute.amazonaws.com/api/users/1

A API retorna os detalhes do usuário solicitado.

6.6 Atualização de Usuário

Teste PUT User

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.

Conclusões e Aprendizados

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:

Controle de Rede

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

Segurança e Controle de Acesso

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.

Computação e Banco de Dados Gerenciados

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

Implementação de Aplicação Web

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.

Pontos-Chave do Aprendizado

  • 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.

About

Implementação de uma arquitetura completa na AWS para hospedar uma API Node.js, utilizando VPC personalizada, instâncias EC2 e banco de dados gerenciado RDS.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors