@@ -32,6 +32,151 @@ https://cloud.google.com/compute/docs/load-balancing/http/
32
32
33
33
34
34
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
+ ```
35
180
## Example Usage - External Ssl Proxy Lb Mig Backend
36
181
37
182
0 commit comments