Menyiapkan bucket backend

Cloud CDN memanfaatkan pilihan Anda antara Load Balancer Aplikasi eksternal global atau Load Balancer Aplikasi klasik untuk menyediakan perutean, health check, dan dukungan IP anycast. Karena Load Balancer Aplikasi eksternal global dapat memiliki beberapa jenis backend instance—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 digunakan untuk mengaktifkan Cloud CDN.

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

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

Bucket backend mendukung hal berikut:

  • Bucket Cloud Storage dari semua kelas penyimpanan, termasuk bucket multi-region
  • Kebijakan Cloud CDN untuk menyimpan konten 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 di konten Anda. Kontrol Cloud CDN mencakup, misalnya, mode cache, URL bertanda tangan, 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 guna mengontrol caching 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 tertentu ke layanan yang ditentukan. Tabel berikut meringkas jenis backend tempat Anda dapat menghosting konten dan layanan.

Konfigurasi backend load balancer Jenis konten umum Jenis backend
Layanan backend Dinamis (seperti data)
  • Grup instance tidak terkelola
  • Grup instance terkelola
  • Grup endpoint jaringan internal ke Google Cloud
  • Grup endpoint jaringan di luar 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 langsung melanjutkan ke langkah berikutnya.

Saat Anda membuat bucket Cloud Storage untuk digunakan sebagai backend untuk Load Balancer Aplikasi 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 Anda.

Konsol

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

    Buka halaman Buckets

  2. Klik Create bucket.
  3. Tentukan nilai untuk kolom dalam tabel berikut, dan biarkan kolom lainnya dalam nilai 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
    Location Pilih region, seperti us (multiple region in United States).
    Kelas penyimpanan default Standar
    Kontrol akses Seragam
  4. Klik Create.

  5. Perhatikan 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 dalam bucket Cloud Storage

Agar 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 unik Anda:

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.

Menjadikan bucket Cloud Storage Anda publik

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

Berikut ini alternatif untuk mengubah seluruh bucket Cloud Storage menjadi publik:

Prosedur berikut memberi semua pengguna akses untuk melihat objek di bucket Cloud Storage Anda, sehingga bucket dapat dibaca oleh publik.

Konsol

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

    Buka halaman Buckets

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

gcloud

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

Terraform

Untuk menjadikan bucket Cloud Storage Anda 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 disarankan, 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 External IP addresses

  2. Untuk mereservasi alamat IPv4, klik Reserve static address.
  3. Tetapkan Nama example-ip.
  4. Tetapkan Tingkat Layanan Jaringan 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. 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. Pada HTTP(S) load balancing, klik Start configuration.
  3. Pilih From Internet to my VMs, lalu klik Continue.
  4. Di bagian Advanced traffic management, pilih salah satu opsi berikut:
    • Untuk Load Balancer Aplikasi klasik, pilih Klasik HTTP(S) Load Balancer.
    • Untuk Load Balancer Aplikasi eksternal global, pilih HTTP(S) Load Balancer dengan Advanced Traffic Management.
  5. Setel Name ke http-lb, lalu lanjutkan ke langkah berikutnya.

Mengonfigurasi backend dan mengaktifkan Cloud CDN

Membuat bucket backend load balancer, yang berfungsi sebagai wrapper untuk bucket Cloud Storage. 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 harus unik secara global dan dapat berbeda dengan nama bucket Cloud Storage yang sebenarnya.
  4. Pada bucket Cloud Storage, klik Browse.
  5. Pilih Cloud Storage unik secara global BUCKET_NAME yang Anda buat, lalu klik Select.
  6. Klik Aktifkan 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
    Certificate Pilih sertifikat atau Buat sertifikat baru
  3. Klik Done.

Meninjau konfigurasi

  1. Klik Review and finalize.
  2. Tinjau bagian Backend bucket, Aturan host dan jalur, serta Frontend.
  3. Klik Create.
  4. Tunggu load balancer dibuat.
  5. Klik nama load balancer (http-lb).
  6. Catat alamat IP load balancer untuk tugas berikutnya. Ini disebut sebagai 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 opsi berikut:

  • 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 untuk Cloud CDN. Jika tidak ada nilai yang dipilih secara eksplisit, nilai default akan dikirimkan.

  • FORCE_CACHE_ALL: Menyimpan semua konten dalam cache, mengabaikan perintah private, no-store, atau no-cache di 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, diperlukan waktu beberapa menit untuk menerapkan konfigurasi Anda ke seluruh dunia. Setelah beberapa menit, Anda dapat mulai mengirim 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, pastikan bucket backend berfungsi dengan baik. Akan ada tanda centang hijau di samping bucket backend Anda. Jika Anda melihat hal sebaliknya, coba muat ulang halaman terlebih dahulu. Diperlukan waktu beberapa saat bagi Konsol Google Cloud untuk menunjukkan bahwa backend responsif.

  3. Setelah konsol Google Cloud menunjukkan bahwa bucket backend responsif, 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 Anda akan merender halaman dengan 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

Mengirim 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 berturut-turut, akan ada beberapa cache yang ditemukan.

Entri log berikut menunjukkan cache ditemukan. Anda dapat melihat cache yang ditemukan dengan membuka Logs Explorer di Google Cloud Console 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, pastikan bucket backend berfungsi dengan baik. Akan ada tanda centang hijau di samping bucket backend Anda. Jika Anda melihat hal sebaliknya, coba muat ulang halaman terlebih dahulu. Diperlukan waktu beberapa saat bagi Konsol Google Cloud untuk menunjukkan bahwa backend responsif.

  3. Setelah konsol Google Cloud menunjukkan bahwa bucket backend responsif, 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 Anda akan merender halaman dengan 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

Mengirim permintaan curl:

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

Konten diambil dari Cloud Storage, yang disimpan dalam cache oleh Cloud CDN, lalu divalidasi dan diambil ulang setelah masa berlakunya habis atau dikeluarkan dari cache.

Konten dari cache memiliki header Age di atas nol.

Konten yang perlu dimuat ulang sebelum TTL dapat dibatalkan dan diambil ulang dari Cloud Storage.

Nonaktifkan Cloud CDN

Konsol

Menonaktifkan Cloud CDN untuk bucket backend tunggal

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

    Buka halaman Cloud CDN

  2. Di sisi kanan baris origin, klik Menu lalu pilih Edit.
  3. Kosongkan kotak centang bucket backend yang ingin Anda hentikan penggunaan Cloud CDN.
  4. Klik Perbarui.

Menghapus Cloud CDN untuk semua bucket backend untuk asal

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

    Buka halaman Cloud CDN

  2. Di sisi kanan baris asal, klik Menu lalu pilih Remove.
  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 Cloud CDN lalu mengaktifkannya kembali, sebagian besar atau semua konten yang disimpan dalam cache mungkin masih disimpan dalam cache. Agar konten tidak digunakan oleh cache, Anda harus membatalkan validasi konten tersebut.

Langkah selanjutnya

  • Untuk mempelajari konten apa saja yang di-cache, lihat Ringkasan cache.
  • Untuk menggunakan Cloud CDN di GKE, lihat Fitur masuk.
  • Untuk memeriksa apakah Cloud CDN menayangkan respons dari cache, lihat Melihat log.
  • Untuk menemukan informasi tentang masalah umum dan solusinya, lihat Pemecahan masalah.
  • Untuk mengonfigurasi kebijakan pemfilteran dan kontrol akses bagi konten Anda, lihat Kebijakan keamanan Edge.