🧱 Aulão DevOps

Infraestrutura
como Código

Aprenda a declarar, versionar e automatizar qualquer infraestrutura de TI usando Terraform — a ferramenta IaC mais adotada do mercado.

terraform iac aws gcp azure localstack

Como IaC Funciona?

Infrastructure-as-Code emprega scripts e templates para automatizar a configuração de toda a infraestrutura. O setup é declarado em arquivos de código — versionados, revisáveis e reproduzíveis.

Diagrama Como IaC Funciona — writes code, scripts/templates/policies, push/pull para Terraform, Ansible, Chef, Puppet, CloudFormation

O Ecossistema IaC

Terraform é o líder do mercado, mas existe um ecossistema rico de ferramentas IaC. Entenda onde cada uma se encaixa.

Cheatsheet IaC Landscape — Containerization, Kubernetes, Terraform, Ansible, Docker, CI/CD Pipeline
🚫
Elimina Erros Humanos
Nada é feito manualmente — toda infra é descrita em código, garantindo consistência e eliminando falhas operacionais por esquecimento ou erro de digitação.
📦
Estado Versionado
O terraform.tfstate é o registro do estado atual da infraestrutura. Junto com o código no git, você tem histórico completo de toda mudança.
terraform.tfstate
📋
Código como Fonte da Verdade
Toda a configuração está nos arquivos .tf. Evite mudanças manuais fora do código para garantir rastreabilidade e reprodutibilidade.
.tf files
🔁
Multi-Cloud & Modular
O mesmo workflow funciona para AWS, GCP, Azure ou qualquer um dos 3.000+ providers disponíveis. Módulos permitem reutilizar configurações entre projetos.
🔥 O Problema

Infra Manual
é um Pesadelo

Cliques no console, servidores "floco de neve", configurações divergentes entre ambientes — sem IaC, o caos é inevitável.

Caos Manual vs. Ordem com IaC

Quando cada servidor é configurado manualmente, nenhum é igual ao outro. O resultado: ambientes impossíveis de reproduzir e incidentes de sexta-feira às 23h.

❌ Infra Manual srv-1 v2.1.0 srv-2 v1.9.4 srv-3 v2.0.1 configurações diferentes sem histórico de mudanças $ ssh admin@srv-2 $ apt install nginx=1.9.4 # version pinned by hand $ vim /etc/nginx/nginx.conf # manual edit $ # oops, forgot to document this change... vs ✅ IaC com Terraform main.tf resource "aws_instance" ami = var.ami type = "t3.medium" count = 3 # same config, always terraform apply srv-1 v2.1.0 srv-2 v2.1.0 srv-3 v2.1.0 configuração idêntica, sempre $ git log --oneline a3f9c02 feat: add 3 web servers t3.medium

Os Problemas Clássicos

❄️
Servidores "Floco de Neve"
Cada servidor acumula mudanças manuais únicas ao longo do tempo. Ninguém sabe exatamente o que tem em cada máquina — e ninguém ousa reiniciá-las.
😱
Configuration Drift
Com o tempo, ambientes de dev, staging e prod divergem. O clássico "funciona na minha máquina" vira um incidente em produção.
📵
Sem Histórico de Mudanças
Quem mudou essa regra de security group? Quando? Por quê? Com infra manual, não há audit trail. Com IaC, o git guarda tudo.
🔄
Impossível de Reproduzir
Precisa subir um ambiente idêntico ao de produção para testar? Com infra manual, isso leva dias. Com Terraform, um apply recria tudo em minutos.
terraform apply
🏗️ Como Funciona

Terraform
por Dentro

Providers, resources, state e módulos — entenda os blocos fundamentais do Terraform antes de escrever o primeiro .tf.

A Arquitetura do Terraform

Seu código .tf descreve o estado desejado. O Terraform Core compara com o estado atual (tfstate) e chama o provider certo para materializar a diferença.

Como o Terraform funciona por dentro Código .tf main.tf variables.tf outputs.tf provider.tf modules/ Terraform Core terraform init terraform plan terraform apply terraform.tfstate source of truth do estado atual Providers AWS GCP Azure + 3000 outros Cloud VMs, Buckets Databases Networks Load Balancers Kubernetes DNS, CDN... O provider traduz os recursos .tf em chamadas de API específicas de cada cloud — o mesmo código funciona em qualquer provedor.

O Arquiteto em Ação

