0Pricing
Terraform Infrastructure as Code · Aula

Blocos dinâmicos para configurações aninhadas

Gere programaticamente blocos de configuração aninhados repetidos usando blocos dinâmicos, eliminando a necessidade de copiar e colar itens como regras de grupos de segurança.

Blocos dinâmicos para configurações aninhadas é uma aula grátis de Terraform Infrastructure as Code no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Terraform Infrastructure as Code, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Terraform Infrastructure as Code inclui 4 aulas no total.

O problema da repetição

Alguns recursos contêm blocos aninhados repetidos, como várias regras de ingress em um grupo de segurança. Escrever cada uma manualmente é trabalhoso e dificulta manter o princípio DRY. Blocos dinâmicos geram esses blocos a partir de uma coleção.

Comece pelos blocos estáticos

Esta é a versão manual: três blocos de ingress quase idênticos. Imagine manter uma dúzia deles.

resource "aws_security_group" "web" {
  ingress {
    from_port   = 80
    to_port     = 80
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }
  ingress {
    from_port   = 443
    to_port     = 443
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }
}

Anatomia de um bloco dinâmico

Um bloco dynamic tem um rótulo correspondente ao nome do bloco aninhado, uma coleção for_each e um bloco content que descreve cada instância gerada.

dynamic "ingress" {
  for_each = var.rules
  content {
    from_port   = ingress.value.port
    to_port     = ingress.value.port
    protocol    = "tcp"
    cidr_blocks = ingress.value.cidrs
  }
}

O objeto iterador

Dentro de content, faça referência ao elemento atual por meio de um objeto nomeado conforme o rótulo do bloco. Ele expõe .value (o elemento) e .key (a chave do mapa ou o índice da lista).

Definindo a variável de entrada

Controle o bloco dinâmico com uma variável tipada. Uma lista de objetos mantém cada regra autodocumentada.

variable "rules" {
  type = list(object({
    port  = number
    cidrs = list(string)
  }))
}

Unindo tudo

Agora o recurso permanece compacto, independentemente de quantas regras você passar.

resource "aws_security_group" "web" {
  name = "web-sg"
  dynamic "ingress" {
    for_each = var.rules
    content {
      from_port   = ingress.value.port
      to_port     = ingress.value.port
      protocol    = "tcp"
      cidr_blocks = ingress.value.cidrs
    }
  }
}

Renomeando o iterador

O argumento iterator permite renomear a variável de iteração, o que é útil ao aninhar blocos dinâmicos para evitar confusão.

dynamic "ingress" {
  for_each = var.rules
  iterator = rule
  content {
    from_port = rule.value.port
    to_port   = rule.value.port
  }
}

Ignorando blocos condicionalmente

Forneça uma coleção vazia para produzir zero blocos. Um operador ternário em for_each torna um bloco opcional.

dynamic "logging" {
  for_each = var.enable_logging ? [1] : []
  content {
    target_bucket = var.log_bucket
  }
}

Blocos dinâmicos aninhados

Os blocos dinâmicos podem ser aninhados. Use iteradores distintos para que o bloco interno possa referenciar os dois níveis sem ambiguidade.

dynamic "setting" {
  for_each = var.settings
  iterator = s
  content {
    namespace = s.value.namespace
    name      = s.value.name
    value     = s.value.value
  }
}

Quando não usar blocos dinâmicos

Os blocos dinâmicos adicionam indireção e podem prejudicar a legibilidade. Se você tiver apenas um ou dois blocos estáticos, mantenha-os literais. Use blocos dinâmicos quando a quantidade for orientada por dados.

Inspecionando o resultado

Execute um plano para confirmar que os blocos gerados correspondem ao esperado. O Terraform expande cada elemento da coleção em um bloco aninhado concreto.

terraform plan

Verificação rápida

Teste seus conhecimentos sobre blocos dinâmicos.

Recapitulação: configuração aninhada DRY

Os blocos dinâmicos permitem gerar configurações aninhadas a partir de dados:

  • for_each controla a iteração; content define cada bloco.
  • O iterador expõe .value e .key.
  • Coleções vazias tornam os blocos opcionais.
  • Use-os com moderação para manter as configurações legíveis.

Perguntas Frequentes

A aula “Blocos dinâmicos para configurações aninhadas” é grátis?

Sim — o texto completo de “Blocos dinâmicos para configurações aninhadas” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Terraform Infrastructure as Code, atualize para CoddyKit PRO. O curso de Terraform Infrastructure as Code inclui 4 aulas no total.

O que vou aprender em “Blocos dinâmicos para configurações aninhadas”?

Gere programaticamente blocos de configuração aninhados repetidos usando blocos dinâmicos, eliminando a necessidade de copiar e colar itens como regras de grupos de segurança. Você pratica Terraform Infrastructure as Code com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Terraform Infrastructure as Code?

Nenhuma experiência prévia é necessária. Terraform Infrastructure as Code no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.

Quanto tempo leva a aula “Blocos dinâmicos para configurações aninhadas”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Terraform Infrastructure as Code?

Sim. Cada aula de Terraform Infrastructure as Code inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Usando loops com `for_each` e `count`
  2. Funções integradas do Terraform
  3. Expressões condicionais e splats
  4. Blocos dinâmicos para configurações aninhadas
← Voltar para Terraform Infrastructure as Code