Usando loops com `for_each` e `count`
Aprenda a provisionar várias instâncias de um recurso ou módulo usando `count` e `for_each` para lidar eficientemente com coleções e mapas.
Usando loops com `for_each` e `count` é uma aula grátis de Terraform Infrastructure as Code no CoddyKit. Esta é a aula 1 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.
Introdução aos loops
Ao gerenciar uma infraestrutura com o Terraform, muitas vezes você precisa criar vários recursos semelhantes. Imagine precisar de 10 servidores web ou 5 instâncias de banco de dados. Repetir o mesmo bloco de código várias vezes seria trabalhoso e sujeito a erros!
Esta lição apresenta dois recursos poderosos do Terraform: count e for_each. Eles ajudam você a provisionar vários recursos com eficiência, mantendo suas configurações organizadas e escaláveis.
Por que usar `count` e `for_each`?
Usar loops como count e for_each oferece benefícios significativos:
- Menos duplicação: escreva o código da infraestrutura uma vez e reutilize-o.
- Maior legibilidade: suas configurações ficam muito mais organizadas e fáceis de entender.
- Escalabilidade: ajuste facilmente o número de recursos alterando um único valor ou coleção.
- Consistência: garanta que todos os recursos semelhantes sejam configurados da mesma forma.
`count` para repetição simples
O meta-argumento count é ideal quando você precisa criar várias instâncias quase idênticas de um recurso ou módulo. Você fornece um valor inteiro, e o Terraform cria essa quantidade de instâncias.
Cada instância criada por count terá um índice, começando em 0 e indo até count - 1. Você pode acessar esse índice usando count.index.
Exemplo: várias instâncias EC2 com `count`
Vamos provisionar três instâncias EC2 idênticas da AWS. Observe como count.index é usado para dar um nome exclusivo a cada servidor.
provider "aws" {
region = "us-east-1"
}
resource "aws_instance" "web_server" {
count = 3
ami = "ami-053b0dcd10dcf2f56" # Ubuntu Server 20.04 LTS
instance_type = "t2.micro"
tags = {
Name = "WebServer-${count.index}"
}
}Entendendo `count.index`
No exemplo anterior, ${count.index} foi resolvido automaticamente como 0, 1 e 2 para cada instância. Isso permite criar identificadores exclusivos ou ajustar propriedades de cada instância.
Sem count.index, os três servidores teriam exatamente a mesma tag “Name”, o que poderia causar confusão ou problemas na AWS.
Introdução ao `for_each`
Embora count seja excelente para repetições simples, for_each oferece mais flexibilidade. Ele itera sobre um conjunto de strings ou um mapa de strings, criando uma instância para cada elemento.
for_each é ideal quando você precisa gerenciar recursos com configurações distintas ou quando o número de recursos é determinado por uma coleção não numérica, como uma lista de nomes de ambientes ou um mapa de configurações de usuários.
Exemplo: `for_each` com um conjunto
Aqui, criamos três buckets do S3, cada um nomeado com base em um elemento do nosso conjunto usado por for_each. Usamos each.value para acessar o item atual da iteração.
provider "aws" {
region = "us-east-1"
}
resource "aws_s3_bucket" "app_buckets" {
for_each = toset(["prod-app-data", "dev-app-logs", "test-app-assets"])
bucket = each.value
acl = "private"
tags = {
Environment = split("-", each.value)[0]
}
}Exemplo: `for_each` com um mapa
Usar um mapa permite definir configurações mais complexas e exclusivas para cada recurso. Aqui, criamos buckets do S3 com diferentes configurações de versionamento com base nas chaves dos ambientes.
Você pode acessar a chave com each.key e o valor com each.value.
provider "aws" {
region = "us-east-1"
}
resource "aws_s3_bucket" "configured_bucket" {
for_each = {
production = { name = "prod-data-bucket", versioning = true }
development = { name = "dev-logs-bucket", versioning = false }
}
bucket = each.value.name
acl = "private"
versioning {
enabled = each.value.versioning
}
tags = {
Environment = each.key
}
}`count` versus `for_each`: escolha com cuidado
Quando você deve usar cada um?
- Use
count: para iterações numéricas simples, criando recursos idênticos quando a quantidade é a principal preocupação. É uma boa opção quando você precisa apenas de um índice para diferenciá-los. - Use
for_each: para iterar sobre coleções complexas, como conjuntos ou mapas, quando os recursos precisam de identificadores exclusivos ou propriedades derivadas dos elementos da coleção. Em geral, ele é preferível quando cada instância tem um identificador lógico claro e exclusivo.
Verificação rápida: loops
Considere um cenário em que você precisa criar um bucket do S3 para cada equipe da sua organização, e cada bucket precisa de uma política de retenção específica definida por essa equipe.
Recapitulação: criação eficiente de recursos
Parabéns! Você aprendeu a usar count e for_each para tornar suas configurações do Terraform mais dinâmicas e eficientes.
counté usado para a repetição numérica simples de recursos idênticos, utilizandocount.indexpara diferenciá-los.for_eaché usado para iterar sobre conjuntos ou mapas, criando recursos distintos com propriedades exclusivas por meio deeach.keyeeach.value.
Essas construções são fundamentais para gerenciar uma infraestrutura como código escalável e fácil de manter!
Perguntas Frequentes
A aula “Usando loops com `for_each` e `count`” é grátis?
Sim — o texto completo de “Usando loops com `for_each` e `count`” é 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 “Usando loops com `for_each` e `count`”?
Aprenda a provisionar várias instâncias de um recurso ou módulo usando `count` e `for_each` para lidar eficientemente com coleções e mapas. 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 1 de 4.
Quanto tempo leva a aula “Usando loops com `for_each` e `count`”?
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