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 planVerificaçã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_eachcontrola a iteração;contentdefine cada bloco.- O iterador expõe
.valuee.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
- Usando loops com `for_each` e `count`
- Funções integradas do Terraform
- Expressões condicionais e splats
- Blocos dinâmicos para configurações aninhadas