diff --git a/tp-cloud/terraform/environments/dev/main.tf b/tp-cloud/terraform/environments/dev/main.tf index f5fce1a..8d3d61a 100644 --- a/tp-cloud/terraform/environments/dev/main.tf +++ b/tp-cloud/terraform/environments/dev/main.tf @@ -20,4 +20,14 @@ module "network" { backend_cidr = var.backend_cidr database_cidr = var.database_cidr ssh_source_ranges = var.ssh_source_ranges +} + +module "compute" { + source = "../../modules/compute" + instance_type = var.instance_type + zone = var.zone + + frontend_subnet_id = module.network.subnets["frontend"] + backend_subnet_id = module.network.subnets["backend"] + database_subnet_id = module.network.subnets["database"] } \ No newline at end of file diff --git a/tp-cloud/terraform/modules/compute/main.tf b/tp-cloud/terraform/modules/compute/main.tf index e69de29..4e7d6e1 100644 --- a/tp-cloud/terraform/modules/compute/main.tf +++ b/tp-cloud/terraform/modules/compute/main.tf @@ -0,0 +1,72 @@ +locals { + metadata = { + enable-oslogin = "TRUE" + } +} + +resource "google_compute_instance" "frontend" { + name = "frontend-instance" + machine_type = var.instance_type + zone = var.zone + + boot_disk { + initialize_params { + image = "debian-cloud/debian-11" + size = 10 + } + } + + network_interface { + subnetwork = var.frontend_subnet_id + + access_config {} # IP publique obligatoire + } + + metadata = local.metadata + + tags = ["frontend", "ssh"] +} + +resource "google_compute_instance" "backend" { + name = "backend-instance" + machine_type = var.instance_type + zone = var.zone + + boot_disk { + initialize_params { + image = "debian-cloud/debian-11" + size = 10 + } + } + + network_interface { + subnetwork = var.backend_subnet_id + # pas d'access_config → pas d'IP publique + } + + metadata = local.metadata + + tags = ["backend", "ssh"] +} + +resource "google_compute_instance" "database" { + name = "database-instance" + machine_type = var.instance_type + zone = var.zone + + boot_disk { + initialize_params { + image = "debian-cloud/debian-11" + size = 20 + } + } + + network_interface { + subnetwork = var.database_subnet_id + # pas d'access_config → privé فقط + } + + metadata = local.metadata + + tags = ["database", "ssh"] +} diff --git a/tp-cloud/terraform/modules/compute/outputs.tf b/tp-cloud/terraform/modules/compute/outputs.tf index e69de29..feb0375 100644 --- a/tp-cloud/terraform/modules/compute/outputs.tf +++ b/tp-cloud/terraform/modules/compute/outputs.tf @@ -0,0 +1,22 @@ +output "private_ips" { + description = "IP internes du frontend, backend et database" + value = { + frontend = google_compute_instance.frontend.network_interface[0].network_ip + backend = google_compute_instance.backend.network_interface[0].network_ip + database = google_compute_instance.database.network_interface[0].network_ip + } +} + +output "frontend_public_ip" { + description = "IP publique du frontend" + value = google_compute_instance.frontend.network_interface[0].access_config[0].nat_ip +} + +output "instance_names" { + description = "Noms des instances compute" + value = [ + google_compute_instance.frontend.name, + google_compute_instance.backend.name, + google_compute_instance.database.name + ] +} diff --git a/tp-cloud/terraform/modules/compute/variables.tf b/tp-cloud/terraform/modules/compute/variables.tf index e69de29..b2234b5 100644 --- a/tp-cloud/terraform/modules/compute/variables.tf +++ b/tp-cloud/terraform/modules/compute/variables.tf @@ -0,0 +1,24 @@ +variable "instance_type" { + description = "Type de machine GCP" + type = string +} + +variable "zone" { + description = "Zone de déploiement" + type = string +} + +variable "frontend_subnet_id" { + description = "ID du subnet pour l’instance frontend" + type = string +} + +variable "backend_subnet_id" { + description = "ID du subnet pour l’instance backend" + type = string +} + +variable "database_subnet_id" { + description = "ID du subnet pour l’instance database" + type = string +}