Menyiapkan bucket backend

Cloud CDN memanfaatkan pilihan Anda antara Load Balancer Aplikasi eksternal global atau Load Balancer Aplikasi klasik untuk menyediakan pemilihan rute, health check, dan dukungan IP anycast. Karena Load Balancer Aplikasi eksternal global dapat memiliki beberapa jenis instance backend—instance VM Compute Engine, Pod Google Kubernetes Engine, bucket Cloud Storage, atau backend eksternal di luar Google Cloud—Anda dapat memilih backend (origin) mana yang akan mengaktifkan Cloud CDN.

Panduan penyiapan ini menunjukkan cara membuat Load Balancer Aplikasi eksternal dengan Cloud CDN yang diaktifkan. Contoh ini menggunakan resource berikut:

  • Jaringan Virtual Private Cloud (VPC) default
  • Peta URL default
  • Alamat IP eksternal yang dicadangkan
  • Bucket Cloud Storage sebagai backend
  • Satu bucket backend load balancer yang berfungsi sebagai wrapper di sekitar bucket Cloud Storage

Bucket backend mendukung hal berikut:

  • Bucket Cloud Storage dari kelas penyimpanan apa pun, termasuk bucket multi-region
  • Kebijakan Cloud CDN untuk menyimpan konten ke dalam cache di edge global Google

Untuk mempelajari cara kerja Cloud CDN, lihat ringkasan Cloud CDN.

Secara default, Cloud Storage menggunakan cache yang sama dengan yang digunakan Cloud CDN. Jika mengaktifkan Cloud CDN di bucket backend, Anda dapat menggunakan kontrol Cloud CDN pada konten. Kontrol Cloud CDN mencakup, misalnya, mode cache, URL yang ditandatangani, dan pembatalan validasi. Cloud CDN juga memungkinkan Anda meng-cache konten berukuran besar (> 10 MB). Jika tidak mengaktifkan Cloud CDN di bucket backend, Anda hanya dapat menggunakan header Cache-Control origin untuk mengontrol penyimpanan dalam cache untuk konten yang lebih kecil, seperti yang ditetapkan oleh metadata Cloud Storage.

Backend load balancer

Load Balancer Aplikasi eksternal menggunakan peta URL untuk mengarahkan traffic dari URL yang ditentukan ke layanan yang ditentukan. Tabel berikut meringkas jenis backend tempat Anda dapat menghosting konten dan layanan.

Konfigurasi backend load balancer Jenis media umum Jenis backend
Layanan backend Dinamis (seperti data)
  • Grup instance tidak terkelola
  • Grup instance terkelola
  • Grup endpoint jaringan yang bersifat internal untuk Google Cloud
  • Grup endpoint jaringan yang eksternal ke Google Cloud
Bucket backend Statis (seperti gambar)
  • Bucket Cloud Storage (dibahas di halaman ini)

Sebelum memulai

Konsol

  1. Di konsol Google Cloud, buka halaman Beranda.

    Buka halaman beranda Google Cloud

  2. Di sebelah kanan Google Cloud, pilih project dari menu pull-down.

gcloud

     gcloud config set project PROJECT_ID
   

Ganti PROJECT_ID dengan project ID Google Cloud Anda.

Terraform

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID
   

Membuat bucket Cloud Storage

Jika sudah memiliki bucket Cloud Storage yang belum ditetapkan ke load balancer, Anda dapat melanjutkan ke langkah berikutnya.

Saat membuat bucket Cloud Storage untuk digunakan sebagai backend untuk Application Load Balancer eksternal dengan Cloud CDN, sebaiknya pilih bucket multi-region, yang secara otomatis mereplikasi objek di beberapa region Google Cloud. Hal ini dapat meningkatkan ketersediaan konten dan meningkatkan toleransi kegagalan di seluruh aplikasi.

