commit 0f57df0692eca7685abad0c525f15186e73803b9 Author: genique Date: Fri Dec 6 14:44:53 2024 +0100 d diff --git a/environments/dev/main.tf b/environments/dev/main.tf new file mode 100644 index 0000000..e47f0cb --- /dev/null +++ b/environments/dev/main.tf @@ -0,0 +1,46 @@ +terraform { + required_providers { + google = { + source = "hashicorp/google" + version = "~> 6.0" + } + } +} + +provider "google" { + project = var.project_id + region = var.region +} + +module "network" { + source = "../../modules/network" + + # Variables d'entrée + project_name = var.project_name + region = var.region + + # Autres variables spécifiques au module + backend_cidr = var.backend_cidr + frontend_cidr = var.frontend_cidr + database_cidr = var.database_cidr + ssh_source_ranges = var.ssh_source_ranges +} + +module "iam" { + source = "../../modules/iam" + + # Variables d'entrée + + + # Autres variables spécifiques au module +} + +module "compute" { + source = "../../modules/compute" + + # Variables d'entrée + + # Autres variables spécifiques au module + zone = var.zone + instance_type = var.instance_type +} \ No newline at end of file diff --git a/environments/dev/outputs.tf b/environments/dev/outputs.tf new file mode 100644 index 0000000..e69de29 diff --git a/environments/dev/variables.tf b/environments/dev/variables.tf new file mode 100644 index 0000000..bcb45dc --- /dev/null +++ b/environments/dev/variables.tf @@ -0,0 +1,53 @@ +variable "project_id" { + description = "ID du projet GCP" + type = string + default = "radiant-pen-442314-f9" +} + +variable "project_name" { + description = "nom_du_projet" + type = string + default = "My Project 91685" +} + +variable "region" { + description = "region" + type = string + default = "europe-west4" +} + +variable "frontend_cidr" { + description = "range_front" + type = string + default = "10.0.1.0/24" +} + +variable "backend_cidr" { + description = "range_back" + type = string + default = "10.0.2.0/24" +} + +variable "database_cidr" { + description = "range_database" + type = string + default = "10.0.3.0/24" +} + +variable "ssh_source_ranges" { + description = "range_ssh" + type = string + default = "0.0.0.0/0" +} + +variable "instance_type" { + description = "type d'instance" + type = string + default = "e2-micro" +} + +variable "zone" { + description = "zone" + type = string + default = "europe-west4-a" +} diff --git a/modules/compute/main.tf b/modules/compute/main.tf new file mode 100644 index 0000000..dca8f2a --- /dev/null +++ b/modules/compute/main.tf @@ -0,0 +1,73 @@ +resource "google_compute_instance" "vm-front" { + name = "vm-front" + machine_type = var.instance_type + zone = var.zone + + boot_disk { + initialize_params { + image = "debian-cloud/debian-11" + size = 10 + } + } + network_interface { + subnetwork = google_compute_network.subnet_front.id + access_config {} # IP publique + } + + tags = ["web", "ssh"] + + metadata = { + enable-oslogin = "TRUE" + } +} + + +resource "google_compute_instance" "vm-back" { + name = "vm-back" + machine_type = var.instance_type + zone = var.zone + + boot_disk { + initialize_params { + image = "debian-cloud/debian-11" + size = 10 + } + } + + network_interface { + subnetwork = google_compute_network.subnet_back.id + access_config {} # IP publique + } + + tags = ["backend", "ssh"] + + metadata = { + enable-oslogin = "TRUE" + } +} + +resource "google_compute_instance" "vm-database" { + name = "vm"-database + machine_type = var.instance_type + zone = var.zone + + boot_disk { + initialize_params { + image = "debian-cloud/debian-11" + size = 20 + } + } + + network_interface { + subnetwork = google_compute_network.subnet_db.id + access_config {} # IP publique + } + + tags = ["database", "ssh"] + + metadata = { + enable-oslogin = "TRUE" + } +} + + diff --git a/modules/compute/outputs.tf b/modules/compute/outputs.tf new file mode 100644 index 0000000..e69de29 diff --git a/modules/compute/variables.tf b/modules/compute/variables.tf new file mode 100644 index 0000000..dc3c944 --- /dev/null +++ b/modules/compute/variables.tf @@ -0,0 +1,28 @@ +variable "instance_type" { + description = "type d'instance" + type = string + default = "e2-micro" +} + +variable "zone" { + description = "zone" + type = string + default = "europe-west4-a" +} + +variable "frontend_cidr" { + description = "range_front" + type = string +} + +variable "backend_cidr" { + description = "range_back" + type = string +} + +variable "database_cidr" { + description = "range_database" + type = string +} + + diff --git a/modules/iam/main.tf b/modules/iam/main.tf new file mode 100644 index 0000000..e69de29 diff --git a/modules/iam/outputs.tf b/modules/iam/outputs.tf new file mode 100644 index 0000000..e69de29 diff --git a/modules/iam/variables.tf b/modules/iam/variables.tf new file mode 100644 index 0000000..e69de29 diff --git a/modules/network/main.tf b/modules/network/main.tf new file mode 100644 index 0000000..6baee7d --- /dev/null +++ b/modules/network/main.tf @@ -0,0 +1,78 @@ +resource "google_compute_network" "vpc" { + name = "vpc2" + auto_create_subnetworks = false +} + +# Sous-réseau +resource "google_compute_subnetwork" "subnet_front" { + name = "frontend" + network = google_compute_network.vpc.id + ip_cidr_range = var.frontend_cidr + region = var.region +} + +resource "google_compute_subnetwork" "subnet_back" { + name = "backend" + network = google_compute_network.vpc.id + ip_cidr_range = var.backend_cidr + region = var.region +} + +resource "google_compute_subnetwork" "subnet_db" { + name = "database" + network = google_compute_network.vpc.id + ip_cidr_range = var.database_cidr + region = var.region +} + +resource "google_compute_firewall" "allow_http" { + name = "allow_http" + network = google_compute_network.vpc.id + + allow { + protocol = "tcp" + ports = ["80", "443"] + } + + source_ranges = ["0.0.0.0/0"] + target_tags = ["web"] +} + +resource "google_compute_firewall" "allow_ssh" { + name = "allow-ssh" + network = google_compute_network.vpc.id + + allow { + protocol = "tcp" + ports = ["22"] + } + + source_ranges = [var.ssh_source_ranges] + target_tags = ["ssh"] +} + +resource "google_compute_firewall" "allow_frontend_to_backend" { + name = "allow_frontend_to_backend" + network = google_compute_network.vpc.id + + allow { + protocol = "tcp" + ports = ["8000"] + } + + source_tags = ["web"] + target_tags = ["backend"] +} + +resource "google_compute_firewall" "allow_backend_to_database" { + name = "allow_backend_to_database" + network = google_compute_network.vpc.id + + allow { + protocol = "tcp" + ports = ["3306"] + } + + source_tags = ["backend"] + target_tags = ["database"] +} \ No newline at end of file diff --git a/modules/network/outputs.tf b/modules/network/outputs.tf new file mode 100644 index 0000000..e69de29 diff --git a/modules/network/variables.tf b/modules/network/variables.tf new file mode 100644 index 0000000..0aee0e2 --- /dev/null +++ b/modules/network/variables.tf @@ -0,0 +1,47 @@ +variable "project_id" { + description = "ID du projet GCP" + type = string + default = "radiant-pen-442314-f9" +} + +variable "project_name" { + description = "nom_du_projet" + type = string + default = "My Project 91685" +} + +variable "region" { + description = "region" + type = string + default = "europe-west4" +} + +variable "frontend_cidr" { + description = "range_front" + type = string + default = "10.0.1.0/24" +} + +variable "backend_cidr" { + description = "range_back" + type = string + default = "10.0.2.0/24" +} + +variable "database_cidr" { + description = "range_database" + type = string + default = "10.0.3.0/24" +} + +variable "ssh_source_ranges" { + description = "range_ssh" + type = string + default = "0.0.0.0/0" +} + +variable "http_source_ranges" { + description = "range_http" + type = string + default = "0.0.0.0/0" +}