diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..83f6e39 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +credentials.json diff --git a/modules/compute_engine_instance_group/main.tf b/modules/compute_engine_instance_group/main.tf index e69de29..db4fd41 100644 --- a/modules/compute_engine_instance_group/main.tf +++ b/modules/compute_engine_instance_group/main.tf @@ -0,0 +1,9 @@ +resource "google_compute_instance_group_manager" "instance_group" { + name = "instance-group" + project = var.project_id + region = var.region + base_instance_name = "instance" + instance_template = var.template_self_link + target_size = 2 +} + diff --git a/modules/compute_engine_instance_group/outputs.tf b/modules/compute_engine_instance_group/outputs.tf index e69de29..c8b559c 100644 --- a/modules/compute_engine_instance_group/outputs.tf +++ b/modules/compute_engine_instance_group/outputs.tf @@ -0,0 +1,3 @@ +output "self_link" { + value = google_compute_instance_group_manager.instance_group.instance_group +} diff --git a/modules/compute_engine_instance_group/variables.tf b/modules/compute_engine_instance_group/variables.tf index e69de29..2cd7aa7 100644 --- a/modules/compute_engine_instance_group/variables.tf +++ b/modules/compute_engine_instance_group/variables.tf @@ -0,0 +1,3 @@ +variable "project_id" {} +variable "region" {} +variable "template_self_link" {} diff --git a/modules/compute_engine_template/main.tf b/modules/compute_engine_template/main.tf index e69de29..fb3df4c 100644 --- a/modules/compute_engine_template/main.tf +++ b/modules/compute_engine_template/main.tf @@ -0,0 +1,25 @@ +resource "google_compute_instance_template" "template" { + name_prefix = "instance-template-" + project = var.project_id + region = var.region + + machine_type = var.instance_type + disk { + source_image = var.image_name + auto_delete = true + boot = true + } + + network_interface { + network = "default" + access_config { + // Ephemeral public IP address + } + } + + metadata_startup_script = var.startup_script + + lifecycle { + create_before_destroy = true + } +} \ No newline at end of file diff --git a/modules/compute_engine_template/variables.tf b/modules/compute_engine_template/variables.tf index e69de29..712b91d 100644 --- a/modules/compute_engine_template/variables.tf +++ b/modules/compute_engine_template/variables.tf @@ -0,0 +1,5 @@ +variable "project_id" {} +variable "region" {} +variable "image_name" {} +variable "instance_type" {} +variable "startup_script" {} diff --git a/modules/load_balancer/main.tf b/modules/load_balancer/main.tf index e69de29..6c43620 100644 --- a/modules/load_balancer/main.tf +++ b/modules/load_balancer/main.tf @@ -0,0 +1,46 @@ +resource "google_compute_backend_service" "backend_service" { + name = "backend-service" + project = var.project_id + region = var.region + + backend { + group = var.backend_instance_group_self_link + } + + health_checks = [google_compute_health_check.default_http.self_link] +} + +resource "google_compute_health_check" "default_http" { + name = "default-http-health-check" + project = var.project_id + check_interval_sec = 30 + timeout_sec = 5 + http_health_check { + port = 80 + } +} + +resource "google_compute_url_map" "url_map" { + name = "url-map" + project = var.project_id + default_service = google_compute_backend_service.backend_service.self_link +} + +resource "google_compute_target_http_proxy" "http_proxy" { + name = "http-proxy" + project = var.project_id + url_map = google_compute_url_map.url_map.self_link +} + +resource "google_compute_global_forwarding_rule" "forwarding_rule" { + name = "forwarding-rule" + project = var.project_id + target = google_compute_target_http_proxy.http_proxy.self_link + port_range = "80" + ip_address = google_compute_global_address.lb_address.address +} + +resource "google_compute_global_address" "lb_address" { + name = "lb-address" + project = var.project_id +} diff --git a/terraform.tfvars b/terraform.tfvars index df4cc7a..340aa5a 100644 --- a/terraform.tfvars +++ b/terraform.tfvars @@ -1,4 +1,4 @@ -credentials_file = "path/to/credentials.json" +credentials_file = "credentials.json" project_id = "terraform-demo-382210" region = "us-central1" zone = "us-central1-a"