2 minutes
GCP et Terraform Chap. 4 - Un site Web dans une VM
Dans ce chapitre, nous allons créer une VM avec Compute Engine et la rendre disponible publiquement à travers le pare-feu Google.
Notez que cet exemple est à but pédagogique et se veut simple. Sinon ce n’est pas une bonne pratique d’exposer une VM directement sur Internet. La bonne démarche est d’utiliser un Load Balancer (et si possible un WAF pour filtrer les attaques Web).
Un VPC et un sous-réseau
Pour rappel, un VPC est un réseau virtuel isolé de tous les autres projets sur le cloud public GCP.
Dans ce réseau virtuel, on doit créer au moins un sous-réseau dont l’utilité est principalement de dédier une plage d’adresses IP privées.
# vpc.tf
resource "google_compute_network" "sws-gce-vpc" {
name = "gce-vpc"
auto_create_subnetworks = false
}
resource "google_compute_subnetwork" "sws-gce-subnet" {
name = "gce-subnet"
ip_cidr_range = "10.5.0.0/16"
region = var.region
network = google_compute_network.sws-gce-subnet.id
}
Une instance de VM Debian avec un serveur Nginx
On crée une VM qui se base sur le modèle prédéfini de Debian 12 proposé par Google.
# Create a single Compute Engine instance
resource "google_compute_instance" "default" {
name = "sws-vm"
machine_type = "e2-micro"
zone = var.zone
tags = ["web"]
boot_disk {
initialize_params {
image = "debian-cloud/debian-12"
}
}
# Install Nginx
metadata = {
startup-script = <<-EOF
sudo apt update
sudo apt install -yq nginx
sudo echo 'Hello world' > /usr/share/nginx/html/index.html"
EOF
}
network_interface {
subnetwork = google_compute_subnetwork.default.id
access_config { }
}
}
Une règle firewall pour laisser passer le port 80
resource "google_compute_firewall" "sws" {
name = "static-website-firewall"
network = google_compute_network.sws-gce-vpc.id
allow {
protocol = "tcp"
ports = ["80"]
}
source_ranges = ["0.0.0.0/0"]
}
Montrer l’adresse publique et tester
output "public-ip" {
value = google_compute_instance.default.network_interface.0.access_config.0.nat_ip
}
Il ne reste plus qu’à regarder :