160 lines
3.5 KiB
Terraform
160 lines
3.5 KiB
Terraform
|
# https://cloud.google.com/compute/docs/load-balancing/http/content-based-example
|
||
|
|
||
|
provider "google" {
|
||
|
region = "${var.region}"
|
||
|
project = "${var.project_name}"
|
||
|
credentials = "${file("${var.credentials_file_path}")}"
|
||
|
}
|
||
|
|
||
|
resource "google_compute_instance" "www" {
|
||
|
name = "tf-www-compute"
|
||
|
machine_type = "f1-micro"
|
||
|
zone = "${var.region_zone}"
|
||
|
tags = ["http-tag"]
|
||
|
|
||
|
disk {
|
||
|
image = "projects/debian-cloud/global/images/family/debian-8"
|
||
|
}
|
||
|
|
||
|
network_interface {
|
||
|
network = "default"
|
||
|
|
||
|
access_config {
|
||
|
// Ephemeral IP
|
||
|
}
|
||
|
}
|
||
|
|
||
|
metadata_startup_script = "${file("scripts/install-www.sh")}"
|
||
|
|
||
|
service_account {
|
||
|
scopes = ["https://www.googleapis.com/auth/compute.readonly"]
|
||
|
}
|
||
|
}
|
||
|
|
||
|
resource "google_compute_instance" "www-video" {
|
||
|
name = "tf-www-video-compute"
|
||
|
machine_type = "f1-micro"
|
||
|
zone = "${var.region_zone}"
|
||
|
tags = ["http-tag"]
|
||
|
|
||
|
disk {
|
||
|
image = "projects/debian-cloud/global/images/family/debian-8"
|
||
|
}
|
||
|
|
||
|
network_interface {
|
||
|
network = "default"
|
||
|
|
||
|
access_config {
|
||
|
// Ephemeral IP
|
||
|
}
|
||
|
}
|
||
|
|
||
|
metadata_startup_script = "${file("scripts/install-video.sh")}"
|
||
|
|
||
|
service_account {
|
||
|
scopes = ["https://www.googleapis.com/auth/compute.readonly"]
|
||
|
}
|
||
|
}
|
||
|
|
||
|
resource "google_compute_global_address" "external-address" {
|
||
|
name = "tf-external-address"
|
||
|
}
|
||
|
|
||
|
resource "google_compute_instance_group" "www-resources" {
|
||
|
name = "tf-www-resources"
|
||
|
zone = "${var.region_zone}"
|
||
|
|
||
|
instances = ["${google_compute_instance.www.self_link}"]
|
||
|
|
||
|
named_port {
|
||
|
name = "http"
|
||
|
port = "80"
|
||
|
}
|
||
|
}
|
||
|
|
||
|
resource "google_compute_instance_group" "video-resources" {
|
||
|
name = "tf-video-resources"
|
||
|
zone = "${var.region_zone}"
|
||
|
|
||
|
instances = ["${google_compute_instance.www-video.self_link}"]
|
||
|
|
||
|
named_port {
|
||
|
name = "http"
|
||
|
port = "80"
|
||
|
}
|
||
|
}
|
||
|
|
||
|
resource "google_compute_health_check" "health-check" {
|
||
|
name = "tf-health-check"
|
||
|
|
||
|
http_health_check {
|
||
|
}
|
||
|
}
|
||
|
|
||
|
resource "google_compute_backend_service" "www-service" {
|
||
|
name = "tf-www-service"
|
||
|
protocol = "HTTP"
|
||
|
|
||
|
backend {
|
||
|
group = "${google_compute_instance_group.www-resources.self_link}"
|
||
|
}
|
||
|
|
||
|
health_checks = ["${google_compute_health_check.health-check.self_link}"]
|
||
|
}
|
||
|
|
||
|
resource "google_compute_backend_service" "video-service" {
|
||
|
name = "tf-video-service"
|
||
|
protocol = "HTTP"
|
||
|
|
||
|
backend {
|
||
|
group = "${google_compute_instance_group.video-resources.self_link}"
|
||
|
}
|
||
|
|
||
|
health_checks = ["${google_compute_health_check.health-check.self_link}"]
|
||
|
}
|
||
|
|
||
|
resource "google_compute_url_map" "web-map" {
|
||
|
name = "tf-web-map"
|
||
|
default_service = "${google_compute_backend_service.www-service.self_link}"
|
||
|
|
||
|
host_rule {
|
||
|
hosts = ["*"]
|
||
|
path_matcher = "tf-allpaths"
|
||
|
}
|
||
|
|
||
|
path_matcher {
|
||
|
name = "tf-allpaths"
|
||
|
default_service = "${google_compute_backend_service.www-service.self_link}"
|
||
|
|
||
|
path_rule {
|
||
|
paths = ["/video", "/video/*",]
|
||
|
service = "${google_compute_backend_service.video-service.self_link}"
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
resource "google_compute_target_http_proxy" "http-lb-proxy" {
|
||
|
name = "tf-http-lb-proxy"
|
||
|
url_map = "${google_compute_url_map.web-map.self_link}"
|
||
|
}
|
||
|
|
||
|
resource "google_compute_global_forwarding_rule" "default" {
|
||
|
name = "tf-http-content-gfr"
|
||
|
target = "${google_compute_target_http_proxy.http-lb-proxy.self_link}"
|
||
|
ip_address = "${google_compute_global_address.external-address.address}"
|
||
|
port_range = "80"
|
||
|
}
|
||
|
|
||
|
resource "google_compute_firewall" "default" {
|
||
|
name = "tf-www-firewall-allow-internal-only"
|
||
|
network = "default"
|
||
|
|
||
|
allow {
|
||
|
protocol = "tcp"
|
||
|
ports = ["80"]
|
||
|
}
|
||
|
|
||
|
source_ranges = ["130.211.0.0/22", "35.191.0.0/16"]
|
||
|
target_tags = ["http-tag"]
|
||
|
}
|