github.com/spirius/terraform@v0.10.0-beta2.0.20170714185654-87b2c0cf8fea/examples/google-content-based-load-balancing/main.tf (about) 1 # https://cloud.google.com/compute/docs/load-balancing/http/content-based-example 2 3 provider "google" { 4 region = "${var.region}" 5 project = "${var.project_name}" 6 credentials = "${file("${var.credentials_file_path}")}" 7 } 8 9 resource "google_compute_instance" "www" { 10 name = "tf-www-compute" 11 machine_type = "f1-micro" 12 zone = "${var.region_zone}" 13 tags = ["http-tag"] 14 15 disk { 16 image = "projects/debian-cloud/global/images/family/debian-8" 17 } 18 19 network_interface { 20 network = "default" 21 22 access_config { 23 // Ephemeral IP 24 } 25 } 26 27 metadata_startup_script = "${file("scripts/install-www.sh")}" 28 29 service_account { 30 scopes = ["https://www.googleapis.com/auth/compute.readonly"] 31 } 32 } 33 34 resource "google_compute_instance" "www-video" { 35 name = "tf-www-video-compute" 36 machine_type = "f1-micro" 37 zone = "${var.region_zone}" 38 tags = ["http-tag"] 39 40 disk { 41 image = "projects/debian-cloud/global/images/family/debian-8" 42 } 43 44 network_interface { 45 network = "default" 46 47 access_config { 48 // Ephemeral IP 49 } 50 } 51 52 metadata_startup_script = "${file("scripts/install-video.sh")}" 53 54 service_account { 55 scopes = ["https://www.googleapis.com/auth/compute.readonly"] 56 } 57 } 58 59 resource "google_compute_global_address" "external-address" { 60 name = "tf-external-address" 61 } 62 63 resource "google_compute_instance_group" "www-resources" { 64 name = "tf-www-resources" 65 zone = "${var.region_zone}" 66 67 instances = ["${google_compute_instance.www.self_link}"] 68 69 named_port { 70 name = "http" 71 port = "80" 72 } 73 } 74 75 resource "google_compute_instance_group" "video-resources" { 76 name = "tf-video-resources" 77 zone = "${var.region_zone}" 78 79 instances = ["${google_compute_instance.www-video.self_link}"] 80 81 named_port { 82 name = "http" 83 port = "80" 84 } 85 } 86 87 resource "google_compute_health_check" "health-check" { 88 name = "tf-health-check" 89 90 http_health_check { 91 } 92 } 93 94 resource "google_compute_backend_service" "www-service" { 95 name = "tf-www-service" 96 protocol = "HTTP" 97 98 backend { 99 group = "${google_compute_instance_group.www-resources.self_link}" 100 } 101 102 health_checks = ["${google_compute_health_check.health-check.self_link}"] 103 } 104 105 resource "google_compute_backend_service" "video-service" { 106 name = "tf-video-service" 107 protocol = "HTTP" 108 109 backend { 110 group = "${google_compute_instance_group.video-resources.self_link}" 111 } 112 113 health_checks = ["${google_compute_health_check.health-check.self_link}"] 114 } 115 116 resource "google_compute_url_map" "web-map" { 117 name = "tf-web-map" 118 default_service = "${google_compute_backend_service.www-service.self_link}" 119 120 host_rule { 121 hosts = ["*"] 122 path_matcher = "tf-allpaths" 123 } 124 125 path_matcher { 126 name = "tf-allpaths" 127 default_service = "${google_compute_backend_service.www-service.self_link}" 128 129 path_rule { 130 paths = ["/video", "/video/*",] 131 service = "${google_compute_backend_service.video-service.self_link}" 132 } 133 } 134 } 135 136 resource "google_compute_target_http_proxy" "http-lb-proxy" { 137 name = "tf-http-lb-proxy" 138 url_map = "${google_compute_url_map.web-map.self_link}" 139 } 140 141 resource "google_compute_global_forwarding_rule" "default" { 142 name = "tf-http-content-gfr" 143 target = "${google_compute_target_http_proxy.http-lb-proxy.self_link}" 144 ip_address = "${google_compute_global_address.external-address.address}" 145 port_range = "80" 146 } 147 148 resource "google_compute_firewall" "default" { 149 name = "tf-www-firewall-allow-internal-only" 150 network = "default" 151 152 allow { 153 protocol = "tcp" 154 ports = ["80"] 155 } 156 157 source_ranges = ["130.211.0.0/22", "35.191.0.0/16"] 158 target_tags = ["http-tag"] 159 }