Konsol

  1. Di konsol Google Cloud, buka halaman Cloud Storage Buckets.

    Buka halaman Bucket

  2. Klik Create bucket.
  3. Tentukan nilai untuk kolom dalam tabel berikut, dan biarkan semua kolom lainnya dalam setelan default.

    Properti Nilai (ketik nilai atau pilih opsi yang ditentukan)
    Nama Untuk setiap bucket, masukkan nama yang unik secara global. Jika nama yang Anda masukkan tidak unik, Anda akan melihat pesan untuk mencoba nama lain.
    Jenis lokasi Multi-region
    Lokasi Pilih region, seperti us (multiple regions in United States).
    Kelas penyimpanan default Standar
    Kontrol akses Seragam
  4. Klik Create.

  5. Catat nama bucket Cloud Storage yang baru dibuat untuk langkah berikutnya.

gcloud

gcloud storage buckets create gs://BUCKET_NAME --project=PROJECT_ID --default-storage-class=standard --location=us-east1 --uniform-bucket-level-access

Terraform

Untuk membuat bucket, gunakan resource google_storage_bucket.

# Cloud Storage bucket
resource "random_id" "bucket_prefix" {
  byte_length = 8
}

resource "google_storage_bucket" "default" {
  name                        = "${random_id.bucket_prefix.hex}-my-bucket"
  location                    = "us-east1"
  uniform_bucket_level_access = true
  storage_class               = "STANDARD"
  // delete bucket and contents on destroy.
  force_destroy = true
  // Assign specialty files
  website {
    main_page_suffix = "index.html"
    not_found_page   = "404.html"
  }
}

Untuk mempelajari cara menerapkan atau menghapus konfigurasi Terraform, lihat Perintah dasar Terraform.

Menyalin file grafis ke bucket Cloud Storage Anda

Agar Anda dapat menguji penyiapan, salin file grafis dari bucket Cloud Storage publik ke bucket Cloud Storage Anda sendiri.

gcloud

Jalankan perintah berikut di Cloud Shell. Ganti BUCKET_NAME dengan nama bucket Cloud Storage Anda yang unik:

gcloud storage cp gs://gcp-external-http-lb-with-bucket/three-cats.jpg gs://BUCKET_NAME/never-fetch/

Terraform

Untuk menyalin objek, gunakan local-exec Provisioner dengan perintah gcloud storage cp.

resource "null_resource" "upload_image" {
  provisioner "local-exec" {
    command = "gcloud storage cp gs://gcp-external-http-lb-with-bucket/three-cats.jpg gs://${google_storage_bucket.default.name}/never-fetch/ --recursive"
  }
}

Atau, untuk mengupload objek, gunakan resource google_storage_bucket_object.

# image object for testing, try to access http://<your_lb_ip_address>/test.jpg
resource "google_storage_bucket_object" "test_image" {
  name = "test-object"
  # Uncomment and add valid path to an object.
  #  source       = "/path/to/an/object"
  #  content_type = "image/jpeg"

  # Delete after uncommenting above source and content_type attributes
  content      = "Data as string to be uploaded"
  content_type = "text/plain"

  bucket = google_storage_bucket.default.name
}

Untuk mempelajari cara menerapkan atau menghapus konfigurasi Terraform, lihat Perintah dasar Terraform.

Di konsol Google Cloud, klik Refresh untuk memverifikasi bahwa file grafis telah disalin.

Membuat bucket Cloud Storage bersifat publik

Contoh ini membuat bucket Cloud Storage Anda dapat dibaca secara publik. Ini adalah pendekatan yang direkomendasikan untuk konten publik. Dengan setelan ini, siapa saja di internet dapat melihat dan mencantumkan objek Anda beserta metadatanya, kecuali ACL. Untuk mengurangi risiko eksposur data yang tidak diinginkan, Anda biasanya harus menyediakan bucket Cloud Storage tertentu untuk objek publik.

Berikut adalah alternatif untuk membuat seluruh bucket Cloud Storage bersifat publik:

Prosedur berikut memberikan akses kepada semua pengguna untuk melihat objek di bucket Cloud Storage Anda, sehingga bucket dapat dibaca secara publik.

Konsol

  1. Di konsol Google Cloud, buka halaman Cloud Storage Buckets.

    Buka halaman Bucket

  2. Buka bucket, lalu klik tab Izin.
  3. Klik Add principals.
  4. Di New principals, masukkan allUsers.
  5. Untuk peran, pilih Cloud Storage > Storage Object Viewer.
  6. Klik Simpan.

