Marcos Max

Wiki Max - TI

View on GitHub

Terraform — Infraestrutura como Código

Provisiona e versiona infraestrutura de forma declarativa (linguagem HCL). Você descreve o estado desejado; o Terraform calcula e aplica as mudanças.

Fluxo básico

terraform init       # baixa providers, prepara o diretório
terraform fmt        # formata os arquivos
terraform validate   # valida a sintaxe
terraform plan       # mostra o que vai mudar (dry-run)
terraform apply      # aplica as mudanças
terraform destroy    # remove tudo que foi criado

Exemplo — provedor Docker (local, sem nuvem)

Bom para praticar sem gastar em cloud.

# main.tf
terraform {
  required_providers {
    docker = {
      source  = "kreuzwerker/docker"
      version = "~> 3.0"
    }
  }
}

provider "docker" {}

resource "docker_image" "nginx" {
  name         = "nginx:latest"
  keep_locally = false
}

resource "docker_container" "web" {
  name  = "web"
  image = docker_image.nginx.image_id
  ports {
    internal = 80
    external = 8080
  }
}
terraform init && terraform apply
# nginx disponível em http://localhost:8080

Variáveis

# variables.tf
variable "porta" {
  type    = number
  default = 8080
}

# uso: ports { external = var.porta }
terraform apply -var="porta=9090"

Outputs

output "container_id" {
  value = docker_container.web.id
}

Estado (state)

O Terraform guarda o estado em terraform.tfstate. Em equipe, use backend remoto (S3, Terraform Cloud, GitLab) com state locking para evitar conflitos.

terraform {
  backend "s3" {
    bucket = "meu-tfstate"
    key    = "prod/terraform.tfstate"
    region = "us-east-1"
  }
}

Boas práticas

Veja também: Ansible · Docker