Memigrasikan domain kustom App Engine ke Cloud Load Balancing

ID region

REGION_ID adalah kode singkat yang ditetapkan Google berdasarkan region yang Anda pilih saat membuat aplikasi. Kode ini tidak sesuai dengan negara atau provinsi, meskipun beberapa ID region mungkin tampak mirip dengan kode negara dan provinsi yang umum digunakan. Untuk aplikasi yang dibuat setelah Februari 2020, REGION_ID.r disertakan dalam URL App Engine. Untuk aplikasi lama yang dibuat sebelum tanggal tersebut, ID region bersifat opsional dalam URL.

Pelajari ID region lebih lanjut.

Panduan ini membahas cara menyiapkan endpoint publik baru untuk aplikasi App Engine Anda menggunakan Cloud Load Balancing.

Dengan Cloud Load Balancing, Anda dapat mengonfigurasi endpoint domain kustom sebagai layanan frontend, dan mengonfigurasi aplikasi App Engine sebagai layanan backend menggunakan grup endpoint jaringan (NEG) serverless. Traffic ke endpoint layanan frontend Cloud Load Balancing dirutekan dengan cara yang sama seperti sebelumnya, termasuk semua aturan perutean yang Anda tentukan di file dispatch.yaml aplikasi Anda.

Diagram berikut menjelaskan perubahan pada aplikasi Anda:

Mengambil domain kustom App Engine dan mengalihkan permintaan masuk ke layanan frontend Cloud Load Balancing yang mendistribusikan permintaan ke layanan App Engine backend.

Dengan bermigrasi ke Cloud Load Balancing, Anda akan mendapatkan fleksibilitas yang jauh lebih tinggi dalam menangani traffic saat mencapai domain Anda, seperti menyalurkan konten statis dari Cloud Storage, atau menambahkan layanan yang berjalan di platform komputasi lain seperti Cloud Run dan Google Kubernetes Engine.

Anda juga mendapatkan akses ke kemampuan utama Google Cloud yang tidak tersedia di App Engine, termasuk:

  • Google Cloud Armor, untuk keamanan yang lebih baik dengan perlindungan DDoS lanjutan, kontrol akses berbasis IP dan posisi geografis, aturan firewall aplikasi web, serta masih banyak lagi
  • Cloud CDN, untuk penayangan konten yang di-cache
  • Kebijakan SSL, untuk mengelola fitur SSL dan versi TLS yang akan diterima aplikasi Anda

Panduan ini membahas petunjuk penyiapan untuk mengalihkan permintaan masuk dari layanan App Engine Anda dengan domain kustom ke layanan frontend Cloud Load Balancing:

  1. Memastikan Anda memiliki izin yang diperlukan
  2. Membuat sertifikat yang dikelola Google
  3. Mengonfigurasi Cloud Load Balancing
  4. Menguji load balancer
  5. Menghubungkan domain ke load balancer
  6. Menghapus pemetaan domain kustom App Engine
  7. Menyiapkan kontrol traffic masuk untuk hanya mengizinkan akses melalui Cloud Load Balancing

Sebelum memulai

Dapatkan aplikasi App Engine dengan domain kustom yang dikonfigurasi di setelan App Engine.

Konfigurasikan izin

Untuk mengikuti panduan ini, Anda perlu membuat sertifikat yang dikelola Google, NEG tanpa server, dan load balancer HTTP(S) eksternal dalam sebuah project. Anda harus menjadi pemilik atau editor project, atau memiliki peran IAM berikut:

Tugas Peran yang Diperlukan
Membuat sertifikat SSL yang dikelola Google menggunakan Pengelola Sertifikat Pemilik Pengelola Sertifikat atau Editor Pengelola Sertifikat, dan Admin Load Balancer Compute
Memperbarui data DNS untuk domain kustom Administrator Cloud DNS jika menggunakan Cloud DNS sebagai solusi DNS Anda.

Jika menggunakan penyedia DNS lain, Anda memerlukan izin untuk menambahkan dan memperbarui data DNS untuk domain kustom.
Membuat komponen jaringan dan load balancer Compute Network Admin
Membuat dan mengubah NEG Compute Instance Admin
Membuat dan mengubah sertifikat SSL Compute Security Admin
Menghapus domain kustom di setelan App Engine Peran App Engine Admin atau peran yang berisi izin appengine.applications.update.