gcloud

gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME --member=allUsers --role=roles/storage.objectViewer

Terraform

Untuk membuat bucket Cloud Storage bersifat publik, gunakan resource google_storage_bucket_iam_member.

# make bucket public
resource "google_storage_bucket_iam_member" "default" {
  bucket = google_storage_bucket.default.name
  role   = "roles/storage.objectViewer"
  member = "allUsers"
}

Untuk mempelajari cara menerapkan atau menghapus konfigurasi Terraform, lihat Perintah dasar Terraform.

Mencadangkan alamat IP eksternal

Setelah bucket Cloud Storage Anda aktif dan berjalan, siapkan alamat IP eksternal statis global yang digunakan pelanggan untuk menjangkau load balancer Anda.

Langkah ini bersifat opsional, tetapi direkomendasikan, karena alamat IP eksternal statis menyediakan satu alamat untuk mengarahkan domain Anda.

Konsol

  1. Di konsol Google Cloud, buka halaman External IP addresses.

    Buka halaman Alamat IP eksternal

  2. Untuk mereservasi alamat IPv4, klik Reserve static address.
  3. Tetapkan Nama example-ip.
  4. Tetapkan Network Service Tier ke Premium.
  5. Tetapkan IP version ke IPv4.
  6. Tetapkan Type ke Global.
  7. Klik Reserve.

gcloud

gcloud compute addresses create example-ip \
    --network-tier=PREMIUM \
    --ip-version=IPV4 \
    --global

Perhatikan alamat IPv4 yang dicadangkan:

gcloud compute addresses describe example-ip \
    --format="get(address)" \
    --global

Terraform

Untuk mencadangkan alamat IP, gunakan resource google_compute_global_address.

# reserve IP address
resource "google_compute_global_address" "default" {
  name = "example-ip"
}

Untuk mempelajari cara menerapkan atau menghapus konfigurasi Terraform, lihat Perintah dasar Terraform.

Membuat Load Balancer Aplikasi eksternal

Dalam prosedur ini, Anda akan membuat bucket backend load balancer, yang berfungsi sebagai wrapper untuk bucket Cloud Storage Anda. Saat membuat atau mengedit bucket backend, Anda dapat mengaktifkan Cloud CDN.

Konsol

Memulai proses konfigurasi Load Balancer Aplikasi eksternal

  1. Di konsol Google Cloud, buka halaman Load balancing.

    Buka halaman Load balancing

  2. Di bagian HTTP(S) load balancing, klik Start configuration.
  3. Pilih From Internet to my VMs, lalu klik Continue.
  4. Di bagian Pengelolaan traffic lanjutan, pilih salah satu dari opsi berikut:
    • Untuk Load Balancer Aplikasi klasik, pilih Classic HTTP(S) Load Balancer.
    • Untuk Application Load Balancer eksternal global, pilih HTTP(S) Load Balancer with Advanced Traffic Management.
  5. Tetapkan Name ke http-lb, lalu lanjutkan ke langkah berikutnya.

Mengonfigurasi backend dan mengaktifkan Cloud CDN

Buat bucket backend load balancer, yang berfungsi sebagai wrapper untuk bucket Cloud Storage Anda. Saat membuat atau mengedit bucket backend, Anda dapat mengaktifkan Cloud CDN.

  1. Klik Backend configuration.
  2. Di bagian Backend services & backend buckets, klik Create or select backend services & backend buckets, lalu klik Backend buckets > Create a backend bucket.
  3. Tetapkan Name ke cat-backend-bucket. Nama ini tidak perlu unik secara global dan dapat berbeda dengan nama bucket Cloud Storage yang sebenarnya.
  4. Di bagian Cloud Storage bucket, klik Browse.
  5. Pilih BUCKET_NAME unik secara global Cloud Storage yang Anda buat, lalu klik Select.
  6. Klik Enable Cloud CDN.

  7. (Opsional) Ubah setelan mode cache dan TTL.

  8. Klik Create.

