provider "google" { region = "${var.region}" project = "${var.project_name}" } resource "google_compute_network" "my-custom-network" { name = "my-custom-network" } resource "google_compute_subnetwork" "my-custom-subnet" { name = "my-custom-subnet" ip_cidr_range = "10.128.0.0/20" network = "${google_compute_network.my-custom-network.self_link}" region = "${var.region}" } resource "google_compute_firewall" "allow-all-internal" { name = "allow-all-10-128-0-0-20" network = "${google_compute_network.my-custom-network.name}" allow { protocol = "tcp" } allow { protocol = "udp" } allow { protocol = "icmp" } source_ranges = ["10.128.0.0/20"] } resource "google_compute_firewall" "allow-ssh-rdp-icmp" { name = "allow-tcp22-tcp3389-icmp" network = "${google_compute_network.my-custom-network.name}" allow { protocol = "tcp" ports = ["22", "3389"] } allow { protocol = "icmp" } } resource "google_compute_instance" "ilb-instance-1" { name = "ilb-instance-1" machine_type = "n1-standard-1" zone = "${var.region_zone}" tags = ["int-lb"] boot_disk { initialize_params { image = "debian-cloud/debian-8" } } network_interface { subnetwork = "${google_compute_subnetwork.my-custom-subnet.name}" access_config { // Ephemeral IP } } service_account { scopes = ["compute-rw"] } metadata_startup_script = "${file("startup.sh")}" } resource "google_compute_instance" "ilb-instance-2" { name = "ilb-instance-2" machine_type = "n1-standard-1" zone = "${var.region_zone}" tags = ["int-lb"] boot_disk { initialize_params { image = "debian-cloud/debian-8" } } network_interface { subnetwork = "${google_compute_subnetwork.my-custom-subnet.name}" access_config { // Ephemeral IP } } service_account { scopes = ["compute-rw"] } metadata_startup_script = "${file("startup.sh")}" } resource "google_compute_instance" "ilb-instance-3" { name = "ilb-instance-3" machine_type = "n1-standard-1" zone = "${var.region_zone_2}" tags = ["int-lb"] boot_disk { initialize_params { image = "debian-cloud/debian-8" } } network_interface { subnetwork = "${google_compute_subnetwork.my-custom-subnet.name}" access_config { // Ephemeral IP } } service_account { scopes = ["compute-rw"] } metadata_startup_script = "${file("startup.sh")}" } resource "google_compute_instance" "ilb-instance-4" { name = "ilb-instance-4" machine_type = "n1-standard-1" zone = "${var.region_zone_2}" tags = ["int-lb"] boot_disk { initialize_params { image = "debian-cloud/debian-8" } } network_interface { subnetwork = "${google_compute_subnetwork.my-custom-subnet.name}" access_config { // Ephemeral IP } } service_account { scopes = ["compute-rw"] } metadata_startup_script = "${file("startup.sh")}" } resource "google_compute_instance_group" "us-ig1" { name = "us-ig1" instances = [ "${google_compute_instance.ilb-instance-1.self_link}", "${google_compute_instance.ilb-instance-2.self_link}", ] zone = "${var.region_zone}" } resource "google_compute_instance_group" "us-ig2" { name = "us-ig2" instances = [ "${google_compute_instance.ilb-instance-3.self_link}", "${google_compute_instance.ilb-instance-4.self_link}", ] zone = "${var.region_zone_2}" } resource "google_compute_health_check" "my-tcp-health-check" { name = "my-tcp-health-check" tcp_health_check { port = "80" } } resource "google_compute_region_backend_service" "my-int-lb" { name = "my-int-lb" health_checks = ["${google_compute_health_check.my-tcp-health-check.self_link}"] region = "${var.region}" backend { group = "${google_compute_instance_group.us-ig1.self_link}" } backend { group = "${google_compute_instance_group.us-ig2.self_link}" } } resource "google_compute_forwarding_rule" "my-int-lb-forwarding-rule" { name = "my-int-lb-forwarding-rule" load_balancing_scheme = "INTERNAL" ports = ["80"] network = "${google_compute_network.my-custom-network.self_link}" subnetwork = "${google_compute_subnetwork.my-custom-subnet.self_link}" backend_service = "${google_compute_region_backend_service.my-int-lb.self_link}" } resource "google_compute_firewall" "allow-internal-lb" { name = "allow-internal-lb" network = "${google_compute_network.my-custom-network.name}" allow { protocol = "tcp" ports = ["80", "443"] } source_ranges = ["10.128.0.0/20"] target_tags = ["int-lb"] } resource "google_compute_firewall" "allow-health-check" { name = "allow-health-check" network = "${google_compute_network.my-custom-network.name}" allow { protocol = "tcp" } source_ranges = ["130.211.0.0/22", "35.191.0.0/16"] target_tags = ["int-lb"] } resource "google_compute_instance" "standalone-instance-1" { name = "standalone-instance-1" machine_type = "n1-standard-1" zone = "${var.region_zone}" tags = ["standalone"] boot_disk { initialize_params { image = "debian-cloud/debian-8" } } network_interface { subnetwork = "${google_compute_subnetwork.my-custom-subnet.name}" access_config { // Ephemeral IP } } } resource "google_compute_firewall" "allow-ssh-to-standalone" { name = "allow-ssh-to-standalone" network = "${google_compute_network.my-custom-network.name}" allow { protocol = "tcp" ports = ["22"] } target_tags = ["standalone"] }