Membuat sertifikat SSL yang dikelola Google

Sertifikat SSL yang dikelola Google (juga dikenal sebagai sertifikat TLS dalam dokumentasi) memungkinkan Google Cloud mendapatkan, mengelola, dan memperpanjang sertifikat secara otomatis. Untuk bermigrasi ke frontend Cloud Load Balancing tanpa menyebabkan periode nonaktif untuk layanan App Engine yang ada, Anda harus menggunakan Pengelola Sertifikat untuk membuat otorisasi DNS dan sertifikat yang dikelola Google.

Perlu diperhatikan bahwa dokumentasi Cloud Load Balancing memiliki petunjuk yang serupa dengan membuat sertifikat SSL yang dikelola Google, tetapi petunjuknya menggunakan otorisasi load balancer, yang memerlukan periode nonaktif untuk layanan App Engine Anda yang bisa berlangsung hingga beberapa jam. Untuk informasi lebih lanjut, lihat Otorisasi domain untuk sertifikat yang dikelola Google.

Untuk menghindari periode nonaktif aplikasi, ikuti langkah-langkah di halaman ini.

Buat otorisasi DNS

  1. Buat otorisasi DNS di Pengelola Sertifikat dengan menjalankan perintah berikut:

    gcloud certificate-manager dns-authorizations create AUTHORIZATION_NAME \
        --domain="DOMAIN_NAME"
    gcloud certificate-manager dns-authorizations describe AUTHORIZATION_NAME
    

    Ganti kode berikut:

    • AUTHORIZATION_NAME adalah nama unik yang menjelaskan otorisasi DNS ini.
    • DOMAIN_NAME adalah nama domain kustom App Engine tempat Anda membuat otorisasi DNS ini.
  2. Perhatikan CNAME yang ditampilkan oleh perintah gcloud. Anda harus menggunakannya untuk memperbarui data DNS Anda dengan langkah-langkah berikut.

Tambahkan data CNAME ke konfigurasi DNS Anda

Bergantung pada apakah Anda menggunakan Cloud DNS atau solusi DNS pihak ketiga lainnya, ikuti petunjuk yang sesuai untuk kasus penggunaan Anda:

Cloud DNS

Saat Anda membuat otorisasi DNS, perintah gcloud akan menampilkan data CNAME yang sesuai. Anda harus menambahkan data CNAME ini ke konfigurasi DNS di zona DNS domain target sebagai berikut:

  1. Mulai transaksi data DNS:

    gcloud dns record-sets transaction start --zone="DNS_ZONE_NAME"
    

    Ganti DNS_ZONE_NAME dengan nama zona DNS publik. Jika Anda menggunakan Google Cloud untuk mengelola domain dan menerima traffic ke domain tersebut, berarti Anda telah membuat zona DNS publik. Untuk melihat zona DNS publik, lihat Mencantumkan dan menjelaskan zona terkelola.

  2. Tambahkan data CNAME ke zona DNS target:

    gcloud dns record-sets transaction add CNAME_RECORD \
      --name="_acme-challenge.DOMAIN_NAME." \
      --ttl="30" \
      --type="CNAME" \
      --zone="DNS_ZONE_NAME"
    

    Ganti kode berikut:

    • CNAME_RECORD adalah nilai lengkap data CNAME yang ditampilkan oleh perintah gcloud yang membuat otorisasi DNS yang sesuai.
    • DOMAIN_NAME adalah nama domain kustom App Engine. Anda harus menyertakan titik di akhir setelah nama domain target.
    • DNS_ZONE_NAME adalah nama zona DNS target dari sebelumnya.
  3. Jalankan transaksi data DNS untuk menyimpan perubahan:

    gcloud dns record-sets transaction execute --zone="DNS_ZONE_NAME"
    

    Ganti DNS_ZONE_NAME dengan nama zona DNS target dari yang sebelumnya.

Solusi DNS lainnya

Tambahkan data CNAME ke konfigurasi DNS untuk domain Anda, menggunakan nama (host) (_acme-challenge.DOMAIN_NAME ) dan isian data dari bagian sebelumnya. Lihat dokumentasi untuk solusi DNS pihak ketiga Anda.

Buat sertifikat yang dikelola Google yang merujuk pada otorisasi DNS

