Infraestrutura como Código (IaC) mudou fundamentalmente a forma como gerenciamos infraestrutura de TI. Em vez de clicar manualmente em consoles web para criar servidores, configurar redes e gerenciar serviços cloud, IaC permite que você defina toda a sua infraestrutura em código legível por humanos que pode ser versionado, revisado e automatizado.
O Terraform, criado pela HashiCorp, é a ferramenta de IaC mais amplamente adotada. Ele suporta virtualmente todos os provedores de cloud e serviços por meio de um fluxo de trabalho consistente e uma linguagem de configuração chamada HCL (HashiCorp Configuration Language). Este guia apresentará os conceitos fundamentais, o levará através de exemplos práticos e lhe dará uma base sólida para gerenciar infraestrutura com o Terraform.
O Que É Infraestrutura como Código?
Infraestrutura como Código é a prática de gerenciar e provisionar recursos de computação usando arquivos de definição legíveis por máquina, em vez de configuração interativa manual. Os benefícios incluem:
- Versionamento: Sua infraestrutura é versionada junto com o código da sua aplicação
- Reprodutibilidade: Ambientes idênticos podem ser criados de forma confiável
- Automação: Mudanças na infraestrutura podem ser integradas em pipelines CI/CD
- Colaboração: Equipes podem revisar mudanças de infraestrutura usando os mesmos fluxos de trabalho de revisão de código
- Documentação: A configuração em si serve como documentação
- Recuperação de Desastres: Ambientes inteiros podem ser recriados a partir do código
Instalando o Terraform
Linux (Ubuntu/Debian)
# Adicionar a chave GPG da HashiCorp
wget -O- https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
# Adicionar repositório
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
# Instalar Terraform
sudo apt update && sudo apt install terraform -y
macOS
brew tap hashicorp/tap
brew install hashicorp/tap/terraform
Windows
winget install HashiCorp.Terraform
Verificar Instalação
terraform version
Conceitos Fundamentais do Terraform
Providers
Providers são plugins que permitem ao Terraform interagir com APIs de cloud e outros serviços. Os providers populares incluem AWS, Azure, Google Cloud, Cloudflare, Docker e muitos mais.
# Configurar o provider AWS
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.0"
}
}
}
provider "aws" {
region = "us-east-1"
}
Recursos
Recursos são os componentes de infraestrutura que o Terraform gerencia. Cada recurso pertence a um provider e tem um tipo e um nome:
# Criar uma instância EC2 na AWS
resource "aws_instance" "web_server" {
ami = "ami-0c55b159cbfafe1f0"
instance_type = "t3.micro"
tags = {
Name = "web-server"
Environment = "production"
}
}
Variáveis
Variáveis tornam suas configurações reutilizáveis e flexíveis:
# Definir variáveis em variables.tf
variable "instance_type" {
description = "Tipo da instância EC2"
type = string
default = "t3.micro"
}
variable "environment" {
description = "Nome do ambiente de implantação"
type = string
}
# Usar variáveis na configuração de recursos
resource "aws_instance" "web_server" {
ami = "ami-0c55b159cbfafe1f0"
instance_type = var.instance_type
tags = {
Name = "web-server"
Environment = var.environment
}
}
Outputs
Outputs exibem informações sobre sua infraestrutura após o apply:
output "instance_public_ip" {
description = "O endereço IP público do servidor web"
value = aws_instance.web_server.public_ip
}
output "instance_id" {
description = "O ID da instância EC2"
value = aws_instance.web_server.id
}
Estado (State)
O Terraform mantém um arquivo de estado (terraform.tfstate) que rastreia quais recursos ele gerencia e suas propriedades atuais. Este arquivo é crítico porque é assim que o Terraform sabe o que existe na sua infraestrutura real.
Importante: O arquivo de estado contém informações sensíveis (IDs de recursos, endereços IP e potencialmente senhas). Em ambientes de equipe, sempre armazene o estado remotamente (S3, Azure Blob, Terraform Cloud) e nunca faça commit dele no controle de versão.
O Fluxo de Trabalho Terraform
O fluxo de trabalho principal do Terraform consiste em três comandos:
1. terraform init
Inicializa o diretório de trabalho, baixa os providers e configura o backend:
terraform init
2. terraform plan
Cria um plano de execução mostrando o que o Terraform fará:
terraform plan
3. terraform apply
Aplica as mudanças para alcançar o estado desejado:
terraform apply
Para destruir toda a infraestrutura gerenciada:
terraform destroy
Exemplo Prático: Implantando uma Instância EC2
Crie um diretório de projeto:
mkdir terraform-demo && cd terraform-demo
Crie main.tf:
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.0"
}
}
required_version = ">= 1.7.0"
}
provider "aws" {
region = var.aws_region
}
resource "aws_instance" "web" {
ami = var.ami_id
instance_type = var.instance_type
tags = {
Name = "${var.project_name}-web"
Environment = var.environment
ManagedBy = "terraform"
}
}
Crie variables.tf:
variable "aws_region" {
description = "Região AWS para implantar recursos"
type = string
default = "us-east-1"
}
variable "ami_id" {
description = "ID da AMI para a instância EC2"
type = string
default = "ami-0c55b159cbfafe1f0"
}
variable "instance_type" {
description = "Tipo da instância EC2"
type = string
default = "t3.micro"
}
variable "project_name" {
description = "Nome do projeto para tagging"
type = string
default = "knowledgexchange"
}
variable "environment" {
description = "Ambiente de implantação"
type = string
default = "development"
}
Crie outputs.tf:
output "instance_id" {
description = "ID da instância EC2"
value = aws_instance.web.id
}
output "public_ip" {
description = "Endereço IP público da instância EC2"
value = aws_instance.web.public_ip
}
Execute o fluxo de trabalho:
# Inicializar o diretório de trabalho
terraform init
# Visualizar as mudanças
terraform plan
# Aplicar as mudanças
terraform apply
Melhores Práticas
- Sempre execute
terraform planantes deterraform applypara revisar as mudanças - Use estado remoto com locking para colaboração em equipe
- Use módulos para organizar e reutilizar configurações
- Nunca faça commit de segredos nos seus arquivos Terraform
- Use workspaces ou diretórios separados para diferentes ambientes
- Fixe versões de providers para builds reproduzíveis
- Use
terraform fmtpara formatar seu código de forma consistente
Conclusão
O Terraform é uma ferramenta poderosa que traz os princípios da engenharia de software para o gerenciamento de infraestrutura. Ao definir sua infraestrutura como código, você ganha reprodutibilidade, colaboração e capacidades de automação que a configuração manual nunca pode alcançar.
O percurso de aprendizado vai de exemplos simples de recurso único a módulos complexos multi-provider que gerenciam ambientes de produção inteiros. Os conceitos e fluxos de trabalho cobertos neste guia fornecem a base que você precisa para começar a usar o Terraform de forma eficaz.