Arquivos .tfvars no Terraform
Introdução
No Terraform, uma prática essencial é separar a definição da infraestrutura dos valores das variáveis. Isso é feito com os arquivos .tfvars, que permitem passar valores externos ao código principal. Essa abordagem é ideal para lidar com diferentes ambientes como desenvolvimento, homologacao e produção.
O que é .tfvars
Arquivos .tfvars são arquivos onde você define valores para variáveis que foram declaradas nos arquivos .tf. Eles são usados para:
- Separar configurações específicas por ambiente
- Reutilizar o mesmo código com diferentes valores
- Evitar hardcode no código principal
Explicação técnica
- Você declara as variáveis no arquivo principal (
variables.tf, por exemplo):
variable "location" {
type = string
default = "eastus"
}
variable "vm_size" {
type = string
}
- Cria arquivos
.tfvarspara cada ambiente:
dev.tfvars
location = "eastus"
vm_size = "Standard_B1s"
hml.tfvars
location = "centralus"
vm_size = "Standard_B2s"
prod.tfvars
location = "westeurope"
vm_size = "Standard_D2s_v3"
- Aplica usando:
terraform apply -var-file="dev.tfvars"
terraform apply -var-file="hml.tfvars"
terraform apply -var-file="prod.tfvars"
Comandos
terraform init
terraform plan -var-file="dev.tfvars"
terraform apply -var-file="dev.tfvars"
Exemplo prático
Estrutura de arquivos:
main.tf
variables.tf
dev.tfvars
hml.tfvars
prod.tfvars
variables.tf
variable "location" {}
variable "vm_size" {}
main.tf
provider "azurerm" {
features {}
}
resource "azurerm_resource_group" "rg" {
name = "rg-exemplo"
location = var.location
}
resource "azurerm_linux_virtual_machine" "vm" {
name = "vm-exemplo"
resource_group_name = azurerm_resource_group.rg.name
location = var.location
size = var.vm_size
admin_username = "azureuser"
network_interface_ids = ["/subscriptions/xxx/.../nic"]
os_disk {
caching = "ReadWrite"
storage_account_type = "Standard_LRS"
name = "osdisk"
}
source_image_reference {
publisher = "Canonical"
offer = "UbuntuServer"
sku = "22_04-lts"
version = "latest"
}
admin_ssh_key {
username = "azureuser"
public_key = file("~/.ssh/id_rsa.pub")
}
disable_password_authentication = true
}
Output esperado
Apply complete! Resources: 2 added, 0 changed, 0 destroyed.
Outputs:
azurerm_linux_virtual_machine.vm:
name = "vm-exemplo"
location = "eastus"
size = "Standard_B1s"
Melhores práticas
- Nunca comite arquivos
.tfvarscom dados sensíveis no Git - Use nomes claros como
dev.tfvars,hml.tfvars,prod.tfvars - Separe lógicas do código e valores com o uso de variáveis
- Automatize a seleção do ambiente nos pipelines
- Use
defaultapenas para valores comuns ou segurança
Arquivos .tfvars tornam seu código mais flexível e adaptável a diferentes contextos, facilitando o uso profissional do Terraform.