No Terraform, variáveis e outputs são componentes essenciais que ajudam a tornar o código mais modular, reutilizável e fácil de gerenciar. Este post irá detalhar como definir e utilizar variáveis e outputs, proporcionando flexibilidade e eficiência na gestão de infraestrutura.
Como Funcionam Variáveis no Terraform
Input Variables
As variáveis de entrada (input variables) permitem a parametrização do código Terraform, tornando-o mais flexível. Aqui estão os principais argumentos usados em input variables:
- default: Valor padrão da variável.
- type: Tipo da variável.
- description: Descrição da variável.
- validation: Regras de validação.
- sensitive: Indica se a variável deve ser tratada como sensível.
- nullable: Indica se a variável pode ser nula.
Tipos Suportados
- Simples:
string
,number
,bool
- Complexos:
list(<tipo>)
,set(<tipo>)
,map(<tipo>)
,object({nome_de_atributo = <tipo>})
,tuple([<tipo>, ...])
Exemplo de Definição de Variáveis
// variables.tf
variable "ami_id" {
description = "ID da AMI para a instância"
type = string
default = "ami-12345678"
}
variable "instance_type" {
description = "Tipo da instância"
type = string
default = "t2.micro"
}
variable "instance_name" {
description = "Nome da instância"
type = string
default = "MinhaInstancia"
}
Utilizando Variáveis no Código
// main.tf
provider "aws" {
region = "us-east-1"
}
resource "aws_instance" "example" {
ami = var.ami_id
instance_type = var.instance_type
tags = {
Name = var.instance_name
}
}
Outputs no Terraform
Outputs são usados para expor informações sobre a infraestrutura provisionada pelo Terraform, facilitando o compartilhamento de dados entre diferentes partes do código ou mesmo com outras ferramentas.
Definindo Outputs
// outputs.tf
output "instance_id" {
description = "ID da instância EC2"
value = aws_instance.example.id
}
output "instance_public_ip" {
description = "Endereço IP público da instância EC2"
value = aws_instance.example.public_ip
sensitive = true
}
Utilizando Outputs
Os outputs definidos podem ser acessados utilizando o comando terraform output
:
terraform output instance_id
terraform output -raw instance_public_ip
Exemplos de Configuração e Uso
Arquivo variables.tf
variable "location" {
description = "Localização dos recursos"
type = string
default = "us-east-1"
}
variable "account_tier" {
description = "Nível da conta de armazenamento"
type = string
default = "Standard"
}
variable "account_replication_type" {
description = "Tipo de replicação da conta de armazenamento"
type = string
default = "LRS"
}
Arquivo main.tf
provider "azurerm" {
features {}
}
resource "azurerm_resource_group" "rg_storage" {
name = "myResourceGroup"
location = var.location
}
resource "azurerm_storage_account" "storage_account" {
name = "mystorageaccount"
resource_group_name = azurerm_resource_group.rg_storage.name
location = var.location
account_tier = var.account_tier
account_replication_type = var.account_replication_type
}
Arquivo outputs.tf
output "storage_account_id" {
description = "ID da Storage Account criada na Azure"
value = azurerm_storage_account.storage_account.id
}
output "sa_primary_access_key" {
description = "Primary Access Key da Storage Account criada na Azure"
value = azurerm_storage_account.storage_account.primary_access_key
sensitive = true
}
Benefícios dos Outputs
- Compartilhamento de Informações: Permitem compartilhar dados entre diferentes partes do código ou módulos.
- Integração: Facilitam a integração com outras ferramentas e scripts.
- Segurança: A utilização do atributo
sensitive
ajuda a proteger informações confidenciais.
Com esses conceitos e exemplos, você estará pronto para utilizar variáveis e outputs no Terraform de forma eficiente, tornando seu código mais modular, seguro e fácil de manter.