0 XP
Módulo 7 · Terraform e Ansible

Terraform: linguagem, ciclo e o papel do state

Intermediário 50 min+25 XPTerraform

Objetivos desta aula

  • Escrever provider, resource, variable e output
  • Entender init/plan/apply/destroy
  • Compreender o que o state guarda

Terraform é declarativo: você descreve o estado desejado e ele calcula o plano de mudança. O ciclo é init (baixa providers e configura backend), plan (mostra o diff), apply (executa) e destroy (remove). Ler o plano antes de aplicar é obrigação profissional, não formalidade.

O state é o mapa entre o código e os recursos reais, incluindo atributos e dependências. Perder o state significa que o Terraform não sabe mais o que gerencia; corrompê-lo por duas execuções simultâneas significa recurso duplicado ou destruído. Por isso: backend remoto, versionamento e lock.

Atenção de segurança: o state contém valores sensíveis em texto (senhas geradas, endpoints, chaves). Ele nunca vai para o Git; vai para bucket privado, criptografado e com acesso restrito.

1. Declarativo, não imperativo

Você descreve o estado desejado; o Terraform calcula a diferença e executa as chamadas de API na ordem certa, usando o grafo de dependências entre recursos.

2. Blocos da linguagem HCL

  • terraform/provider: versões e configuração do provedor
  • resource: algo que o Terraform cria e gerencia
  • data: leitura de algo que já existe
  • variable/output/locals: entradas, saídas e valores calculados

3. O ciclo

init baixa providers e configura backend; fmt e validate checam; plan mostra o que vai mudar; apply executa. Leia o plan sempre: -/+ significa destruir e recriar.

4. O state

O state mapeia cada recurso do código ao ID real na nuvem. Sem ele, o Terraform não sabe o que já criou. Ele contém dados sensíveis: nunca vá para o Git.

5. Lock file e versões

.terraform.lock.hcl fixa versões exatas dos providers e deve ser commitado. Restrinja versões com ~> 5.0.

6. Checagem final

Você deve ler um plan e dizer o que será criado, alterado ou recriado, e explicar por que o state é crítico.

Na prática

Configuração base do CloudShop

hcl

terraform {
  required_version = "~> 1.9"
  required_providers {
    aws = { source = "hashicorp/aws", version = "~> 5.60" }
  }
}

provider "aws" {
  region = var.region
  default_tags {
    tags = {
      project = "cloudshop"
      env     = var.env
      owner   = "equipe-plataforma"
      managed = "terraform"
    }
  }
}

variable "region" { type = string, default = "us-east-1" }
variable "env"    { type = string }
variable "vpc_cidr" {
  type        = string
  description = "Faixa da VPC do ambiente"
  validation {
    condition     = can(cidrhost(var.vpc_cidr, 0))
    error_message = "vpc_cidr deve ser um CIDR valido."
  }
}

resource "aws_vpc" "main" {
  cidr_block           = var.vpc_cidr
  enable_dns_hostnames = true
  tags                 = { Name = "cloudshop-${var.env}" }
}

output "vpc_id" {
  value       = aws_vpc.main.id
  description = "ID da VPC criada"
}

Nota de segurança: Marque outputs sensíveis com sensitive = true e nunca imprima segredo em log de pipeline.

Ciclo de trabalho

bash

terraform init
terraform fmt -recursive && terraform validate
terraform plan -var-file=env/dev.tfvars -out=plan.tfplan
terraform apply plan.tfplan
terraform output -json | jq
terraform state list
terraform state show aws_vpc.main
terraform destroy -var-file=env/dev.tfvars

Recurso, variável e output

hcl

terraform {
  required_version = ">= 1.8"
  required_providers {
    aws = { source = "hashicorp/aws", version = "~> 5.0" }
  }
}
variable "env" { type = string }

resource "aws_s3_bucket" "images" {
  bucket = "cloudshop-${var.env}-images"
}
output "images_bucket" { value = aws_s3_bucket.images.bucket }

Ciclo com plano salvo

bash

terraform init
terraform fmt -check && terraform validate
terraform plan -var env=dev -out tfplan
# Plan: 1 to add, 0 to change, 0 to destroy.
terraform apply tfplan          # aplica exatamente o que foi revisado

Por que isso importa

IaC é requisito quase universal nas vagas; explicar state e plano é pergunta recorrente em entrevista.

Erro comum

Rodar apply sem ler o plano e destruir um recurso com dados.

Dica de produção

Salve o plano em arquivo e aplique exatamente esse plano: evita surpresa entre revisar e aplicar.

Alerta de segurança

State em bucket público é vazamento de credenciais e topologia. Bloqueie acesso público e habilite criptografia.

Pergunta de entrevista

O que acontece se dois engenheiros rodarem apply ao mesmo tempo sem lock?

Glossário

provider
Plugin que traduz configuração Terraform em chamadas de API de uma plataforma.
state
Arquivo que mapeia recursos declarados aos recursos reais e seus atributos.
provider
Plugin que traduz recursos Terraform em chamadas de API de um serviço.
state
Arquivo que liga recursos do código aos objetos reais.
data source
Bloco que lê informações existentes sem gerenciá-las.

Conexão com o CloudShop

Criar a VPC do CloudShop via Terraform, substituindo os comandos manuais do módulo anterior.

Quiz da aula

  1. 1. Para que serve o state do Terraform?

  2. 2. No plan, o que significa -/+?

  3. 3. O .terraform.lock.hcl deve ir para o Git?

Minhas anotações

Salvo automaticamente neste navegador.

AnteriorPróxima