Untuk membuat sertifikat yang dikelola Google yang merujuk ke otorisasi DNS yang Anda buat pada langkah sebelumnya, jalankan perintah berikut:

  1. Buat sertifikat yang dikelola Google:

    gcloud certificate-manager certificates create CERTIFICATE_NAME \
    --domains=DOMAIN_NAME --dns-authorizations=AUTHORIZATION_NAME
    

    Ganti kode berikut:

    • CERTIFICATE_NAME adalah nama unik yang mendeskripsikan sertifikat.
    • DOMAIN_NAME adalah nama domain kustom App Engine.
    • AUTHORIZATION_NAME adalah nama otorisasi DNS yang dibuat sebelumnya.
  2. Pastikan bahwa sertifikat aktif.

    Gunakan perintah berikut untuk memverifikasi bahwa sertifikat aktif sebelum men-deploy-nya ke load balancer Anda. Harus diperhatikan bahwa diperlukan waktu hingga beberapa jam agar status sertifikat berubah menjadi ACTIVE.

    gcloud certificate-manager certificates describe CERTIFICATE_NAME
    

    Ganti CERTIFICATE_NAME dengan nama sertifikat yang dikelola Google yang dibuat sebelumnya.

    Alat gcloud menampilkan output yang mirip dengan berikut ini:

    certificatePem: myPEM
    createTime: '2021-10-20T12:19:53.370778666Z'
    expireTime: '2022-05-07T05:03:49Z'
    managed:
      authorizationAttemptInfo:
      - domain: example.com
        state: AUTHORIZED
      dnsAuthorizations:
      - projects/my-project/locations/global/dnsAuthorizations/myAuth
      domains:
      - example.com
      state: ACTIVE
    name: projects/myProject/locations/global/certificates/myCert
    scope: myScope
    sanDnsnames:
    - example.com
    updateTime: '2021-10-20T12:19:55.083385630Z'
    

    Jika alat gcloud menampilkan output yang berbeda, lihat Pemecahan Masalah Pengelola Sertifikat.

Buat peta sertifikat

  1. Buat peta sertifikat:

    gcloud certificate-manager maps create CERTIFICATE_MAP_NAME
    

    Ganti CERTIFICATE_MAP_NAME dengan nama unik yang menjelaskan peta sertifikat.

  2. Buat entri peta sertifikat, lalu kaitkan dengan sertifikat dan peta sertifikat Anda dari sesi sebelumnya:

    gcloud certificate-manager maps entries create CERTIFICATE_MAP_ENTRY_NAME \
        --map=CERTIFICATE_MAP_NAME \
        --certificates=CERTIFICATE_NAME \
        --set-primary
    

    Ganti kode berikut:

    • CERTIFICATE_MAP_ENTRY_NAME adalah nama unik yang menjelaskan entri peta sertifikat ini.
    • CERTIFICATE_MAP_NAME adalah nama peta sertifikat tempat entri peta sertifikat ini dilampirkan.
    • CERTIFICATE_NAME adalah nama sertifikat yang ingin Anda kaitkan dengan entri peta sertifikat ini.

    Anda dapat menambahkan flag --set-primary untuk memastikan bahwa sertifikat digunakan sebagai sertifikat default jika nama domain tidak ditentukan.

  3. Pastikan peta sertifikat aktif.

    Gunakan perintah berikut untuk memverifikasi bahwa entri peta sertifikat aktif sebelum melampirkan peta sertifikat yang sesuai ke proxy target:

    gcloud certificate-manager maps entries describe CERTIFICATE_MAP_ENTRY_NAME \
        --map=CERTIFICATE_MAP_NAME
    

    Ganti kode berikut:

    • CERTIFICATE_MAP_ENTRY_NAME adalah nama entri peta sertifikat dari sebelumnya.
    • CERTIFICATE_MAP_NAME adalah nama peta sertifikat yang dilampirkan oleh entri peta sertifikat ini.

    Alat gcloud menampilkan output yang mirip dengan berikut ini:

    createTime: '2021-09-06T10:01:56.229472109Z'
    name: projects/my-project/locations/global/certificateMaps/myCertMap/certificateMapEntries/myCertMapEntry
    state: ACTIVE
    updateTime: '2021-09-06T10:01:58.277031787Z'
    

Untuk informasi selengkapnya tentang penggunaan Pengelola Sertifikat, lihat Cara kerja Pengelola Sertifikat.

