Exercice 04 : Lancer une VM avec Compute Engine
🎯 Objectifs
À la fin de cet exercice, vous serez capable de :
- ✅ Créer une instance Compute Engine avec la
gcloudCLI - ✅ Configurer les règles de pare-feu VPC pour autoriser le trafic HTTP/SSH
- ✅ Se connecter à la VM via
gcloud compute ssh(sans gestion de clé SSH manuelle) - ✅ Installer un serveur web et accéder depuis votre navigateur
Durée estimée : 30 minutes
Difficulté : ⭐☆☆☆☆ (Débutant)
Prérequis : Compte GCP avec projet créé, gcloud CLI installée et initialisée
📖 Contexte
Google Compute Engine (GCE) est le service d'instances virtuelles de GCP. Il propose des configurations allant de la micro-VM partagée (e2-micro, éligible au Free Tier) aux VMs massivement parallèles avec des centaines de cœurs. La facturation est à la seconde (minimum 1 minute). Google est le seul des 3 grands clouds à offrir des "sustained use discounts" automatiques (réductions si vous utilisez la VM plus de 25% du mois).
📋 Énoncé
Créez une VM Compute Engine, configurez le pare-feu et déployez un serveur web.
🧭 Déroulement de l'exercice
Tâche 1 : Configurer le projet et créer la VM
# Définir le projet actif
PROJECT_ID=$(gcloud config get-value project)
echo "Projet actif : $PROJECT_ID"
# Activer l'API Compute Engine (si pas encore fait)
gcloud services enable compute.googleapis.com
# Voir les zones disponibles en Europe
gcloud compute zones list --filter="region:europe-west9" --format="table(name,status)"
# Créer l'instance VM
gcloud compute instances create mon-serveur-web \
--zone=europe-west9-a \
--machine-type=e2-micro \ # 2 vCPU partagés, 1 Go RAM - Free Tier eligible
--image-family=debian-12 \
--image-project=debian-cloud \
--boot-disk-size=10GB \
--boot-disk-type=pd-standard \
--tags=serveur-web \ # Tag pour les règles de pare-feu
--metadata=enable-oslogin=true # Authentification via IAM (pas de clé SSH manuelle)
# Voir l'instance créée
gcloud compute instances describe mon-serveur-web \
--zone=europe-west9-a \
--format="table(name,status,networkInterfaces[0].accessConfigs[0].natIP)"Indice :
e2-microest dans le Free Tier GCP : 1 instance par mois gratuitement (régions US seulement - en Europe, elle est facturée mais très peu cher, ~5-6€/mois si allumée 24h/24).
Tâche 2 : Configurer le pare-feu
# Créer une règle de pare-feu pour HTTP (port 80)
# Elle s'applique aux instances avec le tag "serveur-web"
gcloud compute firewall-rules create autoriser-http \
--allow=tcp:80 \
--target-tags=serveur-web \
--source-ranges=0.0.0.0/0 \
--description="Autoriser le trafic HTTP depuis internet"
# Créer une règle pour HTTPS
gcloud compute firewall-rules create autoriser-https \
--allow=tcp:443 \
--target-tags=serveur-web \
--source-ranges=0.0.0.0/0 \
--description="Autoriser le trafic HTTPS depuis internet"
# La règle SSH (port 22) existe déjà par défaut dans GCP
# via la règle "default-allow-ssh"
# Voir toutes les règles de pare-feu du projet
gcloud compute firewall-rules list \
--format="table(name,direction,allowed[].map().firewall_str(),targetTags)"Tâche 3 : Se connecter et installer Nginx
# Se connecter via gcloud (gère automatiquement les clés SSH)
gcloud compute ssh mon-serveur-web --zone=europe-west9-a
# Une fois connecté :
sudo apt-get update -y
sudo apt-get install -y nginx
sudo systemctl enable --now nginx
sudo systemctl status nginx
# Personnaliser la page d'accueil
sudo bash -c 'cat > /var/www/html/index.html << "HTML"
<!DOCTYPE html>
<html lang="fr">
<head><title>Compute Engine GCP</title></head>
<body>
<h1>Ma première VM GCP !</h1>
<p>Hébergée sur Google Compute Engine</p>
</body>
</html>
HTML'
# Quitter
exit# Récupérer l'IP externe
IP=$(gcloud compute instances describe mon-serveur-web \
--zone=europe-west9-a \
--format="value(networkInterfaces[0].accessConfigs[0].natIP)")
echo "IP externe : $IP"
# Tester depuis votre machine
curl http://$IPTâche 4 : Arrêter la VM pour économiser
# Arrêter la VM (les données du disque sont conservées)
gcloud compute instances stop mon-serveur-web --zone=europe-west9-a
# Voir l'état
gcloud compute instances list
# Supprimer la VM et les règles pare-feu quand terminé
gcloud compute instances delete mon-serveur-web --zone=europe-west9-a --quiet
gcloud compute firewall-rules delete autoriser-http autoriser-https --quiet✅ Vérification du résultat
gcloud compute instances listaffiche la VM en étatRUNNINGgcloud compute sshse connecte sans demander de mot de passecurl http://$IPretourne la page HTML personnaliséegcloud compute firewall-rules listaffiche les règles HTTP/HTTPS créées
💡 À retenir
Comparaison des types de machines GCP :
| Famille | Cas d'usage | Exemple |
|---|---|---|
| e2 | Usage général économique | e2-micro, e2-standard-2 |
| n2 | Usage général performance | n2-standard-4 |
| c2 | Calcul intensif | c2-standard-8 |
| m1/m2 | Mémoire optimisée | m1-megamem-96 |
| a2 | GPU (ML/IA) | a2-highgpu-1g |
Modes de facturation :
- On-demand : paiement à la seconde
- Preemptible : -80% mais peut être interrompue à tout moment (max 24h)
- Spot : similaire à preemptible, nouveau modèle
- Committed use : -57% sur 1 an, -70% sur 3 ans
✨ Solution Complète
# Créer, configurer et accéder en 3 commandes
gcloud compute instances create ma-vm \
--zone=europe-west9-a --machine-type=e2-micro \
--image-family=debian-12 --image-project=debian-cloud --tags=web
gcloud compute firewall-rules create allow-http \
--allow=tcp:80 --target-tags=web --source-ranges=0.0.0.0/0
gcloud compute ssh ma-vm --zone=europe-west9-a \
--command="sudo apt install -y nginx && sudo systemctl start nginx"