6.2 KiB
TP Terraform : Architecture modulaire 3-tiers sur GCP
Introduction
Dans ce TP, nous allons déployer une architecture trois tiers sur Google Cloud Platform (GCP) en utilisant une approche modulaire avec Terraform.
Cette architecture comprendra :
- Une couche frontend exposée sur Internet
- Une couche backend pour la logique métier
- Une couche base de données
- Une gestion des accès via IAM
Prérequis ✔️
- Un compte Google Cloud Platform (GCP)
- Terraform installé (v1.0.0 ou supérieure)
- Google Cloud SDK installé et configuré
- Un éditeur de texte (VSCode recommandé)
- Une clé SSH (créée avec
ssh-keygen -t ed25519)
Structure du Projet ✔️
Créez la structure de répertoires suivante :
tp-cloud/
└── terraform
├── environments/
│ └── dev/
│ ├── main.tf
│ ├── variables.tf
│ └── outputs.tf
├── modules/
│ ├── network/
│ │ ├── main.tf
│ │ ├── variables.tf
│ │ └── outputs.tf
│ ├── compute/
│ │ ├── main.tf
│ │ ├── variables.tf
│ │ └── outputs.tf
│ └── iam/
│ ├── main.tf
│ ├── variables.tf
│ └── outputs.tf
└── templates/
└── ansible.cfg.tpl
Partie 1 : Module Network ✔️
Step 1 : Variables du Module
Dans modules/network/variables.tf, définissez les variables :
# À vous de définir les variables pour :
# - project_name (string)
# - region (string)
# - frontend_cidr (string)
# - backend_cidr (string)
# - database_cidr (string)
# - ssh_source_ranges (string)
Step 2 : Ressources Réseau
Dans modules/network/main.tf, créez :
# À vous de créer :
# 1. Un VPC personnalisé avec auto_create_subnetworks = false
# 2. Trois sous-réseaux (frontend, backend, database)
# 3. Règles de firewall :
# - HTTP/HTTPS vers frontend
# - SSH vers toutes les instances
# - Port 8000 de frontend vers backend
# - Port 3306 de backend vers database
Step 3 : Outputs du Module
Dans modules/network/outputs.tf, exposez :
# À vous d'exposer :
# 1. L'ID du VPC
# 2. Les IDs des sous-réseaux sous forme de map
Partie 2 : Module Compute ✔️
Step 1 : Variables du Module
Dans modules/compute/variables.tf, définissez :
# À vous de définir les variables pour :
# - instance_type
# - zone
# - frontend_subnet_id
# - backend_subnet_id
# - database_subnet_id
Step 2 : Instances
Dans modules/compute/main.tf, créez :
# À vous de créer :
# 1. Instance frontend :
# - Image : debian-11
# - Disque : 10GB
# - IP publique
# - Tags : frontend, ssh
# - OS Login enabled
# 2. Instance backend :
# - Image : debian-11
# - Disque : 10GB
# - Pas d'IP publique (interne seulement)
# - Tags : backend, ssh
# - OS Login enabled
# 3. Instance database :
# - Image : debian-11
# - Disque : 20GB
# - Pas d'IP publique
# - Tags : database, ssh
# - OS Login enabled
Step 3 : Outputs du Module
Dans modules/compute/outputs.tf, exposez :
# À vous d'exposer :
# 1. Les IPs internes de toutes les instances
# 2. L'IP publique du frontend
# 3. Les noms des instances
Partie 3 : Module IAM ✔️
Step 1 : Variables du Module
Dans modules/iam/variables.tf, définissez :
# À vous de définir :
# - project_id (string)
Step 2 : Configuration IAM
Dans modules/iam/main.tf, créez :
# À vous de créer :
# 1. Un compte de service pour Terraform
# 2. Une clé pour ce compte de service
# 3. Les rôles IAM nécessaires
# 4. La configuration OS Login avec votre clé SSH
Step 3 : Outputs du Module
Dans modules/iam/outputs.tf, exposez :
# À vous d'exposer :
# 1. L'email du compte de service
# 2. La clé du compte de service (sensitive = true)
Partie 4 : Configuration de l'Environnement ✔️
Step 1 : Variables d'Environnement
Dans environments/dev/variables.tf, définissez toutes les variables nécessaires avec des valeurs par défaut appropriées.
Step 2 : Configuration Principale
Dans environments/dev/main.tf, configurez :
# À vous de :
# 1. Configurer le provider google
# 2. Appeler les trois modules avec les bonnes variables
# 3. Créer le fichier de configuration Ansible (template)
Step 3 : Outputs
Dans environments/dev/outputs.tf, exposez les informations utiles des trois modules.
Validation et Tests ✔️
À chaque étape du développement :
- Initialisation :
terraform init - Validation :
terraform fmtterraform validate - Déploiement :
terraform planterraform apply
Critères de Validation
Votre implémentation sera validée sur :
- Structure Modulaire
- Séparation claire des responsabilités
- Réutilisabilité des modules
- Gestion appropriée des dépendances
- Configuration Réseau
- Segmentation appropriée
- Règles de firewall cohérentes
- Communication inter-tiers sécurisée
- Sécurité
- OS Login correctement configuré
- Accès SSH restreint
- Principe du moindre privilège
- Qualité du Code
- Nommage cohérent
- Variables bien typées
- Outputs pertinents
Bonus
Améliorations possibles :
- Réseau
- Cloud NAT pour les instances privées ✔️
- VPC Service Controls
- Cloud Armor pour le frontend
- Compute
- Custom metadata ✔️
- Instance groups
- Load balancer
- IAM
- Custom roles ✔️
- Workload Identity
- Secret Manager
Nettoyage ✔️
À la fin du TP, n'oubliez pas de détruire les ressources :
terraform destroy
Documentation Utile
- Terraform GCP Provider
- GCP Networking
- GCP Compute Engine
- GCP IAM
Conseils
- Développez et testez chaque module individuellement.
- Utilisez
terraform consolepour tester les expressions. - Documentez vos choix d'implémentation.
- Utilisez des noms de ressources cohérents.