Este projeto provisiona uma instância EC2 Ubuntu 24.04 na AWS utilizando Terraform, com foco em boas práticas, segurança e estrutura modular para escalar em futuros projetos de infraestrutura como código.
- 🧱 Infraestrutura como Código (IaC) com Terraform
- ☁️ AWS EC2 Ubuntu 24.04 provisionada dinamicamente
- 🔐 Segurança com
.gitignore
e variáveis sensíveis externas - 🧩 Modular e personalizável via arquivos
.tfvars
infra-aws-terraform/
├── main.tf # Recurso EC2
├── provider.tf # Configuração da AWS
├── variables.tf # Declaração das variáveis
├── outputs.tf # Saída de dados (ex: IP público)
├── terraform.tfvars # Valores reais das variáveis (NÃO subir ao GitHub)
├── .gitignore # Ignora arquivos sensíveis e internos do Terraform
└── README.md # Documentação do projeto
- ✅ Conta na AWS (com par de chaves SSH criado)
- ✅ Terraform instalado → Instale aqui
- ✅ AWS CLI configurado localmente com
aws configure
mkdir infra-aws-terraform && cd infra-aws-terraform
terraform init
provider "aws" {
region = var.aws_region
}
data "aws_ami" "ubuntu" {
most_recent = true
owners = ["099720109477"] # Canonical
filter {
name = "name"
values = ["ubuntu/images/hvm-ssd-gp3/ubuntu-noble-24.04-amd64-server-*"]
}
}
resource "aws_instance" "app_server" {
ami = data.aws_ami.ubuntu.id
instance_type = var.instance_type
tags = {
Name = var.instance_name
}
}
variable "aws_region" { description = "Região AWS" }
variable "instance_type" { description = "Tipo da instância" }
variable "instance_name" { description = "Tag de nome da instância" }
aws_region = "us-west-2"
instance_type = "t2.micro"
instance_name = "learn-terraform"
⚠️ Esse arquivo está no.gitignore
para proteger informações sensíveis.
terraform plan # Visualiza o que será criado
terraform apply # Aplica e provisiona a infraestrutura
Adicione no outputs.tf
se quiser retornar IP da instância:
output "public_ip" {
value = aws_instance.app_server.public_ip
}
- Dados sensíveis (ex:
terraform.tfvars
,*.tfstate
) estão protegidos via.gitignore
- Não commitamos credenciais nem tokens
- Pode-se utilizar
AWS Secrets Manager
ouGitHub Secrets
para projetos mais avançados
- Adicionar Security Groups personalizados
- Conectar com S3 ou RDS
- Configurar CI/CD com GitHub Actions
- Modularização com Terraform Modules
- Utilizar
remote backend
(S3 + DynamoDB) para ambientes colaborativos
Jonathan Esteves — DevOps em transição com propósito e visão de impacto através da tecnologia.
MIT © 2025 - Projeto educacional e open source.