0Pricing
Terraform Infrastructure as Code · Aula

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, utilizando count.index para diferenciá-los.
  • for_each é usado para iterar sobre conjuntos ou mapas, criando recursos distintos com propriedades exclusivas por meio de each.key e each.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

  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