Laboratório para construir uma biblioteca de módulos Terraform reutilizáveis para a AWS, em dupla. Cada módulo resolve uma parte da infraestrutura e pode ser combinado com os outros para montar ambientes completos.
O primeiro módulo é o infra-base: a rede mínima para colocar qualquer coisa na internet, com VPC, subnet pública, Internet Gateway e route table com a rota padrão. Os próximos módulos vão usar os outputs dele (VPC e subnet) como entrada.
| Módulo | Caminho | Status |
|---|---|---|
| infra-base | terraform-modules/infra-base |
VPC, subnet pública, Internet Gateway e route table |
| Recurso | Nome | Descrição |
|---|---|---|
aws_vpc |
vpc-<name>-<env> |
VPC com DNS hostnames habilitado |
aws_subnet |
sub-pub-<name>-<env> |
Subnet pública com IP público automático (map_public_ip_on_launch) |
aws_internet_gateway |
igw-<name>-<env> |
Saída para a internet |
aws_route_table |
rt-pub-<name>-<env> |
Rota 0.0.0.0/0 apontando para o Internet Gateway |
aws_route_table_association |
– | Liga a route table à subnet pública |
| Variável | Descrição |
|---|---|
name |
Nome base dos recursos |
env |
Ambiente (ex.: dev, prod) |
vpc_cidr |
CIDR da VPC |
subnet_cidr |
CIDR da subnet pública |
availability_zone |
AZ da subnet pública |
| Output | Descrição |
|---|---|
vpc_id |
ID da VPC |
subnet_pub_id |
ID da subnet pública |
igw_id |
ID do Internet Gateway |
route_table_pub_id |
ID da route table pública |
- Terraform (
>= 1.5): infraestrutura como código, organizada em módulos; - Provider AWS (
>= 5.0): recursos de rede na AWS; - Amazon VPC: VPC, subnet, Internet Gateway e route table;
- terraform-docs: documentação gerada automaticamente em cada módulo.
studies-lab-terraform-modules/
├── terraform-modules/
│ └── infra-base/ # Módulo de rede base
│ ├── version.tf # Versões do Terraform e do provider
│ ├── variables.tf # Entradas
│ ├── vpc.tf # VPC
│ ├── sub_pub.tf # Subnet pública
│ ├── igw.tf # Internet Gateway
│ ├── rt.tf # Route table pública
│ ├── rta.tf # Associação route table ↔ subnet
│ ├── outputs.tf # Saídas
│ └── README.md # Documentação do terraform-docs
├── docs/arch.gif # Diagrama da arquitetura
└── README.md
- O módulo cria a VPC com o CIDR informado.
- Dentro dela, cria a subnet pública na AZ escolhida, com IP público automático.
- Cria o Internet Gateway e anexa na VPC.
- Cria a route table pública com a rota
0.0.0.0/0para o Internet Gateway. - Associa a route table à subnet: tudo o que subir nela passa a ter acesso à internet.
- Devolve os IDs nos outputs para os próximos módulos usarem.
module "infra_base" {
source = "./terraform-modules/infra-base"
name = "lab"
env = "dev"
vpc_cidr = "10.0.0.0/16"
subnet_cidr = "10.0.1.0/24"
availability_zone = "us-east-1a"
}terraform init
terraform plan
terraform applyEm uma validação end-to-end, o terraform apply deve criar a rede e uma instância colocada na subnet deve conseguir sair para a internet.
Pontos principais de validação:
terraform validatesem erros;terraform planlistando os 5 recursos do módulo;- VPC, subnet, Internet Gateway e route table criados com as tags
<tipo>-<name>-<env>; - rota
0.0.0.0/0apontando para o Internet Gateway e associada à subnet; - outputs
vpc_id,subnet_pub_id,igw_ideroute_table_pub_idpreenchidos; terraform destroyremovendo tudo ao final.
- William Alves Coelho · @willtechdev
- Eduardo Castro · @duhcastro222-rgb
