Acesse o painel da sua conta

Não tem uma conta? Registrar

Entrar em contato

Visite também nosso site craftxp.com.br

  • img
  • img
  • img
  • img
  • img
  • img

Entre em contato

Terraform: Infraestrutura como Código para Nuvens Híbridas e Multi-Cloud

Terraform: Infraestrutura como Código para Nuvens Híbridas e Multi-Cloud

O que é Infrastructure as Code e por que o Terraform lidera esse mercado?

Infrastructure as Code (IaC) é a prática de gerenciar servidores, bancos de dados, redes e outros recursos de infraestrutura através de arquivos de configuração — em vez de configurá-los manualmente ou via scripts imperativos. O Terraform, criado pela HashiCorp, é a ferramenta de IaC mais adotada do mercado por um motivo simples: ele é cloud-agnostic, o que significa que com a mesma sintaxe você gerencia recursos na AWS, Azure, Google Cloud, Oracle Cloud e até provedores menos conhecidos como DigitalOcean, Linode ou Vultr.

Diferente de ferramentas como CloudFormation (exclusiva AWS) ou ARM Templates (exclusiva Azure), o Terraform usa uma linguagem própria chamada HashiCorp Configuration Language (HCL), que é declarativa, legível e poderosa.

Instalação e primeiros passos

Instalar o Terraform é simples. No Linux e macOS:

# Linux (Ubuntu/Debian)
wget -O- https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
sudo apt update && sudo apt install terraform

# macOS
brew tap hashicorp/tap
brew install hashicorp/tap/terraform

Verifique a instalação com terraform --version. Para Windows, basta baixar o binário ou usar o Chocolatey com choco install terraform.

Escrevendo seu primeiro manifesto

Vamos criar uma instância EC2 na AWS. Crie um arquivo chamado main.tf:

terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 5.0"
    }
  }
}

provider "aws" {
  region = "us-east-1"
}

resource "aws_instance" "meu_servidor" {
  ami           = "ami-0c55b159cbfafe1f0"
  instance_type = "t2.micro"

  tags = {
    Name = "ServidorTerraform"
  }
}

Em seguida, execute os comandos:

terraform init    # Baixa os providers e configura o backend
i> terraform plan   # Mostra o que será criado (dry run)
terraform apply  # Cria os recursos na nuvem

O plan é uma das funcionalidades mais poderosas do Terraform — ele mostra exatamente o que será alterado antes de qualquer modificação real, permitindo revisão por pares (code review) da infraestrutura.

Gerenciamento de Estado (State)

O state file (terraform.tfstate) é o coração do Terraform. Ele mapeia os recursos declarados no código com os recursos reais no provedor de nuvem. Sem ele, o Terraform não sabe o que já foi criado.

Em ambientes profissionais, o state nunca deve ficar em disco local. Use backends remotos:

terraform {
  backend "s3" {
    bucket = "meu-bucket-terraform-state"
    key    = "dev/terraform.tfstate"
    region = "us-east-1"
    # Opcional: DynamoDB para lock
    dynamodb_table = "terraform-state-lock"
  }
}

Com o DynamoDB como tabela de lock, duas pessoas nunca aplicarão alterações simultâneas — o Terraform trava o state durante a execução.

Variáveis, outputs e módulos

Para evitar repetição e criar infraestrutura reutilizável, o Terraform oferece três mecanismos essenciais:

Variáveis

variable "instance_type" {
  description = "Tipo da instância EC2"
  type        = string
  default     = "t2.micro"
}

variable "ambiente" {
  type = string
}

Outputs

output "ip_publico" {
  value = aws_instance.meu_servidor.public_ip
  description = "IP público da instância"
}

Módulos

Módulos permitem empacotar e reutilizar configurações completas:

module "vpc" {
  source = "terraform-aws-modules/vpc/aws"
  version = "5.0.0"

  name = "minha-vpc"
  cidr = "10.0.0.0/16"

  azs             = ["us-east-1a", "us-east-1b"]
  private_subnets = ["10.0.1.0/24", "10.0.2.0/24"]
  public_subnets  = ["10.0.101.0/24", "10.0.102.0/24"]

  enable_nat_gateway = true
  enable_vpn_gateway = false
  tags = {
    Terraform = "true"
    Ambiente  = var.ambiente
  }
}

Multi-Cloud na prática

Uma das maiores vantagens do Terraform é gerenciar múltiplos provedores no mesmo código:

# Provider AWS
provider "aws" {
  region = "us-east-1"
}

# Provider Azure
provider "azurerm" {
  features {}
}

# Provider GCP
provider "google" {
  project = "meu-projeto"
  region  = "us-central1"
}

resource "aws_s3_bucket" "meu_bucket" {
  bucket = "meu-bucket-aws-unicosufixo"
}

resource "azurerm_resource_group" "meu_rg" {
  name     = "meu-resource-group"
  location = "Brazil South"
}

resource "google_storage_bucket" "meu_bucket_gcp" {
  name     = "meu-bucket-gcp"
  location = "US"
}

Isso permite estratégias como disaster recovery entre clouds, replicação geográfica e até migrações progressivas.

Terraform Cloud e Workspaces

Para times que não querem gerenciar backends manualmente, o Terraform Cloud oferece:

  • Armazenamento remoto de state com versionamento
  • Execução remota de planos e applies
  • Integração com VCS (GitHub, GitLab, Bitbucket)
  • Sentinel para políticas de compliance (ex: "proibir instâncias fora da região us-east-1")
  • Workspaces para separar ambientes (dev, staging, prod)
terraform {
  cloud {
    organization = "minha-org"
    workspaces {
      name = "infra-prod"
    }
  }
}

Boas práticas para Terraform em produção

  1. Use módulos do Terraform Registry: evite reinventar a roda. O registry tem módulos oficiais e da comunidade para VPC, EKS, RDS, etc.
  2. Versionamento do state: sempre habilite versionamento no bucket S3 para poder reverter o state em caso de corrupção.
  3. Separe ambientes: use diretórios diferentes ou workspaces para dev, staging e prod.
  4. terraform validate e fmt: execute terraform validate para checar sintaxe e terraform fmt para formatar o código automaticamente.
  5. CI/CD integrado: execute terraform plan em Pull Requests e terraform apply apenas após merge na branch principal.
  6. Use .terraform.lock.hcl: mantenha o lock file no repositório para garantir que todos usem as mesmas versões de provider.

Conclusão

O Terraform transformou a maneira como equipes de infraestrutura trabalham. Com sua abordagem declarativa, suporte a centenas de provedores, gerenciamento de estado inteligente e forte ecossistema de módulos, ele se consolidou como a ferramenta padrão para IaC. Se você ainda não usa Terraform, comece hoje: instale, escreva um main.tf simples, execute terraform apply e veja a mágica acontecer. Sua infraestrutura — e sua equipe — vão agradecer.

Craft XP
Craft XP