Do código declarativo à infraestrutura real: o Terraform age como um arquiteto que recebe o projeto e executa a construção.

O arquiteto — arquivos .tf declarativos traduzidos em infraestrutura via TERRAFORM APPLY

Conceitos Fundamentais

🔌
Providers
Plugins que traduzem seu código para chamadas de API de cada plataforma. Há mais de 3.000 providers: AWS, GCP, Azure, Kubernetes, GitHub, Datadog e muito mais.
provider.tf
🧱
Resources
A unidade básica do Terraform. Cada resource representa um componente de infraestrutura: uma VM, um bucket, uma regra de firewall, um banco de dados.
resource "aws_instance"
📊
State (tfstate)
O arquivo que mapeia seus resources declarados à infraestrutura real. É a fonte de verdade do Terraform — nunca edite ou delete manualmente.
terraform.tfstate
📦
Módulos
Conjuntos reutilizáveis de resources. Permitem encapsular padrões (ex: "VPC padrão da empresa") e reutilizá-los em múltiplos projetos sem duplicar código.
modules/
🎛️
Variables & Outputs
Variables parametrizam seu código (region, instance_type, tags). Outputs expõem valores para outros módulos ou para scripts externos consumirem.
variables.tf outputs.tf
🔒
Remote State
Em times, o tfstate é armazenado remotamente (S3, GCS, Terraform Cloud) com locking para evitar conflitos quando múltiplas pessoas rodam o Terraform.
backend.tf
⚙️ Workflow

O Ciclo de Vida
do Terraform

Quatro comandos essenciais que cobrem o básico necessário para interagir no dia a dia com Terraform.

Validate → Plan → Apply → Destroy

Cada comando tem uma responsabilidade clara. O plan é seu melhor amigo — nunca faça um apply sem ver o plano antes.

Terraform workflow — Validate, Plan, Apply, Destroy
01
validate
Verifica a sintaxe e estrutura dos arquivos .tf sem acessar a API
02
plan
Mostra exatamente o que será criado, alterado ou destruído
03
apply
Executa as mudanças e atualiza o tfstate com o novo estado
04
destroy
Remove toda a infraestrutura gerenciada pelo projeto

O Ciclo Completo: Init → Plan → Apply

O init é sempre o primeiro passo — ele baixa os providers e configura o backend antes de qualquer operação.

Ciclo Init → Plan → Apply com tflocal
# 1. Baixar providers e inicializar backend
terraform init

# 2. Validar a sintaxe do código
terraform validate

# 3. Ver o que será criado/alterado
terraform plan

# 4. Aplicar as mudanças
terraform apply

# Tip: em labs locais, use tflocal para simular AWS sem custo
tflocal init && tflocal plan && tflocal apply

LocalStack: AWS no Seu Laptop

Simule serviços AWS localmente via Docker — custo zero, feedback imediato, ambiente seguro para experimentar e errar.

LocalStack — simulação de serviços AWS via container Docker
LocalStack: estude sem gastar
Simula EC2, S3, RDS, EKS e dezenas de outros serviços AWS localmente. Use docker-compose up para subir o ambiente e tflocal como substituto do terraform CLI — as chamadas vão para o LocalStack em vez da AWS real.
🧪 Mão na Massa

Labs
Práticos

Trilha de exercícios hands-on de Infrastructure as Code. Três labs em dificuldade crescente, cobrindo Terraform do zero ao cenário real.

Trilha IaC — Terraform

Todos os labs estão no repositório open source da ToolBoX. Clone e execute — sem surpresas de custo.

000
Primeiros Passos com Terraform
Entenda o ciclo básico escrevendo seus primeiros arquivos .tf e executando os comandos essenciais: init, plan, apply e destroy.
terraform 🟢 Iniciante ⏱ 15–25 min
Ver Lab
001
Terraform com GCP
Provisione uma instância Compute Engine no Google Cloud praticando o ciclo completo de IaC. Executado no Google Skills (Qwiklabs) — sem precisar de conta GCP própria.
terraform gcp 🟢 Iniciante ⏱ ~1h
Ver Lab
002
Terraform AWS com LocalStack
Execute um cenário real de infraestrutura com Terraform em ambiente local, usando LocalStack para simular serviços AWS — sem custo, sem risco.
terraform aws localstack 🟡 Iniciante–Inter. ⏱ 25–40 min
Ver Lab