Mengonfigurasi aturan host dan pencocok jalur

Aturan host dan pencocok jalur adalah komponen konfigurasi dari peta URL Load Balancer Aplikasi eksternal.

Di Aturan host dan jalur, Anda dapat mempertahankan setelan default.

Untuk contoh penyiapan yang disesuaikan, lihat Menambahkan bucket backend ke load balancer.

Untuk mempelajari aturan host dan pencocok jalur lebih lanjut, lihat Ringkasan peta URL.

Mengonfigurasi frontend

  1. Klik Frontend configuration.
  2. Pastikan opsi dikonfigurasi dengan nilai ini.

    Properti Nilai (ketik nilai atau pilih opsi yang ditentukan)
    Protokol HTTP
    Network Service Tier Premium
    IP version IPv4
    Alamat IP example-ip
    Port 80

    Jika ingin membuat load balancer HTTPS, bukan load balancer HTTP, Anda harus memiliki sertifikat SSL (gcloud compute ssl-certificates list), dan Anda harus mengisi kolom sebagai berikut.

    Properti Nilai (ketik nilai atau pilih opsi yang ditentukan)
    Protokol HTTPS
    Network Service Tier Premium
    IP version IPv4
    Alamat IP example-ip
    Port 443
    Sertifikat Select a certificate atau Create a new certificate
  3. Klik Done.

Meninjau konfigurasi

  1. Klik Review and finalize.
  2. Tinjau bagian Bucket backend, Aturan host dan jalur, dan Frontend.
  3. Klik Create.
  4. Tunggu load balancer dibuat.
  5. Klik nama load balancer (http-lb).
  6. Perhatikan alamat IP load balancer untuk tugas berikutnya. Ini disebut IP_ADDRESS.

gcloud

Mengonfigurasi backend

gcloud compute backend-buckets create cat-backend-bucket \
    --gcs-bucket-name=BUCKET_NAME \
    --enable-cdn \
    --cache-mode=CACHE_MODE

Tetapkan mode cache dengan mengganti CACHE_MODE dengan salah satu dari yang berikut ini:

  • CACHE_ALL_STATIC atau USE_ORIGIN_HEADERS: Menggunakan header yang ditetapkan sesuai dengan metadata kontrol cache di Cloud Storage. Cloud Storage selalu menyediakan header Cache-Control ke Cloud CDN. Jika tidak ada nilai yang dipilih secara eksplisit, nilai default akan dikirim.

  • FORCE_CACHE_ALL: Menyimpan semua konten dalam cache, dengan mengabaikan perintah private, no-store, atau no-cache dalam header respons Cache-Control yang dikirim oleh Cloud Storage.

Mengonfigurasi peta URL

gcloud compute url-maps create http-lb \
    --default-backend-bucket=cat-backend-bucket

Mengonfigurasi proxy target

gcloud compute target-http-proxies create http-lb-proxy \
    --url-map=http-lb

Mengonfigurasi aturan penerusan

  • Untuk Load Balancer Aplikasi eksternal global, gunakan perintah gcloud CLI dengan load-balancing-scheme=EXTERNAL_MANAGED. Setelan ini menawarkan kapabilitas pengelolaan traffic tingkat lanjut.
  • Untuk Load Balancer Aplikasi klasik, gunakan load-balancing-scheme=EXTERNAL.
gcloud compute forwarding-rules create http-lb-forwarding-rule \
    --load-balancing-scheme=LOAD_BALANCING_SCHEME \
    --network-tier=PREMIUM \
    --address=example-ip \
    --global \
    --target-http-proxy=http-lb-proxy \
    --ports=80

Terraform

Mengonfigurasi backend

Untuk mengonfigurasi backend, gunakan resource google_compute_backend_bucket.

# backend bucket with CDN policy with default ttl settings
resource "google_compute_backend_bucket" "default" {
  name        = "cat-backend-bucket"
  description = "Contains beautiful images"
  bucket_name = google_storage_bucket.default.name
  enable_cdn  = true
  cdn_policy {
    cache_mode        = "CACHE_ALL_STATIC"
    client_ttl        = 3600
    default_ttl       = 3600
    max_ttl           = 86400
    negative_caching  = true
    serve_while_stale = 86400
  }
}

