DevOpsFacile
AccueilParcours de formationCertificationsModulesCheat SheetÀ Propos
DevOpsFacile

Une plateforme d'apprentissage complète pour maîtriser les pratiques DevOps modernes, du débutant à l'expert.

contact@devopsfacile.fr

Formation

  • Parcours de formation
  • Modules

Informations

  • À Propos
  • Conditions d'utilisation
  • Confidentialité
  • Mentions légales

© 2026 DevOps Facile. Tous droits réservés.

Fait avec pour la communauté DevOps

ModulesInfrastructure as Code : premiers pas avec Terraform03 - Créer ses premières ressources

Détails

  • 20 minutes
  • Débutant

Objectifs

  • Écrire un bloc resource avec ses attributs obligatoires
  • Référencer une ressource depuis une autre ressource
  • Valider la configuration avec terraform validate
  • Explorer les valeurs avec terraform console
Module Infrastructure as Code : premiers pas avec Terraform

Exercice 03 : Créer ses premières ressources

🎯 Objectifs

À la fin de cet exercice, vous serez capable de :

  • ✅ Écrire un bloc resource "type" "nom" complet
  • ✅ Distinguer les attributs obligatoires des attributs optionnels
  • ✅ Référencer une ressource via type.nom.attribut
  • ✅ Utiliser terraform validate et terraform console

Durée estimée : 20 minutes

Difficulté : ⭐⭐☆☆☆ (Débutant+)

Prérequis : Terraform installé, Docker en cours d'exécution, exercice 02 terminé


📖 Contexte

Une ressource Terraform décrit un objet d'infrastructure : un conteneur Docker, un bucket S3, une VM. Chaque type de ressource a des attributs obligatoires (requis pour créer l'objet) et des attributs optionnels. Les ressources peuvent se référencer entre elles pour créer des dépendances implicites.


📋 Énoncé

Vous allez créer une image Docker et un conteneur qui l'utilise, en établissant une référence entre les deux ressources.

Résultat attendu :

  • Une image nginx téléchargée et un conteneur nginx en cours d'exécution, gérés par Terraform

🧭 Déroulement de l'exercice

Tâche 1 : Créer une ressource docker_image

Déclarez une ressource docker_image qui télécharge l'image nginx:1.25.

Indice : Le type de ressource est docker_image, le nom est libre (nginx par convention). L'attribut obligatoire est name.

Vérification : terraform validate retourne Success!.


Tâche 2 : Créer une ressource docker_container

Déclarez une ressource docker_container qui crée un conteneur depuis l'image précédente.

Indice : Référencez l'image avec docker_image.nginx.image_id. L'attribut name est le nom du conteneur.

Vérification : terraform validate retourne Success!. La référence entre ressources crée une dépendance implicite.


Tâche 3 : Ajouter des attributs optionnels

Ajoutez un mapping de port au conteneur : le port 80 du conteneur mappé sur le port 8080 de l'hôte.

Indice : Le bloc ports {} a les attributs internal (port du conteneur) et external (port de l'hôte).

Vérification : terraform validate retourne Success!.


Tâche 4 : Explorer avec terraform console

Lancez terraform console et explorez les références aux ressources (avant l'apply, les attributs auront des valeurs null ou estimées).

Indice : terraform console ouvre un REPL interactif. Tapez docker_image.nginx pour voir la structure.

Vérification : La console affiche la structure de la ressource sans erreur.


Tâche 5 : Vérifier les attributs disponibles

Dans la documentation du provider Docker (registry.terraform.io/kreuzwerker/docker), repérez quels attributs sont "Required", "Optional" et "Read-Only" (computed).

Indice : Les attributs "Read-Only" sont remplis par Terraform APRÈS la création de la ressource (ex: id, image_id).

Vérification : Vous identifiez au moins 2 attributs computed sur docker_container.


🗂️ Mini-Projet : Stack nginx complète

hcl
# main.tf
terraform {
  required_providers {
    docker = {
      source  = "kreuzwerker/docker"
      version = "~> 3.0"
    }
  }
}

provider "docker" {}

resource "docker_image" "nginx" {
  name         = "nginx:1.25"
  keep_locally = false
}

resource "docker_container" "web" {
  name  = "nginx-terraform"
  image = docker_image.nginx.image_id

  ports {
    internal = 80
    external = 8080
  }

  labels {
    label = "managed-by"
    value = "terraform"
  }
}

output "container_id" {
  value = docker_container.web.id
}

output "container_ip" {
  value = docker_container.web.network_data[0].ip_address
}

Checkpoints :

  • terraform validate retourne Success!
  • terraform fmt -check retourne 0 (code bien formaté)
  • terraform console puis docker_image.nginx.name affiche nginx:1.25
  • La référence docker_image.nginx.image_id est utilisée dans docker_container.web
  • terraform apply crée le conteneur accessible sur http://localhost:8080

Retour au module

Sur cette page

  • 🎯 Objectifs
  • 📖 Contexte
  • 📋 Énoncé
  • 🧭 Déroulement de l'exercice
  • Tâche 1 : Créer une ressource docker_image
  • Tâche 2 : Créer une ressource docker_container
  • Tâche 3 : Ajouter des attributs optionnels
  • Tâche 4 : Explorer avec terraform console
  • Tâche 5 : Vérifier les attributs disponibles
  • 🗂️ Mini-Projet : Stack nginx complète