Vous travaillez dans une équipe DevOps.
Votre équipe doit déployer plusieurs environnements de test pour différentes équipes :
Chaque équipe a besoin :
Problème actuel :
Objectif :
Créer une solution réutilisable permettant de déployer plusieurs conteneurs rapidement et sans erreur.
mkdir -p terraform-td2/modules/nginx cd terraform-td2
terraform-td2/
main.tf
modules/
nginx/
main.tf
variables.tf
outputs.tf
Objectif : créer un composant réutilisable
Fichier : modules/nginx/variables.tf
variable "container_name" {
description = "Nom du conteneur"
}
variable "external_port" {
description = "Port exposé"
}
Question :
Fichier : modules/nginx/main.tf
resource "docker_image" "nginx" {
name = "nginx:latest"
}
resource "docker_container" "nginx" {
name = var.container_name
image = docker_image.nginx.name
ports {
internal = 80
external = var.external_port
}
}
Fichier : modules/nginx/outputs.tf
output "url" {
value = "http://localhost:${var.external_port}"
}
Question :
Fichier : main.tf
terraform {
required_providers {
docker = {
source = "kreuzwerker/docker"
}
}
}
provider "docker" {}
module "nginx1" {
source = "./modules/nginx"
container_name = "frontend"
external_port = 8080
}
module "nginx2" {
source = "./modules/nginx"
container_name = "backend"
external_port = 8081
}
Dans le dossier terraform-td2 :
terraform init terraform plan terraform apply
Vérifier :
Fichier : main.tf
Modifier la configuration pour utiliser le même port :
external_port = 8080
Relancer :
terraform apply
Questions :
Corriger le problème.
terraform output
Question :
Fichier : modules/nginx/variables.tf
Rendre le module plus flexible :
variable "image_name" {
description = "Image Docker"
default = "nginx:latest"
}
Fichier : modules/nginx/main.tf
Modifier :
resource "docker_image" "nginx" {
name = var.image_name
}
Test :
Créer un troisième environnement :
Fichier : main.tf
Afficher toutes les URLs :
output "urls" {
value = [
module.nginx1.url,
module.nginx2.url
]
}
Question :