Este projeto demonstra como provisionar infraestrutura na AWS usando Terraform e realizar o deploy de uma aplicação Java containerizada com Docker em uma instância EC2.
🔧 Ideal para desenvolvedores iniciantes em DevOps ou para quem deseja aprender Terraform, Docker e AWS EC2 na prática.
- 🖥️ Java
- 🍃 Spring Boot
- 🐳 Docker + Docker Hub
- ☁️ Amazon EC2 (via Terraform)
- 📦 Terraform CLI
- 🔐 AWS CLI + Key Pair SSH
- Conta na AWS
- Usuário com acesso programático (Access Key e Secret)
- AWS CLI configurado (
aws configure
) - Terraform instalado (
terraform -v
) - Docker instalado
- Chave pública/privada para SSH (
ssh-keygen
)
projeto/
├── app/
│ └── Dockerfile
│ └── SpringBootApp.java
├── infra/
│ ├── main.tf
│ ├── variables.tf
│ ├── outputs.tf
│ └── user_data.sh
└── README.md
git clone https://github.com/seu-usuario/projeto-java-aws-terraform.git
cd projeto-java-aws-terraform
cd app/
docker build -t seu-usuario/app-java .
docker push seu-usuario/app-java
cd infra/
terraform init
terraform plan
terraform apply
- Pegue o IP público da EC2 no output do
terraform apply
. - Acesse via navegador ou Postman:
http://<ip-publico>:8080
terraform destroy
- O acesso via SSH é liberado apenas para seu IP local.
- Porta 22 (SSH) e 8080 (HTTP) são abertas via Security Group.
- O script
user_data.sh
executa o deploy automático ao subir a EC2.
✅ Terraform: providers, recursos, outputs, variável de ambiente
✅ AWS: EC2, IAM, VPC, Security Groups
✅ Docker: build, tag, push no Docker Hub
✅ SSH e scripts de inicialização remota
Recurso | Descrição |
---|---|
EC2 Instance | Servidor Linux com Docker |
SecurityGroup | Libera portas 22 e 8080 |
User Data | Script automatiza o deploy |
Chave SSH | Acesso remoto seguro à máquina |
- Automatiza toda a infraestrutura
- Evita erros manuais (ClickOps)
- Código versionável e reusável
- Multi-cloud (AWS, Azure, GCP)
Abordagem | Vantagens | Desvantagens |
---|---|---|
ClickOps | Fácil para testes | Não reproduzível, não versionável |
Terraform (IaC) | Automação, consistência, versionamento | Curva de aprendizado |
Douglas Souza
Desenvolvedor Java e DevOps em formação
🔗 LinkedIn • GitHub
📢 Aprendizado 100% prático: da ideia ao deploy real na nuvem!