Skip to content

Commit 3c40b7d

Browse files
Add CDN load balancer with Cloud Storage buckets as backend (#5575) (#10975)
Signed-off-by: Modular Magician <[email protected]>
1 parent 32cfd5e commit 3c40b7d

File tree

2 files changed

+147
-0
lines changed

2 files changed

+147
-0
lines changed

.changelog/5575.txt

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
```release-note:none
2+
```

website/docs/r/compute_global_forwarding_rule.html.markdown

+145
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,151 @@ https://cloud.google.com/compute/docs/load-balancing/http/
3232

3333

3434

35+
<div class = "oics-button" style="float: right; margin: 0 0 -15px">
36+
<a href="https://console.cloud.google.com/cloudshell/open?cloudshell_git_repo=https%3A%2F%2Fgithub.jpy.wang%2Fterraform-google-modules%2Fdocs-examples.git&cloudshell_working_dir=external_cnd_lb_with_backend_bucket&cloudshell_image=gcr.io%2Fgraphite-cloud-shell-images%2Fterraform%3Alatest&open_in_editor=main.tf&cloudshell_print=.%2Fmotd&cloudshell_tutorial=.%2Ftutorial.md" target="_blank">
37+
<img alt="Open in Cloud Shell" src="//gstatic.com/cloudssh/images/open-btn.svg" style="max-height: 44px; margin: 32px auto; max-width: 100%;">
38+
</a>
39+
</div>
40+
## Example Usage - External Cnd Lb With Backend Bucket
41+
42+
43+
```hcl
44+
# CDN load balancer with Cloud bucket as backend
45+
46+
# VPC
47+
resource "google_compute_network" "default" {
48+
name = "cdn-network"
49+
provider = google-beta
50+
auto_create_subnetworks = false
51+
}
52+
53+
# backend subnet
54+
resource "google_compute_subnetwork" "default" {
55+
name = "cdn-subnet"
56+
provider = google-beta
57+
ip_cidr_range = "10.0.1.0/24"
58+
region = "us-central1"
59+
network = google_compute_network.default.id
60+
}
61+
62+
# reserve IP address
63+
resource "google_compute_global_address" "default" {
64+
provider = google-beta
65+
name = "cdn-static-ip"
66+
}
67+
68+
# forwarding rule
69+
resource "google_compute_global_forwarding_rule" "default" {
70+
name = "cdn-forwarding-rule"
71+
provider = google-beta
72+
ip_protocol = "TCP"
73+
load_balancing_scheme = "EXTERNAL"
74+
port_range = "80"
75+
target = google_compute_target_http_proxy.default.id
76+
ip_address = google_compute_global_address.default.id
77+
}
78+
79+
# http proxy
80+
resource "google_compute_target_http_proxy" "default" {
81+
name = "cdn-target-http-proxy"
82+
provider = google-beta
83+
url_map = google_compute_url_map.default.id
84+
}
85+
86+
# url map
87+
resource "google_compute_url_map" "default" {
88+
name = "cdn-url-map"
89+
provider = google-beta
90+
default_service = google_compute_backend_bucket.default.id
91+
}
92+
93+
# backend bucket with CDN policy with default ttl settings
94+
resource "google_compute_backend_bucket" "default" {
95+
name = "image-backend-bucket"
96+
description = "Contains beautiful images"
97+
bucket_name = google_storage_bucket.default.name
98+
enable_cdn = true
99+
cdn_policy {
100+
cache_mode = "CACHE_ALL_STATIC"
101+
client_ttl = 3600
102+
default_ttl = 3600
103+
max_ttl = 86400
104+
negative_caching = true
105+
serve_while_stale = 86400
106+
}
107+
}
108+
109+
# cdn backend bucket
110+
resource "google_storage_bucket" "default" {
111+
name = "cdn-backend-storage-bucket"
112+
location = "US"
113+
uniform_bucket_level_access = true
114+
// delete bucket and contents on destroy.
115+
force_destroy = true
116+
// Assign specialty files
117+
website {
118+
main_page_suffix = "index.html"
119+
not_found_page = "404.html"
120+
}
121+
}
122+
123+
# make bucket public
124+
resource "google_storage_bucket_iam_member" "default" {
125+
bucket = google_storage_bucket.default.name
126+
role = "roles/storage.objectViewer"
127+
member = "allUsers"
128+
}
129+
130+
resource "google_storage_bucket_object" "index_page" {
131+
name = "index.html"
132+
source = "index.html"
133+
bucket = google_storage_bucket.default.name
134+
depends_on = [local_file.index_page]
135+
}
136+
137+
resource "google_storage_bucket_object" "error_page" {
138+
name = "404.html"
139+
source = "404.html"
140+
bucket = google_storage_bucket.default.name
141+
depends_on = [local_file.error_page]
142+
}
143+
144+
# image object for testing, try to access http://<your_lb_ip_address>/test.jpg
145+
resource "google_storage_bucket_object" "test_image" {
146+
name = "test.jpg"
147+
source = "test.jpg"
148+
content_type = "image/jpeg"
149+
bucket = google_storage_bucket.default.name
150+
depends_on = [null_resource.test_image]
151+
}
152+
153+
# cdn sample index page
154+
resource "local_file" "index_page" {
155+
filename = "index.html"
156+
content = <<-EOT
157+
<html><body>
158+
<h1>Congratulations on setting up Google Cloud CDN with Storage backend!</h1>
159+
</body></html>
160+
EOT
161+
}
162+
163+
# cdn default error page
164+
resource "local_file" "error_page" {
165+
filename = "404.html"
166+
content = <<-EOT
167+
<html><body>
168+
<h1>404 Error: Object you are looking for is no longer available!</h1>
169+
</body></html>
170+
EOT
171+
}
172+
173+
# cdn sample image
174+
resource "null_resource" "test_image" {
175+
provisioner "local-exec" {
176+
command = "wget -O test.jpg https://upload.wikimedia.org/wikipedia/commons/c/c8/Thank_you_001.jpg"
177+
}
178+
}
179+
```
35180
## Example Usage - External Ssl Proxy Lb Mig Backend
36181

37182

0 commit comments

Comments
 (0)