Cloud Computing, CM2

Infrastructure as Code

Pépin Rémi, Ensai, 2025

remi.pepin@insee.fr

Haute disponibilité

Infrastructure du Cloud

  • Régions : emplacement "physique" dans le monde qui regroupe des zones de disponibilité (Availability Zone, AZ)
  • Zones de disponibilité : data centers logiques, les ressources de différentes AZ sont isolées les unes des autres
  • Zones locales : data centers spécifiques pour rapprocher le calcul du client
  • Emplacements périphériques : points de présence pour services spécifiques (cache)

Infrastructure du Cloud

  • Si une région tombe cela n'impacte pas les autres
  • Si une AZ tombe, cela n'impacte pas les autres AZ
  • Les régions sont indépendantes : pas les mêmes services, peu de services permettent le cross region.
  • Tous les AZ d'une même région ont les mêmes services
Déployer une application sur plusieurs AZs/régions permet de limiter les indisponibilités dues au Cloud Provider

Utilisation d'un service au cours du temps

Déploiement sur une seule machine

Déploiement sur une flotte élastique de machine

Modèle de déploiement

Machine unique

  • ❌ Désavantages
    • Facturation élevée
    • Reprise sur erreur lente
  • ✅ Avantages
    • Simple à mettre en place
    • Application stateful

Flotte de machines

  • ❌ Désavantages
    • Ajoute de la complexité
    • Surveiller une flotte de machine
    • Application stateless
  • ✅ Avantages
    • Permet de faire des économies
    • Permet d'assurer haute disponibilité

Auto-Scaling Group + Load Balancer

Auto-Scaling Group + Load Balancer

  • Auto-Scaling Group : gère une flotte d'EC2. Peut en lancer/éteindre en fonction de conditions (heures, utilisation CPU, RAM), ou si une machine est considérée hors service
  • Load Balancer : composant qui répartit le trafic entre plusieurs machines. Permet un point d'entrée unique pour accéder à une flotte. Équilibre le trafic, et peut renvoyer un utilisateur vers la même machine (sticky session)

Auto-Scaling Group + Load Balancer

  • Haute disponibilité
  • Élasticité horizontale
  • Application sur plusieurs AZs
  • Permet de faire des économies
  • Nécessite d'être pris en compte dans le code
  • Pour la partie traitement, pas stockage
Pattern courant pour assurer haute disponibilité

Infrastructure as Code (IaC)

Un constat

  • ⏳ Fastidieux
  • 🐇 Réplication ?
  • 📚 Versionnable ?
  • 🎼 Orchestration ?
  • 🤔 Ai-je bien tout éteint ?

Infrastructure as Code

L'Infrastructure as Code (IaC) consiste à définir son architecture informatique comme du code. Au lieu de naviguer sur une interface, les services à déployer seront définis dans des fichiers via un langage spécifique. Ce code pourra ainsi être versionné et redéployé à l'infini.
  • Terraform/Open Tofu (cross plateforme)
  • Amazon Cloud Formation, Amazon Serverless Application Manager
  • Azure Resource Manager
  • Google Cloud Deployment Manager

Terraform/Open Tofu

  • Projet propriétaire crée par HashiCorp (acheté par IBM en 2025), Open Tofu fork open source
  • Langage de configuration (HCL)/CDK pour code
  • Terraform provider pour traduction
  • Utilise les API des différents systèmes

Configuration language vs CDKTF

  • HashiCorp Configuration Language (HCL) : pas JSON ni YAML (existe une version json)
  • CDKTF : bibliothèques pour coder son architecture dans son langage de prédilection
Le CDKTF est lourd à mettre en place, on va utiliser le HCL

CDKTF

Exemple


provider "aws" {
  region = "us-east-1"
}
# Création de l'instance EC2
resource "aws_instance" "ubuntu_vm" {
  ami           = "ami-01456a894f71116f2"
  instance_type = "t2.micro"

  root_block_device {
    volume_size = 8
    volume_type = "gp3"
  }

  tags = {
    Name = "ubuntu-tf-instance"
  }
}
                          
Plus qu'a faire un "tofu apply" pour déployer l'architecture

Exemple


provider "aws" {}

resource "aws_security_group" "web_sg" {}

resource "aws_launch_template" "ubuntu_template" {}
        
resource "aws_autoscaling_group" "web_asg" {}
        
resource "aws_lb" "web_alb" {}

resource "aws_lb_target_group" "web_tg" {}

resource "aws_lb_listener" "http_listener" {}
                          

In a nutshell 🥜

  • Format déclaratif
  • On doit décrire toute l'infra précisement
  • Un élément se déclare de la forme type objet nom
  • Possible d'appeler les objet les uns les autres
Il y a toute la doc sur internet !

Open Tofu : TP 2 - Prise en main

Ce que vous allez faire

  1. Terminer le TP 1 si ce n'est pas fait
  2. Refaire le TP 1 en utilisant open tofu