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  }