Mengonfigurasi Cloud Load Balancing

Setelah memiliki sertifikat yang dikelola Google, Anda dapat mengganti domain kustom App Engine dengan layanan frontend Cloud Load Balancing.

Diagram berikut menunjukkan load balancer HTTPS dengan satu layanan backend dan NEG tanpa server.

Mendistribusikan traffic ke aplikasi App Engine

Aturan penerusan mengarahkan permintaan masuk dari alamat IP eksternal dan permintaan langsung ke proxy HTTPS target. Load balancer HTTPS menggunakan peta URL untuk mengarahkan permintaan ke layanan backend, yang berisi NEG tanpa server untuk layanan App Engine.

Mencadangkan alamat IP eksternal

Sebelum mengonfigurasi Cloud Load Balancing, Anda perlu menyiapkan alamat IP eksternal statis global bagi pengguna untuk menjangkau load balancer Anda.

Konsol

  1. Buka halaman External IP addresses di konsol Google Cloud.

    Buka External IP addresses

  2. Klik Reserve static address untuk memesan alamat IPv4.

  3. Tetapkan Name untuk alamat statis, misalnya, appengine-external-ip.

  4. Tetapkan paket Jaringan ke Premium.

  5. Tetapkan IP version ke IPv4.

  6. Tetapkan Type ke Global.

  7. Klik Reserve.

gcloud

  1. Buat reservasi alamat IP eksternal:

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

    EXTERNAL_IP adalah nama alamat yang akan dibuat.

  2. Perhatikan alamat IPv4 yang dicadangkan:

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

Mengonfigurasi layanan backend untuk App Engine

