Logo

dev-resources.site

for different kinds of informations.

Garantir la résilience de votre IaC face à une panne régionale

Published at
12/11/2024
Categories
gcp
cloud
devops
Author
begarco
Categories
3 categories in total
gcp
open
cloud
open
devops
open
Author
7 person written this
begarco
open
Garantir la résilience de votre IaC face à une panne régionale

Les infrastructures cloud modernes doivent faire face à des imprévus, notamment des pannes régionales. Bien que rares, ces interruptions peuvent mettre hors service des applications critiques si elles ne sont pas anticipées. Dans cet article, nous allons explorer une stratégie simple mais puissante pour rendre votre Infrastructure as Code (IaC) sur Google Cloud Platform (GCP) résiliente à une telle panne en utilisant Terraform/Terragrunt.

Nous allons nous concentrer sur une astuce majeure : structurer vos modules Terragrunt par région afin de pouvoir désactiver rapidement et proprement une région via une simple configuration. Cette approche permet de garder le contrôle sur l’état de votre infrastructure sans modifications lourdes.

La problématique : Et si une région devenait indisponible ?

Imaginez que votre application dépend d’une seule région sur GCP, disons europe-west9. Si cette région devient indisponible, toutes vos ressources associées — instances, bases de données, load balancers — cessent de fonctionner. Les conséquences ? Interruption de service, pertes financières, impact sur la réputation.

Pour répondre à ces enjeux, la majorité des plans de continuité/reprise de l'activité proposent de créer une infrastructure multi-régionale et hautement disponible qui vous permet de basculer sur une nouvelle région en cas de panne sur toute une région (incendie, guerre, coupure électrique par exemple).

Dans la plupart des infrastructures modernes, des technologies comme Terraform sont utilisées pour automatiser via du code le déploiement des infrastructure. Ceci permet d'éviter des procédures manuelles et de devoir intervenir directement sur des centaines de machines.

Mais que se passe-t-il lorsqu'une région tombe ? On continue à utiliser le Terraform nominal ? Et bien ce n'est pas si simple, puisque lors du refresh des ressources, l'API de votre cloud provider préféré risque de répondre avec difficulté, ou bien de donner une réponse erronée : ressource existante ou ressource non trouvée. Bref, on peut vite se retrouver à supprimer manuellement du state une myriade de ressources inacessibles et d'en importer d'autres.

Vous l'aurez compris au-delà de séparer le state en plusieurs state de périmètre restreint, nous allons aussi le segmenter par région pour les rendre indépendantes.

L’astuce : Structurer vos modules Terragrunt par région

Terragrunt est un outil qui complète Terraform en simplifiant la gestion des configurations complexes. Avec lui, vous pouvez organiser vos fichiers Terraform en modules distincts par région. Cela permet de :

  • Activer ou désactiver facilement une région.
  • Gérer les états Terraform (également appelés state files) de manière isolée pour chaque région.
  • Réduire les risques d’erreurs en maintenant une structure claire.

Organisation des modules

Voici à quoi pourrait ressembler une organisation de fichiers Terragrunt :

infra/
  terragrunt.hcl  # Configuration globale
  regions/
    europe-west1/
      terragrunt.hcl
    europe-west9/
      terragrunt.hcl
  global/
    terragrunt.hcl
modules/
  gce/
    main.tf
  load_balancing/
    main.tf
config.yaml
Enter fullscreen mode Exit fullscreen mode

Contenu d'un fichier Terragrunt pour une région

Dans chaque dossier de région (par exemple, regions/europe-west9/terragrunt.hcl), vous pouvez inclure :

skip = ! local.config[local.region].enabled

terraform {
  source = "../../../modules/region"
}

locals {
  config = yamldecode(file(find_in_parent_folders("config.yaml")))
  region = basename(get_terragrunt_dir())
}

inputs = {
  region = local.region
}
Enter fullscreen mode Exit fullscreen mode

Avec ce fichier, vous pouvez contrôler l’activation d’une région en modifiant simplement <region>.enabled. Si vous le passez à false, toutes les ressources associées à cette région seront ignorées. Voici un exemple de fichier config.yaml :

europe-west9:
  enabled: true
europe-west1:
  enabled: false
Enter fullscreen mode Exit fullscreen mode

Dans cet exemple, la région de Paris (europe-west9) est activée et celle de Bruxelles (europe-west1) est désactivée. Lors d'un désastre, il suffit d'inverser les booléens et grâce à l'attribut skip, seul le code Terraform des régions opérationnelles sera exécuté.

Mise en œuvre : Exemple pratique