Mengonfigurasi peta URL

Untuk mengonfigurasi backend, gunakan resource google_compute_url_map.

# url map
resource "google_compute_url_map" "default" {
  name            = "http-lb"
  default_service = google_compute_backend_bucket.default.id
}

Mengonfigurasi proxy target

Untuk mengonfigurasi proxy target, gunakan resource google_compute_target_http_proxy atau resource google_compute_target_https_proxy.

# http proxy
resource "google_compute_target_http_proxy" "default" {
  name    = "http-lb-proxy"
  url_map = google_compute_url_map.default.id
}

Mengonfigurasi aturan penerusan

Untuk mengonfigurasi aturan penerusan, gunakan resource google_compute_global_forwarding_rule.

# forwarding rule
resource "google_compute_global_forwarding_rule" "default" {
  name                  = "http-lb-forwarding-rule"
  ip_protocol           = "TCP"
  load_balancing_scheme = "EXTERNAL"
  port_range            = "80"
  target                = google_compute_target_http_proxy.default.id
  ip_address            = google_compute_global_address.default.id
}
  • Untuk Load Balancer Aplikasi eksternal global, gunakan dengan load_balancing_scheme="EXTERNAL_MANAGED". Setelan ini menawarkan kemampuan pengelolaan traffic lanjutan.
  • Untuk Load Balancer Aplikasi klasik, gunakan load_balancing_scheme="EXTERNAL".

Untuk mempelajari cara menerapkan atau menghapus konfigurasi Terraform, lihat Perintah dasar Terraform.

Mengirim traffic ke bucket backend

Setelah membuat aturan penerusan global, mungkin perlu beberapa menit untuk menerapkan konfigurasi Anda di seluruh dunia. Setelah beberapa menit berlalu, Anda dapat mulai mengirimkan traffic ke alamat IP load balancer.

Konsol

  1. Di konsol Google Cloud, buka halaman Load balancing.

    Buka halaman Load balancing

  2. Klik http-lb untuk meluaskan load balancer yang baru saja Anda buat.

    Di bagian Backend, konfirmasi bahwa bucket backend bersifat responsif. Akan ada tanda centang hijau di samping bucket backend Anda. Jika Anda melihat yang sebaliknya, coba muat ulang halaman terlebih dahulu. Diperlukan waktu beberapa saat hingga konsol Google Cloud menunjukkan bahwa backend responsif.

  3. Setelah konsol Google Cloud menunjukkan bahwa bucket backend dalam keadaan baik, Anda dapat menguji load balancer menggunakan browser web dengan membuka http://IP_ADDRESS/never-fetch/three-cats.jpg. Ganti IP_ADDRESS dengan alamat IP load balancer. Browser akan merender halaman berisi konten yang menampilkan file grafis.

gcloud

Gunakan perintah curl untuk menguji respons dari URL. Ganti IP_ADDRESS dengan alamat IPv4 load balancer.

Perhatikan alamat IPv4 yang dicadangkan:

gcloud compute addresses describe example-ip \
    --format="get(address)" \
    --global

Kirim permintaan curl:

curl http://IP_ADDRESS/never-fetch/three-cats.jpg

Memverifikasi bahwa Cloud CDN berfungsi

Jika Anda memuat ulang halaman http://IP_ADDRESS/never-fetch/three-cats.jpg beberapa kali secara berurutan, akan ada beberapa hit cache.

Entri log berikut menunjukkan hit cache. Anda dapat melihat hit cache di konsol Google Cloud dengan membuka Logs Explorer dan memfilter menurut nama aturan penerusan.

Buka Logs Explorer

Logs Explorer

