Este projeto é uma API desenvolvida em Java usando o framework Spring Boot. A API interage com um banco de dados PostgreSQL, que está sendo executado em um contêiner Docker. O deploy da aplicação será realizado na AWS, utilizando serviços como EC2, RDS, VPC e S3, proporcionando um ambiente robusto, escalável e seguro.
- Java 22: Linguagem de programação usada para desenvolver a API.
- Spring Boot: Framework que facilita a criação de aplicações Spring, com configuração mínima.
- Docker: Ferramenta para criar, implantar e executar aplicações em contêineres. Usado para executar o PostgreSQL de forma isolada.
- PostgreSQL: Banco de dados relacional usado para armazenar os dados da aplicação. Está rodando em um contêiner Docker durante o desenvolvimento.
-
EC2 (Elastic Compute Cloud): Serviço que oferece capacidade de computação na nuvem. Será usado para hospedar a aplicação Spring Boot.
- Configuração: A instância EC2 será configurada para rodar a aplicação Java com o Spring Boot, com regras de segurança configuradas para permitir acesso às portas necessárias.
-
RDS (Relational Database Service): Serviço gerenciado de banco de dados. O PostgreSQL será migrado para uma instância RDS na AWS para produção.
- Benefícios: O RDS facilita o gerenciamento do banco de dados, com backups automatizados, replicação e recuperação de desastres.
-
VPC (Virtual Private Cloud): Rede virtual que isola os recursos da AWS. Será configurada para fornecer um ambiente seguro e isolado onde a instância EC2 e o RDS operam.
- Subnets: A VPC terá sub-redes públicas e privadas para separar a aplicação e o banco de dados.
- Security Groups: Configurações de segurança que definem as regras de entrada e saída para controlar o tráfego para os recursos na VPC.
-
S3 (Simple Storage Service): Serviço de armazenamento escalável para arquivos. Pode ser usado para armazenar arquivos estáticos, logs ou backups do banco de dados.
- Integração: A aplicação pode enviar e recuperar arquivos do S3 conforme necessário.
- AWS IAM (Identity and Access Management): Gerenciamento de acesso seguro aos serviços e recursos da AWS. IAM roles e policies serão configurados para garantir que apenas as instâncias e serviços apropriados possam interagir entre si.
- GitHub Actions: Automatização de pipelines de build, teste e deploy, integrada ao repositório GitHub do projeto. Pode ser configurado para realizar o deploy automático na AWS após o sucesso nos testes.
src/
├── main/
│ ├── java/com/example/demo/ # Pacote principal da aplicação
│ ├── resources/ # Arquivos de configuração (application.properties, etc.)
├── test/ # Testes unitários e de integração
Dockerfile # Instruções para criar a imagem Docker da aplicação
docker-compose.yml # Definição dos serviços Docker (ex: PostgreSQL)
pom.xml # Dependências Maven
README.md # Documentação do projeto
- Java 22: Instalar o JDK apropriado.
- Maven: Ferramenta de build para gerenciar as dependências e o ciclo de vida do projeto.
- Docker: Para rodar o PostgreSQL em contêiner durante o desenvolvimento.
- AWS CLI: Interface de linha de comando da AWS, necessária para configurar e gerenciar os serviços da AWS.
-
Configurar o Docker:
- Rodar o comando
docker-compose up
para iniciar o contêiner PostgreSQL.
- Rodar o comando
-
Configurar o Spring Boot:
- Configurar o arquivo
application.properties
para apontar para o banco de dados PostgreSQL no Docker.
- Configurar o arquivo
-
Criar e Configurar uma Instância EC2:
- Utilizar o AWS Management Console ou CLI para criar uma instância EC2.
- Configurar as regras de segurança para permitir o tráfego HTTP/HTTPS e acesso SSH.
- Deployar a aplicação na instância EC2.
-
Migrar Banco de Dados para RDS:
- Criar uma instância RDS com PostgreSQL.
- Configurar a aplicação para se conectar ao RDS, atualizando as credenciais e a URL do banco de dados no
application.properties
.
-
Configurar a VPC:
- Criar uma VPC com sub-redes públicas e privadas.
- Configurar o routing e as regras de segurança para proteger os recursos.
-
Configurar o S3 (Opcional):
- Criar um bucket S3 para armazenamento de arquivos.
- Configurar permissões e políticas de acesso.
- CloudWatch: Serviço de monitoramento da AWS para acompanhar logs e métricas da aplicação.
- Elastic Load Balancing (ELB): Opcionalmente, configurar um load balancer para distribuir o tráfego entre múltiplas instâncias EC2.
Contribuições são bem-vindas! Sinta-se à vontade para abrir uma issue ou enviar um pull request.