Sintaxe e Conceitos Essenciais do Terraform

Sintaxe e Conceitos Essenciais do Terraform

Arquivos de Configuração do Terraform

Os arquivos de configuração do Terraform suportam dois formatos principais: HCL (HashiCorp Configuration Language) e JSON. O formato HCL utiliza a extensão .tf, enquanto o JSON usa .tf.json. O HCL é mais legível para humanos, suporta comentários com // e é o formato recomendado para a maioria dos projetos. O formato JSON é frequentemente gerado ou manipulado por ferramentas, mas também pode ser editado manualmente. As configurações do Terraform são declaartivas, o que significa que referências a outros recursos e variáveis não dependem da ordem de definição.

Providers no Terraform

Os proviedrs são plugins que permitem ao Terraform interagir com APIs de provedores de nuvem ou outros serviços. Cada provider expõe recursos e fontes de dados específicos. É necessário declarar os providers no bloco required_providers, especificando sua origem e versão. A configuração de um provider envolve definir um bloco provider com parâmetros como credenciais e regiões. É possível configurar múltiplas instâncias do mesmo provider usando alias, permitindo, por exemplo, gerenciar recursos em diferentes regiões de um provedor.

Recursos (Resources)

Um recurso representa um componente de infraestrutura, como uma instância de computação ou um registro DNS. Recursos são definidos com a palavra-chave resource, seguida por um tipo e um nome local. Os atributos do recurso são configurados dentro do bloco para descrever suas propriedades. O nome do recurso deve começar com uma letra ou sublinhado e pode conter apenas caracteres alfanuméricos, sublinhados e travessões. Referências a atributos seguem o padrão resource.<nome>.<atributo>.

Fontes de Dados (Data Sources)

As fontes de dados permitem consultar informações sobre recursos existentes sem criá-los ou gerenciá-los. Elas são definidas com a palavra-chave data e permitem filtrar dados para uso em outras partes da configuração. É uma boa prática manter fontes de dados em arquivos seaprados quando há muitas consultas.

Expressões no Terraform

O Terraform inclui várias expressões para manipulação de dados. Expressões condicionais seguem o formato condição ? valor_verdadeiro : valor_falso. Expressões for permitem iterar sobre coleções para transformar dados, como listas ou mapas. A expressão splat oferece uma maneira simplificada de acessar atributos de listas de objetos.

Exemplos Práticos

Considere os seguintes arquivos de configuração para demonstrar variáveis, valores e saídas.

variables.tf

variable "area" {
  type        = string
  description = "Define o nome da região"
}

variable "responsavel" {
  type        = string
  description = "Define o nome do responsável"
}

variable "ambientes" {
  type        = list(string)
  description = "Define a lista de ambientes"
}

variable "registros_dns" {
  type        = map(string)
  description = "Define mapeamento de nomes DNS"
}

variable "especificacoes_ecs" {
  type = list(map(string))
}

terraform.tfvars

area = "sao-paulo"

responsavel = ""

ambientes = ["desenvolvimento", "teste", "homologacao", "producao"]

registros_dns = {
  "desenvolvimento" = "dev.example.com",
  "teste"           = "test.example.com",
  "homologacao"     = "staging.example.com",
  "producao"        = "prod.example.com"
}

especificacoes_ecs = [{
  "nome"   = "servidor01",
  "sistema" = "linux"
  }, {
  "nome"   = "servidor02",
  "sistema" = "windows"
}]

output.tf

output "area_selecionada" {
  value = var.area != "" ? var.area : "riodejaneiro"
}

output "responsavel_padrao" {
  value = var.responsavel != "" ? var.responsavel : "admin"
}

output "lista_ambientes" {
  value = var.ambientes
}
// Uso de expressão for para iterar sobre uma lista
output "ambientes_formatados" {
  value = [for item in var.ambientes : "${item}"]
}
// Uso de expressão for com índice para lista
output "ambientes_com_indice" {
  value = [for idx, item in var.ambientes : "${idx}-${item}"]
}

output "mapa_dns" {
  value = var.registros_dns
}
// Uso de expressão for para iterar sobre um mapa
output "dns_formatado" {
  value = [for chave, valor in var.registros_dns : "${chave} : ${valor}"]
}

output "lista_ecs" {
  value = var.especificacoes_ecs
}
// Uso de expressão splat para acessar atributos
output "nomes_ecs" {
  value = var.especificacoes_ecs[*].nome
}

Ao executar terraform plan, as saídas exibirão os valores processados, demonstrando o uso de expressões condicionais, loops e acesso a dados estruturados.

Módulos no Terraform

Módulos permitem reutilizar configurações, promovendo consistência e reduzindo duplicação de código. Um módulo é um conjunto de arquivos .tf em um diretório. Eles podem ser locais ou remotos. O comando terraform get baixa módulos, e terraform graph visualiza dependências. Referências a saídas de módulos seguem o padrão module.<nome>.<saída>. Módulos podem ser instanciados múltiplas vezes com nomes únicos.

Tags: Terraform HCL Infrastructure as Code Provider Resource

Publicado em 6-4 20:13 por Thomas