{
    insertId: "1oek5rg3l3fxj7"
    jsonPayload: {
        @type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry"
        cacheId: "SFO-fbae48ad"
        statusDetails: "response_from_cache"
    }
    httpRequest: {
        requestMethod: "GET"
        requestUrl: "http://LOAD_BALANCER_IP_ADDRESS/never-fetch/three-cats.jpg"
        requestSize: "577"
        status: 254
        responseSize: "157"
        userAgent: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36"
        remoteIp: "CLIENT_IP_ADDRESS"
        cacheHit: true
        cacheLookup: true
    }
    resource: {
        type: "http_load_balancer"
        labels: {
            zone: "global"
            url_map_name: "URL_MAP_NAME"
            forwarding_rule_name: "FORWARDING_RULE_NAME"
            target_proxy_name: "TARGET_PROXY_NAME"
            backend_service_name: ""
            project_id: "PROJECT_ID"
        }
    }
    timestamp: "2020-06-08T23:41:25.078651Z"
    severity: "INFO"
    logName: "projects/PROJECT_ID/logs/requests"
    trace: "projects/PROJECT_ID/traces/241d69833e64b3bf83fabac8c873d992"
    receiveTimestamp: "2020-06-08T23:41:25.588272510Z"
    spanId: "7b6537d3672e08e1"
}

Konsol

  1. Di konsol Google Cloud, buka halaman Load balancing.

    Buka halaman Load balancing

  2. Klik http-lb untuk meluaskan load balancer yang baru saja Anda buat.

    Di bagian Backend, konfirmasi bahwa bucket backend bersifat responsif. Akan ada tanda centang hijau di samping bucket backend Anda. Jika Anda melihat yang sebaliknya, coba muat ulang halaman terlebih dahulu. Diperlukan waktu beberapa saat hingga konsol Google Cloud menunjukkan bahwa backend responsif.

  3. Setelah konsol Google Cloud menunjukkan bahwa bucket backend berfungsi dengan baik, Anda dapat menguji load balancer menggunakan browser web dengan membuka http://IP_ADDRESS/never-fetch/three-cats.jpg. Ganti IP_ADDRESS dengan alamat IP load balancer. Browser akan merender halaman berisi konten yang menampilkan file grafis.

gcloud

Gunakan perintah curl untuk menguji respons dari URL. Ganti IP_ADDRESS dengan alamat IPv4 load balancer.

Perhatikan alamat IPv4 yang dicadangkan:

gcloud compute addresses describe example-ip \
    --format="get(address)" \
    --global

Kirim permintaan curl:

curl -D- -o /dev/null /dev/null http://IP_ADDRESS/never-fetch/three-cats.jpg

Konten diambil dari Cloud Storage, di-cache oleh Cloud CDN, lalu divalidasi dan diambil kembali saat masa berlakunya habis atau dihapus dari cache.

Konten dari cache memiliki header Age yang lebih besar dari nol.

Konten yang perlu diperbarui lebih awal dari TTL dapat dibatalkan validasinya dan diambil kembali dari Cloud Storage.

Menonaktifkan Cloud CDN

Konsol

Menonaktifkan Cloud CDN untuk satu bucket backend

  1. Di konsol Google Cloud, buka halaman Cloud CDN.

    Buka halaman Cloud CDN

  2. Di sisi kanan baris asal, klik Menu , lalu pilih Edit.
  3. Hapus centang pada kotak bucket backend yang ingin Anda hentikan penggunaan Cloud CDN-nya.
  4. Klik Perbarui.

Menghapus Cloud CDN untuk semua bucket backend untuk origin

  1. Di konsol Google Cloud, buka halaman Cloud CDN.

    Buka halaman Cloud CDN

  2. Di sisi kanan baris asal, klik Menu , lalu pilih Hapus.
  3. Untuk mengonfirmasi, klik Hapus.

gcloud

gcloud compute backend-buckets update BACKEND_BUCKET_NAME \
    --no-enable-cdn

Menonaktifkan Cloud CDN tidak akan membatalkan validasi atau menghapus cache. Jika Anda menonaktifkan dan mengaktifkan kembali Cloud CDN, sebagian besar atau semua konten yang disimpan dalam cache mungkin masih di-cache. Untuk mencegah konten digunakan oleh cache, Anda harus membatalkan konten tersebut.

Langkah selanjutnya