0Pricing
DevOps Bootcamp · Leçon

Utiliser des boucles avec `for_each` et `count`

Apprenez à provisionner plusieurs instances d’une ressource ou d’un module à l’aide de `count` et `for_each`, afin de gérer efficacement les collections et les mappages.

Utiliser des boucles avec `for_each` et `count` est une leçon DevOps Bootcamp gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage DevOps Bootcamp, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours DevOps Bootcamp comprend 4 leçons au total.

Introduction aux boucles

Lorsque vous gérez une infrastructure avec Terraform, vous devez souvent créer plusieurs ressources similaires. Imaginez que vous deviez créer 10 serveurs web ou 5 instances de base de données. Répéter le même bloc de code serait fastidieux et source d'erreurs !

Cette leçon présente deux fonctionnalités puissantes de Terraform : count et for_each. Elles vous aident à provisionner efficacement plusieurs ressources, tout en conservant des configurations claires et évolutives.

Pourquoi utiliser `count` et `for_each` ?

L'utilisation de boucles comme count et for_each offre des avantages importants :

  • Réduction de la duplication : écrivez le code d'infrastructure une seule fois et réutilisez-le.
  • Meilleure lisibilité : vos configurations deviennent beaucoup plus claires et faciles à comprendre.
  • Évolutivité : ajustez facilement le nombre de ressources en modifiant une seule valeur ou collection.
  • Cohérence : assurez-vous que toutes les ressources similaires sont configurées de manière identique.

`count` pour les répétitions simples

Le méta-argument count est idéal lorsque vous devez créer plusieurs instances presque identiques d'une ressource ou d'un module. Vous fournissez une valeur entière, et Terraform crée ce nombre d'instances.

Chaque instance créée avec count possède un index, allant de 0 à count - 1. Vous pouvez accéder à cet index avec count.index.

Exemple : plusieurs instances EC2 avec `count`

Provisionnons trois instances AWS EC2 identiques. Remarquez comment count.index est utilisé pour donner un nom unique à chaque serveur.

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}"
  }
}

Comprendre `count.index`

Dans l'exemple précédent, ${count.index} a été automatiquement évalué à 0, 1 et 2 pour chaque instance. Cela vous permet de créer des identifiants uniques ou d'ajuster les propriétés de chaque instance.

Sans count.index, les trois serveurs auraient exactement la même balise « Name », ce qui pourrait entraîner de la confusion ou des problèmes dans AWS.

Présentation de `for_each`

Alors que count convient parfaitement aux répétitions simples, for_each offre davantage de souplesse. Il parcourt un ensemble de chaînes ou une carte de chaînes et crée une instance pour chaque élément.

for_each est idéal lorsque vous devez gérer des ressources avec des configurations distinctes ou lorsque le nombre de ressources est déterminé par une collection non numérique (par exemple, une liste de noms d'environnements ou une carte de paramètres utilisateur).

Exemple : `for_each` avec un ensemble

Ici, nous créons trois compartiments S3, chacun portant le nom d'un élément de notre ensemble for_each. Nous utilisons each.value pour accéder à l'élément actuel de l'itération.

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]
  }
}

Exemple : `for_each` avec une carte

Une carte vous permet de définir des configurations plus complexes et uniques pour chaque ressource. Ici, nous créons des compartiments S3 avec des paramètres de gestion des versions différents selon les clés d'environnement.

Vous pouvez accéder à la clé avec each.key et à la valeur avec 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` ou `for_each` : faire le bon choix

Quand utiliser l'un ou l'autre ?

  • Utilisez count : pour une itération numérique simple, afin de créer des ressources identiques lorsque la quantité est le principal critère. Cette option convient lorsque seul un index est nécessaire pour les différencier.
  • Utilisez for_each : pour parcourir des collections complexes (ensembles ou cartes), lorsque les ressources doivent posséder des identifiants ou des propriétés uniques dérivés des éléments de la collection. Cette option est généralement préférable lorsque chaque instance possède un identifiant logique clair et unique.

Vérification rapide : boucles

Imaginez que vous deviez créer un compartiment S3 pour chaque équipe de votre organisation et que chaque compartiment doive appliquer une politique de conservation spécifique définie par cette équipe.

Récapitulatif : création efficace de ressources

Excellent travail ! Vous avez appris à exploiter count et for_each pour rendre vos configurations Terraform plus dynamiques et efficaces.

  • count sert à répéter simplement, de manière numérique, des ressources identiques, en utilisant count.index pour les différencier.
  • for_each sert à parcourir des ensembles ou des cartes afin de créer des ressources distinctes avec des propriétés uniques, grâce à each.key et each.value.

Ces constructions sont fondamentales pour gérer une infrastructure en tant que code évolutive et facile à maintenir !

Questions Fréquemment Posées

La leçon « Utiliser des boucles avec `for_each` et `count` » est-elle gratuite ?

Oui — le texte complet de « Utiliser des boucles avec `for_each` et `count` » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours DevOps Bootcamp, passe à CoddyKit PRO. Le cours DevOps Bootcamp comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Utiliser des boucles avec `for_each` et `count` » ?

Apprenez à provisionner plusieurs instances d’une ressource ou d’un module à l’aide de `count` et `for_each`, afin de gérer efficacement les collections et les mappages. Tu pratiques DevOps Bootcamp avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer DevOps Bootcamp ?

Aucune expérience préalable n'est requise. DevOps Bootcamp sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.

Combien de temps prend la leçon « Utiliser des boucles avec `for_each` et `count` » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon DevOps Bootcamp ?

Oui. Chaque leçon DevOps Bootcamp inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Utiliser des boucles avec `for_each` et `count`
  2. Fonctions intégrées de Terraform
  3. Expressions conditionnelles et splats
  4. Blocs dynamiques pour une configuration imbriquée
← Retour à DevOps Bootcamp