RousselTMLEARNING

Article · Terraform : de la découverte à l'expertise

Le langage HCL

1. Les blocs #

La structure d'une configuration.

Exemple #

Blocs Terraform
L'ordre des fichiers et des blocs n'a pas d'importance.
terraform {
  required_version = ">= 1.7"
  required_providers { aws = { source = "hashicorp/aws", version = "~> 5.0" } }
}

provider "aws" { region = var.region }

variable "region" {
  type    = string
  default = "eu-west-3"
}

variable "environnement" {
  type = string
  validation {
    condition     = contains(["recette", "prod"], var.environnement)
    error_message = "recette ou prod uniquement."
  }
}

locals {
  etiquettes = { environnement = var.environnement, gere_par = "terraform" }
}

data "aws_availability_zones" "zones" { state = "available" }

resource "aws_s3_bucket" "rapports" {
  bucket = "rapports-${var.environnement}-${random_id.suffixe.hex}"
  tags   = local.etiquettes
}

resource "random_id" "suffixe" { byte_length = 4 }

output "bucket" { value = aws_s3_bucket.rapports.bucket }

2. Répéter des ressources #

count, for_each, dynamic.

count ou for_each ? #

Méta-argumentQuand l'utiliser
countN copies identiques ; adressées par index (fragile si on retire un élément du milieu)
for_eachUne ressource par clé d'une map ou d'un set : adresses stables
variable "files" { default = { facturation = 3, expedition = 5 } }

resource "aws_sqs_queue" "file" {
  for_each                   = var.files
  name                       = "commandes-${each.key}"
  visibility_timeout_seconds = each.value * 10
}

resource "aws_security_group" "web" {
  name = "web"
  dynamic "ingress" {
    for_each = [80, 443]
    content {
      from_port   = ingress.value
      to_port     = ingress.value
      protocol    = "tcp"
      cidr_blocks = ["0.0.0.0/0"]
    }
  }
}

3. Expressions et fonctions #

Calculer des valeurs.

Utiles #

BesoinExemple
Conditionnellevar.env == "prod" ? 3 : 1
Boucle for[for z in data.aws_availability_zones.zones.names : upper(z)]
Fusion de mapsmerge(local.etiquettes, { role = "web" })
Encodagejsonencode({...}), yamldecode(file("x.yaml"))
Modèle de fichiertemplatefile("init.sh.tftpl", { port = 8080 })
terraform console
> cidrsubnet("10.0.0.0/16", 8, 2)
"10.0.2.0/24"
> [for i in range(3) : "web-${i}"]

📄 Le langage HCL : ressources, variables, sorties, données et expressions →

Mon suivi

  • ⏱ Durée estimée : ≈ 9 min

Connectez-vous pour suivre votre progression et prendre des notes. Se connecter

💬 Poser une question

Articles recommandés

Terraform : principes, architecture et flux de travail

Comprendre Terraform : infrastructure as code déclarative, architecture (cœur, fournisseurs, état...

L'état Terraform : backends distants, verrouillage, import et refactorisation

Gérer l'état Terraform : rôle du fichier d'état, données sensibles, backends distants (S3, azurer...

Les modules Terraform : concevoir, versionner et réutiliser

Structurer Terraform avec des modules : module racine et modules enfants, entrées et sorties, sou...

Tester et sécuriser Terraform : validate, terraform test, tflint, Checkov et politiques

Garantir la qualité du code Terraform : fmt et validate, tests natifs terraform test avec fournis...

Terraform multi-environnements, workspaces et organisation des dépôts

Organiser Terraform pour plusieurs environnements : dossiers par environnement, fichiers tfvars, ...

Terraform en CI/CD : pipelines, revue du plan, OIDC et GitOps

Automatiser Terraform : pipeline plan sur demande de fusion et apply après approbation, publicati...

Terraform sur plusieurs clouds : AWS, Azure, Google Cloud, OVHcloud et Kubernetes

Utiliser Terraform avec les principaux fournisseurs : aws, azurerm, google, ovh et openstack, kub...

Préparer la certification HashiCorp Certified: Terraform Associate

Guide de préparation au Terraform Associate : format, objectifs officiels (concepts de l'IaC, flu...

Bonnes pratiques Terraform : structure, état, sécurité, revue et maintenance

Les bonnes pratiques Terraform en équipe : structure des dépôts, nommage, versions épinglées, éta...

Soutenir

♥ SOUTENIR

Soutenez RousselTM Learning

Les formations, articles, TP et attestations restent gratuits et sans publicité intrusive. Une contribution libre, du montant de votre choix, finance l’hébergement, les environnements de TP et l’écriture de nouveaux contenus.

Contribuer avec PayPal Montant libre · carte bancaire ou compte PayPalEn savoir plus
QR code PayPal
Ou scannez ce QR code avec votre téléphone

Merci, chaque contribution compte !