Folha de dicas do Terraform - comandos úteis e exemplos
A lista de todos os comandos do terraform
Aqui está um guia rápido de Terraform
com comandos essenciais, elementos de configuração, gerenciamento de recursos, módulos, variáveis, manipulação de estado e melhores práticas.
A Terraform é uma ferramenta de código de infraestrutura (IaC) de código aberto desenvolvida pela
HashiCorp,
que permite aos usuários definir e provisionar infraestrutura em múltiplos provedores de nuvem (por exemplo, AWS, Azure, GCP) usando arquivos de configuração declarativos.
Seu principal objetivo é automatizar o provisionamento da infraestrutura, garantir a consistência e reduzir erros manuais.
A Terraform suporta fluxos de trabalho multi-nuvem, modulares e baseados em estado, tornando-a uma pedra fundamental das práticas modernas de DevOps.
Principais benefícios da Terraform:
- Sintaxe Declarativa: Defina os estados desejados da infraestrutura em código.
- Agnosco de Provedor: Funciona com AWS, Azure, GCP, Kubernetes e muito mais.
- Gerenciamento de Estado: Rastreia alterações na infraestrutura para evitar conflitos.
Guia de Instalação e Configuração
https://developer.hashicorp.com/terraform/tutorials#get-started
O processo de instalação da Terraform é bastante simples.
-
Linux (Ubuntu/Debian):
wget -O - https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(grep -oP '(?<=UBUNTU_CODENAME=).*' /etc/os-release || lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list sudo apt update && sudo apt install terraform
-
Windows (WSL):
wget -O terraform.zip https://releases.hashicorp.com/terraform/1.5.5/terraform_1.5.5_windows_amd64.zip unzip terraform.zip
-
macOS (Homebrew):
brew install terraform
Verificação
terraform --version
Comandos da CLI da Terraform
Aqui está a lista de todos os comandos da Terraform:
Comando | Descrição |
---|---|
terraform init |
Inicialize um novo ou diretório existente de configuração da Terraform |
terraform validate |
Verifique se a configuração é válida |
terraform plan |
Mostre o plano de execução sem fazer alterações |
terraform apply |
Aplique as alterações necessárias para atingir o estado desejado |
terraform destroy |
Destrua a infraestrutura gerenciada pela Terraform |
terraform fmt |
Reformate os arquivos de configuração no estilo padrão |
terraform show |
Mostre o estado atual ou o plano |
terraform refresh |
Atualize o estado com a infraestrutura real |
terraform providers |
Exiba os provedores usados na configuração |
terraform graph |
Visualize as dependências de recursos como um gráfico |
terraform workspace list |
Liste todos os workspaces disponíveis |
terraform workspace new |
Crie um novo workspace |
terraform workspace select |
Mude para um workspace especificado |
terraform workspace show |
Mostre o nome do workspace atual |
terraform workspace delete |
Exclua um workspace especificado |
terraform output |
Mostre os valores de saída do arquivo de estado |
terraform import |
Importe um recurso existente para a Terraform |
terraform taint |
Marque um recurso para reconstrução na próxima aplicação |
terraform untaint |
Desmarque um recurso como taintado |
terraform state list |
Liste os recursos no arquivo de estado |
terraform state show |
Mostre os atributos de um único recurso no estado |
Essenciais de Configuração
Extensões de Arquivo
.tf
: Arquivos de configuração principais (sintaxe HCL).tfvars
: Valores de variáveis
Tipos de Blocos da Terraform
- Exemplo de Provedor
provider "aws" { region = "us-east-1" }
- Exemplo de Recurso
resource "aws_instance" "web" { ami = "ami-0abcdef" instance_type = "t2.micro" }
- Exemplo de Variável
variable "instance_count" { type = number default = 2 }
- Exemplo de Saída
output "instance_ip" { value = aws_instance.web.public_ip }
- Exemplo de Módulo
module "vpc" { source = "./modules/vpc" cidr_block = var.vpc_cidr }
Trabalhando com Variáveis
- Declarando variáveis
variable "region" { description = "Região da AWS" default = "us-east-1" }
- Atribuindo valores
- CLI:
terraform apply -var="region=us-west-2"
- tfvars:
terraform apply -var-file="prod.tfvars"
- CLI:
- Tipos:
string
,number
,bool
,list
,map
,object
Gerenciando Estado
- Arquivo de estado:
terraform.tfstate
- Estado remoto (Exemplo S3)
backend "s3" { bucket = "my-tf-state" key = "state.tfstate" region = "us-east-1" }
- Visualizar estado:
terraform show
terraform state list
Loops e Condicionais
- Count
resource "aws_instance" "web" { count = 3 ... }
- For_each
resource "aws_s3_bucket" "b" { for_each = var.bucket_names bucket = each.value }
- Condicionais
instance_type = var.env == "prod" ? "t2.large" : "t2.micro"
Funções
- Interpolação de string:
resource "aws_s3_bucket" "example" { bucket = "my-bucket-${var.env}" }
- Exemplos de lista, mapa:
locals { my_map = { a = 1, b = 2 } }
Provisionadores
Usados para provisionar recursos. Exemplo:
resource "aws_instance" "web" {
...
provisioner "local-exec" {
command = "echo Instância criada"
}
}
Melhores Práticas
- Controle de versão de todos os arquivos
.tf
- Bloqueie versões de provedores para garantir implantações consistentes
- Backend remoto para gerenciamento de estado (S3, Azure Blob, etc.)
- Criptografe arquivos de estado em backends remotos
- Modularize a infraestrutura usando módulos reutilizáveis
- Documente suas configurações
- Teste em staging antes de produção
Referências Adicionais
- Ajuda:
terraform --help
ou[comando] --help
para ajuda específica de comando - Depuração: Defina
TF_LOG=INFO
ouTF_LOG=DEBUG
para logs detalhados - Formatação:
terraform fmt
Este guia rápido fornece uma referência de acesso rápido para os aspectos mais comuns e avançados do uso da Terraform - desde comandos até melhores práticas - tornando-o prático tanto para iniciantes quanto para usuários avançados. Tenha um ótimo dia!
Links Úteis
- https://developer.hashicorp.com/terraform
- Guia Rápido do Docker
- Guia Rápido do Docker Compose - Comandos mais úteis com exemplos
- Guia Rápido do Kubernetes
- Implantar um projeto Flutter com backend no AWS Amplify
- Implantar um site gerado pelo Hugo no AWS S3
- Desempenho da AWS Lambda: JavaScript vs Python vs Golang
- Lambda em Camadas com AWS SAM e Python
- AWS SAM + AWS SQS + Python PowerTools
- Minio como alternativa ao AWS S3. Visão geral e instalação do Minio