Grup endpoint jaringan (NEG) digunakan untuk menentukan grup endpoint backend untuk load balancer. Untuk menentukan backend yang mengarah ke layanan App Engine, konfigurasikan NEG tanpa server, lalu konfigurasikan layanan backend, aturan perutean, dan layanan frontend di Cloud Load Balancing.

  1. Buat NEG tanpa server untuk aplikasi App Engine Anda:

    gcloud compute network-endpoint-groups create APP_ENGINE_NEG \
    --network-endpoint-type=serverless \
    --app-engine-app \
    --region=APP_ENGINE_REGION
    

    Ganti kode berikut:

    • APP_ENGINE_NEG adalah nama grup endpoint jaringan.
    • APP_ENGINE_REGION adalah region yang ditetapkan di App Engine.

    Anda dapat menambahkan flag --app-engine-app di atas untuk menggunakan perutean default, bukan mengarahkan ke layanan App Engine tertentu. Menggunakan pemilihan rute default berarti permintaan akan dikirim ke layanan default (https://PROJECT_ID.REGION_ID.r.appspot.com), dan mengikuti semua aturan perutean yang Anda tentukan dalam file dispatch.yaml. Perilaku ini sama dengan domain kustom yang dikonfigurasi menggunakan App Engine.

  2. Buat layanan backend:

    gcloud compute backend-services create APP_ENGINE_BACKEND \
      --global \
      --load-balancing-scheme=EXTERNAL_MANAGED
    

    Ganti APP_ENGINE_BACKEND dengan nama layanan backend yang akan dibuat.

  3. Tambahkan NEG tanpa server ke layanan backend App Engine

    gcloud compute backend-services add-backend APP_ENGINE_BACKEND \
    --global --network-endpoint-group=APP_ENGINE_NEG \
    --network-endpoint-group-region=APP_ENGINE_REGION
    

    Ganti kode berikut:

    • APP_ENGINE_BACKEND adalah nama layanan backend dari sebelumnya.
    • APP_ENGINE_NEG adalah nama grup endpoint jaringan.
    • APP_ENGINE_REGION adalah region yang ditetapkan di App Engine.
  4. Buat peta URL untuk mengarahkan permintaan masuk ke layanan backend:

    gcloud compute url-maps create URL_MAP_NAME \
          --default-service APP_ENGINE_BACKEND
    

    Ganti kode berikut:

    • URL_MAP_NAME adalah nama unik untuk resource peta URL yang menentukan pemetaan URL ke layanan backend.
    • APP_ENGINE_BACKEND adalah nama layanan backend dari sebelumnya.
  5. Buat proxy HTTPS target untuk mengarahkan permintaan ke peta URL:

    gcloud compute target-https-proxies create TARGET_HTTPS_PROXY_NAME \
          --certificate-map=CERTIFICATE_MAP_NAME \
          --url-map=URL_MAP_NAME
    

    Ganti kode berikut:

    • TARGET_HTTPS_PROXY_NAME adalah nama unik yang Anda pilih untuk mendeskripsikan proxy HTTPS.
    • CERTIFICATE_MAP_NAME adalah nama peta sertifikat yang merujuk pada entri peta sertifikat dan sertifikat yang terkait.
    • URL_MAP_NAME adalah nama peta URL dari pembahasan sebelumnya.
  6. Buat aturan penerusan untuk mengarahkan permintaan masuk ke proxy:

    gcloud compute forwarding-rules create HTTPS_FORWARDING_RULE_NAME \
          --load-balancing-scheme=EXTERNAL_MANAGED \
          --network-tier=PREMIUM \
          --address=EXTERNAL_IP \
          --target-https-proxy=TARGET_HTTPS_PROXY_NAME \
          --global \
          --ports=443
    

    Ganti kode berikut:

    • HTTPS_FORWARDING_RULE_NAME adalah nama unik yang menjelaskan aturan penerusan untuk mengarahkan traffic jaringan ke proxy HTTPS.
    • TARGET_HTTPS_PROXY_NAME adalah nama proxy HTTPS sebelumnya.
    • EXTERNAL_IP adalah nama alamat IPv4 yang dibuat sebelumnya.

Menguji load balancer

Setelah mengonfigurasi load balancer, Anda dapat mulai mengirimkan traffic ke alamat IP load balancer untuk pengujian sebelum memigrasikan domain.

  1. Buka halaman Load balancing di konsol Google Cloud.
    Buka Load balancing
  2. Klik load balancer yang baru saja dibuat.
  3. Catat alamat IP load balancer internal.
  4. Untuk load balancer HTTPS, Anda dapat menguji load balancer Anda menggunakan browser web dengan membuka https://IP_ADDRESS. Ganti IP_ADDRESS dengan alamat IP load balancer, misalnya 30.90.80.100.

    • Jika tidak berhasil dan Anda menggunakan sertifikat yang dikelola Google, pastikan bahwa sertifikat Anda merupakan ACTIVE , dan bahwapeta sertifikat merupakan ACTIVE.
    • Jika Anda menggunakan sertifikat yang ditandatangani sendiri untuk pengujian, browser akan menampilkan peringatan. Anda harus secara eksplisit memerintahkan browser untuk menerima sertifikat yang ditandatangani sendiri. Klik peringatan untuk melihat halaman sebenarnya.

    Untuk opsi konfigurasi lainnya, lihat Menyiapkan load balancing HTTP(S) eksternal global dengan platform Serverless.

Menghubungkan domain ke load balancer

Setelah load balancer dibuat, catat alamat IP yang terkait dengan load balancer, misalnya, 30.90.80.100. Untuk mengarahkan domain ke load balancer, buat data A menggunakan layanan pendaftaran domain. Jika Anda menambahkan beberapa domain ke sertifikat SSL, Anda harus menambahkan data A untuk setiap domain, yang semuanya mengarah ke alamat IP load balancer. Misalnya, untuk membuat data A bagi www.example.com dan example.com, gunakan string berikut:

NAME                  TYPE     DATA
www                   A        30.90.80.100
@                     A        30.90.80.100

Jika Anda menggunakan Cloud DNS sebagai penyedia DNS, lihat Menambahkan, mengubah, dan menghapus data.

Menghapus pemetaan domain kustom App Engine

Di konsol Google Cloud:

  1. Buka tab Custom Domains di halaman Settings App Engine.

    Buka Custom Domains

  2. Pilih nama domain kustom, lalu klik Delete.

Atau, Anda dapat menggunakan perintah gcloud atau Admin API untuk menghapus domain kustom.

Menyiapkan kontrol traffic masuk untuk hanya mengizinkan akses melalui Cloud Load Balancing

Setelah menguji load balancer, sebaiknya update aplikasi App Engine Anda agar hanya menerima traffic dari Cloud Load Balancing. Untuk mempelajari cara mengonfigurasi kontrol traffic masuk internal-and-cloud-load-balancing, lihat Setelan Traffic Masuk.