1. Créer les modules Terraform

Commencez par créer un module Terraform réutilisable pour chaque région. Par exemple, dans modules/gce/main.tf :

variable "config" {
  type = string
}

variable "region" {
  type = string
}

resource "google_compute_instance" "example" {
  name         = "example-instance"
  machine_type = "e2-medium"
  zone         = "${var.region}-b"

  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-11"
    }
  }

  network_interface {
    network = "default"
  }
}
Enter fullscreen mode Exit fullscreen mode

Ici, le module est agnostique de l'activation ou non de la région : le code est plus simple et plus sûr car l'activation est gérer au niveau de Terragrunt.

2. Configurer Terragrunt

Dans le fichier racine infra/terragrunt.hcl :

include "root" {
  path = find_in_parent_folders()
}

remote_state {
  backend = "gcs"
  config = {
    bucket   = "tfstates"
    prefix   = path_relative_to_include()
    location = "EU"
  }
}
Enter fullscreen mode Exit fullscreen mode

Chaque région peut alors avoir son propre backend dans l'arborescence du bucket.

3. Tester la désactivation d’une région

Pour désactiver une région, il suffit de modifier la variable dans le fichier config.yaml :

europe-west9:
  enabled: false
europe-west1:
  enabled: true
Enter fullscreen mode Exit fullscreen mode

Ensuite, exécutez :

terragrunt run-all --terragrunt-non-interactive init -reconfigure -upgrade
terragrunt run-all --terragrunt-non-interactive apply
Enter fullscreen mode Exit fullscreen mode

Terragrunt ignorera automatiquement tous les modules associés à cette région.

Conclusion : Une IaC prête à affronter les imprévus

Cette stratégie permet de gérer efficacement les pannes régionales sur GCP en simplifiant la gestion des régions via Terragrunt. En organisant vos modules par région et en utilisant des variables de configuration claires, vous pouvez adapter rapidement votre infrastructure sans risques majeurs.

La résilience commence par une bonne planification. Prenez le temps de structurer vos configurations et testez régulièrement vos stratégies pour garantir que votre infrastructure reste robuste face à l’imprévisible.

gcp Article's
30 articles in total
Favicon
Deploy your Flask API on GCP Cloud Run 🚀
Favicon
Sécuriser l'association entre un projet et son compte de facturation sur Google Cloud Platform
Favicon
A Complete Guide to Database Services in Google Cloud Platform: Features, Capacity, and Popularity
Favicon
Talos on GCP with Spot Instances
Favicon
Deploying Kubernetes CronJobs with Helm and Google Cloud Build
Favicon
Gcp api gateway
Favicon
Síndrome del bolsillo profundo: síntomas y remedios
Favicon
Migrate from Native Google to AWS Redshift: Benefits and Best Practices
Favicon
How to Deploy Google Cloud Functions with GitHub Actions
Favicon
GCP Training in Bangalore | Master Google Cloud Platform with Eduleem
Favicon
Reducing Orchestration Costs Through Cloud Task And Cloud Scheduler
Favicon
Top 45+ GCP Interview Questions in 2025 - Google Cloud Platform Interview Tips
Favicon
Is Google Cloud Anthos Service Mesh a Mess?
Favicon
Cloudnosys Now Available on Google Cloud Marketplace
Favicon
Running Kubernetes on Bare Metal vs. Cloud Providers (AWS, GCP, Azure): A Comprehensive Comparison
Favicon
Top 10+ Google Cloud Platform (GCP) Skills of 2025
Favicon
Your Complete Roadmap to Mastering Google Cloud Platform
Favicon
Mastering Docker in Cloud Environments: AWS, GCP, and Azure Integration
Favicon
Garantir la résilience de votre IaC face à une panne régionale
Favicon
How I cleared GCP - Associate Cloud Engineer Certification
Favicon
Using Google Cloud Functions for Three-Tier Data Processing with Google Composer and Automated Deployments via GitHub Actions
Favicon
Cloud Computing
Favicon
How To Authenticate GCP Cloud Infra using Service Account with IAC Terraform
Favicon
Pushing Python Packages to Artifact Registry Using Cloud Build
Favicon
How to Create a Cloud Build to Allow Docker to Download Python Packages from Artifact Registry
Favicon
Can I use Cloud Armor with Cloud Run?
Favicon
Modernize or Build New Cloud Apps Without the Headaches
Favicon
GCP publish python package in production
Favicon
Implantando Aplicações Serverless no Google Cloud Run
Favicon
GCP Code Build Error(unknown field "logging" in google.devtools.cloudbuild.v1.Build)

Featured ones: