Menyiapkan Cloud Endpoints OpenAPI untuk lingkungan standar dengan ESPv2

Halaman ini menunjukkan cara menyiapkan Cloud Endpoints untuk App Engine. Endpoint menggunakan Extensible Service Proxy V2 (ESPv2) sebagai API gateway. Untuk menyediakan pengelolaan API untuk App Engine, Anda men-deploy penampung ESPv2 bawaan ke Cloud Run. Kemudian, Anda mengamankan aplikasi dengan menggunakan Identity Aware Proxy (IAP) sehingga hanya ESPv2 yang dapat memanggilnya.

Dengan penyiapan ini, ESPv2 mencegat semua permintaan ke aplikasi Anda dan melakukan pemeriksaan yang diperlukan (seperti autentikasi) sebelum memanggil aplikasi. Saat aplikasi merespons, ESPv2 mengumpulkan dan melaporkan telemetri, seperti yang ditunjukkan pada gambar di bawah. Anda dapat melihat metrik untuk aplikasi di halaman Endpoints > Services di konsol Google Cloud.

Arsitektur endpoint

Untuk ringkasan Cloud Endpoints, lihat Tentang Endpoints dan Arsitektur Endpoints.

Bermigrasi ke ESPv2

Rilis Cloud Endpoints sebelumnya mendukung penggunaan Extensible Service Proxy (ESP) dengan Cloud Run. Jika Anda memiliki API yang ada dan ingin memigrasikannya ke ESPv2, lihat Bermigrasi ke Extensible Service Proxy V2 untuk mengetahui informasi selengkapnya.

Daftar Tugas

Gunakan daftar tugas berikut saat Anda mengerjakan tutorial ini. Semua tugas diperlukan agar Endpoints dapat mengelola aplikasi Anda.

  1. Buat project Google Cloud, dan jika Anda belum men-deploy App Engine Anda sendiri, deploy aplikasi backend contoh. Lihat Sebelum memulai.
  2. Konfigurasikan IAP untuk mengamankan aplikasi Anda. Lihat Mengonfigurasi IAP.
  3. Menyiapkan nama host Cloud Run untuk layanan ESPv2. Lihat Menyimpan nama host Cloud Run.
  4. Buat dokumen OpenAPI yang menjelaskan API Anda, dan konfigurasikan rute ke App Engine Anda. Lihat Mengonfigurasi Endpoint.
  5. Deploy dokumen OpenAPI untuk membuat layanan terkelola. Lihat Men-deploy konfigurasi Endpoint.
  6. Build image Docker ESPv2 baru dengan konfigurasi layanan Endpoints Anda. Lihat Mem-build image ESPv2 baru.
  7. Deploy container ESPv2 ke Cloud Run. Kemudian, berikan izin Identity and Access Management (IAM) kepada ESPv2 untuk memanggil layanan Anda. Lihat Men-deploy penampung ESPv2.
  8. Panggil aplikasi. Lihat Mengirim permintaan ke API.
  9. Melacak aktivitas ke aplikasi Anda. Lihat Melacak aktivitas API.
  10. Hindari tagihan pada akun Google Cloud Anda. Lihat Pembersihan.

Biaya

Dalam dokumen ini, Anda menggunakan komponen Google Cloud yang dapat ditagih berikut:

Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda, gunakan kalkulator harga. Pengguna baru Google Cloud mungkin memenuhi syarat untuk mendapatkan uji coba gratis.

Setelah menyelesaikan tugas yang dijelaskan dalam dokumen ini, Anda dapat menghindari penagihan berkelanjutan dengan menghapus resource yang Anda buat. Untuk mengetahui informasi selengkapnya, lihat Pembersihan.

Sebelum memulai

Untuk menyiapkannya:

  1. Di konsol Google Cloud, buka halaman Manage resources dan buat project.

    Buka halaman Kelola resource

  2. Pastikan penagihan diaktifkan untuk project Anda.

    Pelajari cara mengaktifkan penagihan

  3. Catat project ID karena diperlukan nanti. Di bagian lain halaman ini, project ID ini disebut sebagai ESP_PROJECT_ID.

  4. Catat nomor project karena diperlukan nanti. Di bagian lain halaman ini, nomor project ini disebut sebagai ESP_PROJECT_NUMBER.

  5. Download dan instal Google Cloud CLI.

    Mendownload gcloud CLI

  6. Jika Anda belum men-deploy App Engine backend Anda sendiri, ikuti langkah-langkah di Panduan Memulai App Engine. Catat region dan project ID tempat aplikasi Anda di-deploy. Di bagian lain halaman ini, project ID ini disebut sebagai APP_PROJECT_ID.

Mengonfigurasi IAP untuk mengamankan aplikasi

Untuk mengamankan aplikasi App Engine, Anda harus menggunakan Identity Aware Proxy (IAP) untuk memastikan bahwa permintaan diautentikasi.

Ikuti langkah-langkah untuk Mengaktifkan IAP, dan pastikan Anda dapat login ke aplikasi.

Selain itu, saat mengonfigurasi klien OAuth, catat client_id OAuth, yang disebut sebagai IAP_CLIENT_ID dalam tutorial ini.

Menyimpan nama host Cloud Run

Anda harus mencadangkan nama host Cloud Run untuk layanan ESPv2 agar dapat mengonfigurasi dokumen OpenAPI atau konfigurasi layanan gRPC. Untuk memesan nama host, Anda akan men-deploy container contoh ke Cloud Run. Kemudian, Anda akan men-deploy penampung ESPv2 ke layanan Cloud Run yang sama.

  1. Pastikan gcloud CLI diberi otorisasi untuk mengakses data dan layanan Anda.
    1. Log in.
      gcloud auth login
    2. Di tab browser baru yang terbuka, pilih akun yang memiliki peran Editor atau Pemilik di project Google Cloud yang Anda buat untuk men-deploy ESPv2 ke Cloud Run.
  2. Tetapkan region.
    gcloud config set run/region us-central1
  3. Deploy image contoh gcr.io/cloudrun/hello ke Cloud Run. Ganti CLOUD_RUN_SERVICE_NAME dengan nama yang ingin Anda gunakan untuk layanan.
    gcloud run deploy CLOUD_RUN_SERVICE_NAME \
        --image="gcr.io/cloudrun/hello" \
        --allow-unauthenticated \
        --platform managed \
        --project=ESP_PROJECT_ID
    

    Setelah berhasil diselesaikan, perintah akan menampilkan pesan yang mirip dengan berikut:

    Service [CLOUD_RUN_SERVICE_NAME] revision [CLOUD_RUN_SERVICE_NAME-REVISION_NUM] has been deployed and is serving traffic at CLOUD_RUN_SERVICE_URL

    Misalnya, jika Anda menetapkan CLOUD_RUN_SERVICE_NAME ke gateway:

    Service [gateway] revision [gateway-00001] has been deployed and is serving traffic at https://gateway-12345-uc.a.run.app

    Dalam contoh ini, https://gateway-12345-uc.a.run.app adalah CLOUD_RUN_SERVICE_URL dan gateway-12345-uc.a.run.app adalah CLOUD_RUN_HOSTNAME.

  4. Catat CLOUD_RUN_SERVICE_NAME dan CLOUD_RUN_HOSTNAME. Kemudian, Anda akan men-deploy ESPv2 ke layanan Cloud Run CLOUD_RUN_SERVICE_NAME. Anda menentukan CLOUD_RUN_HOSTNAME di kolom host pada dokumen OpenAPI.

Mengonfigurasi Endpoint

Anda harus memiliki dokumen OpenAPI berdasarkan Spesifikasi OpenAPI v2.0 yang mendeskripsikan platform aplikasi Anda dan persyaratan autentikasi apa pun. Anda juga perlu menambahkan kolom khusus Google yang berisi URL untuk setiap aplikasi sehingga ESPv2 memiliki informasi yang diperlukan untuk memanggil aplikasi. Jika Anda baru menggunakan OpenAPI, lihat ringkasan OpenAPI untuk mengetahui informasi selengkapnya

  1. Buat file teks bernama openapi-appengine.yaml. (Untuk kemudahan, halaman ini merujuk ke dokumen OpenAPI dengan nama file tersebut, tetapi Anda dapat memberi nama lain jika mau.)
  2. Aplikasi backend App Engine Anda ditentukan di bagian atas file openapi-appengine.yaml, dalam definisi x-google-backend. Contoh:
      swagger: '2.0'
      info:
        title: Cloud Endpoints + App Engine
        description: Sample API on Cloud Endpoints with an App Engine backend
        version: 1.0.0
      host: CLOUD_RUN_HOSTNAME
      schemes:
        - https
      produces:
        - application/json
      x-google-backend:
        address: https://APP_PROJECT_ID.REGION.r.appspot.com
        jwt_audience: IAP_CLIENT_ID
        protocol: h2
      paths:
        /:
          get:
            summary: Greet a user
            operationId: hello
            responses:
              '200':
                description: A successful response
                schema:
                  type: string
    Indentasi penting untuk format yaml. Misalnya, kolom host harus berada di tingkat yang sama dengan info.
  3. Di kolom address di bagian x-google-backend, ganti APP_PROJECT_ID dengan ID project Google Cloud Anda, REGION dengan region GCP tempat Anda men-deploy App Engine, dan IAP_CLIENT_ID dengan Client ID OAuth yang Anda buat saat menyiapkan IAP.
  4. Di kolom host, tentukan CLOUD_RUN_HOSTNAME, bagian nama host URL yang dicadangkan di atas dalam Mencadangkan nama host Cloud Run. Jangan sertakan ID protokol, https://. Contoh:

    swagger: '2.0'
      info:
        title: Cloud Endpoints + App Engine
        description: Sample API on Cloud Endpoints with an App Engine backend
        version: 1.0.0
      host: gateway-12345-uc.a.run.app
  5. Perhatikan nilai properti title dalam file openapi-appengine.yaml:

    title: Cloud Endpoints + App Engine

    Nilai properti title menjadi nama layanan Endpoints setelah Anda men-deploy konfigurasi.

  6. Simpan dokumen OpenAPI Anda.

Untuk mengetahui informasi tentang kolom dalam dokumen OpenAPI yang diperlukan Endpoints, lihat Mengonfigurasi Endpoints.

Men-deploy konfigurasi Endpoint

Untuk men-deploy konfigurasi Endpoint, Anda menggunakan perintah gcloud endpoints services deploy. Perintah ini menggunakan Pengelolaan Layanan untuk membuat layanan terkelola.

Untuk men-deploy konfigurasi Endpoint:

  1. Pastikan Anda berada di direktori yang berisi dokumen OpenAPI.
  2. Upload konfigurasi dan buat layanan terkelola.

    gcloud endpoints services deploy openapi-appengine.yaml \
      --project ESP_PROJECT_ID

    Tindakan ini akan membuat layanan Endpoints baru dengan nama yang Anda tentukan di kolom host file openapi-appengine.yaml. Layanan dikonfigurasi sesuai dengan dokumen OpenAPI Anda.

    Saat membuat dan mengonfigurasi layanan, Manajemen Layanan akan menampilkan informasi ke terminal. Setelah deployment selesai, pesan yang mirip dengan berikut akan ditampilkan:

    Service Configuration [CONFIG_ID] uploaded for service [CLOUD_RUN_HOSTNAME]

    CONFIG_ID adalah ID konfigurasi layanan Endpoints unik yang dibuat oleh deployment. Contoh:

    Service Configuration [2019-02-01r0] uploaded for service [gateway-12345-uc.a.run.app]

    ID konfigurasi layanan terdiri dari stempel tanggal yang diikuti dengan nomor revisi. Jika Anda men-deploy openapi-appengine.yaml lagi pada hari yang sama, nomor revisi akan bertambah di ID konfigurasi layanan. Anda dapat melihat konfigurasi layanan dan histori deployment di halaman Endpoints > Services di Konsol Google Cloud.

    Jika Anda menerima pesan error, lihat Memecahkan masalah deployment konfigurasi Endpoints.

Memeriksa layanan yang diperlukan

Setidaknya, Endpoint dan ESP mewajibkan layanan Google berikut diaktifkan:
Nama Judul
servicemanagement.googleapis.com Service Management API
servicecontrol.googleapis.com Service Control API

Dalam sebagian besar kasus, perintah gcloud endpoints services deploy mengaktifkan layanan yang diperlukan ini. Namun, perintah gcloud berhasil diselesaikan, tetapi tidak mengaktifkan layanan yang diperlukan dalam situasi berikut:

  • Jika Anda menggunakan aplikasi pihak ketiga seperti Terraform, dan Anda tidak menyertakan layanan ini.

  • Anda men-deploy konfigurasi Endpoints ke project Google Cloud yang ada, tempat layanan ini dinonaktifkan secara eksplisit.

Gunakan perintah berikut untuk mengonfirmasi bahwa layanan yang diperlukan telah diaktifkan:

gcloud services list

Jika Anda tidak melihat layanan yang diperlukan tercantum, aktifkan layanan tersebut:

gcloud services enable servicemanagement.googleapis.com
gcloud services enable servicecontrol.googleapis.com

Aktifkan juga layanan Endpoints Anda:

gcloud services enable ENDPOINTS_SERVICE_NAME

Untuk menentukan ENDPOINTS_SERVICE_NAME, Anda dapat:

  • Setelah men-deploy konfigurasi Endpoints, buka halaman Endpoints di Konsol Cloud. Daftar kemungkinan ENDPOINTS_SERVICE_NAME ditampilkan di kolom Nama layanan.

  • Untuk OpenAPI, ENDPOINTS_SERVICE_NAME adalah yang Anda tentukan di kolom host pada spesifikasi OpenAPI. Untuk gRPC, ENDPOINTS_SERVICE_NAME adalah yang Anda tentukan di kolom name pada konfigurasi Endpoint gRPC.

Untuk informasi selengkapnya tentang perintah gcloud, lihat layanan gcloud.

Mem-build image ESPv2 baru

Build konfigurasi layanan Endpoints ke dalam image Docker ESPv2 baru. Nanti, Anda akan men-deploy image ini ke layanan Cloud Run yang direservasi.

Untuk mem-build konfigurasi layanan ke dalam image docker ESPv2 baru:

  1. Download skrip ini ke komputer lokal tempat gcloud CLI diinstal.

  2. Jalankan skrip dengan perintah berikut:

    chmod +x gcloud_build_image
    
    ./gcloud_build_image -s CLOUD_RUN_HOSTNAME \
        -c CONFIG_ID -p ESP_PROJECT_ID

    Untuk CLOUD_RUN_HOSTNAME, tentukan nama host URL yang Anda pesan di atas di Memesan nama host Cloud Run. Jangan sertakan ID protokol, https://.

    Contoh:

    chmod +x gcloud_build_image
    
    ./gcloud_build_image -s gateway-12345-uc.a.run.app \
        -c 2019-02-01r0 -p your-project-id
  3. Skrip menggunakan perintah gcloud untuk mendownload konfigurasi layanan, mem-build konfigurasi layanan menjadi image ESPv2 baru, dan mengupload image baru ke registry penampung project Anda. Skrip secara otomatis menggunakan rilis ESPv2 terbaru, yang ditunjukkan dengan ESP_VERSION dalam nama image output. Gambar output diupload ke:

    gcr.io/ESP_PROJECT_ID/endpoints-runtime-serverless:ESP_VERSION-CLOUD_RUN_HOSTNAME-CONFIG_ID

    Contoh:

    gcr.io/your-project-id/endpoints-runtime-serverless:2.14.0-gateway-12345-uc.a.run.app-2019-02-01r0"

Men-deploy container ESPv2

  1. Deploy layanan Cloud Run ESPv2 dengan image baru yang Anda build di atas. Ganti CLOUD_RUN_SERVICE_NAME dengan nama layanan Cloud Run yang sama dengan yang Anda gunakan saat awalnya memesan nama host di atas dalam Memesan nama host Cloud Run:

    gcloud run deploy CLOUD_RUN_SERVICE_NAME \
      --image="gcr.io/ESP_PROJECT_ID/endpoints-runtime-serverless:ESP_VERSION-CLOUD_RUN_HOSTNAME-CONFIG_ID" \
      --allow-unauthenticated \
      --platform managed \
      --project=ESP_PROJECT_ID
  2. Jika ingin mengonfigurasi Endpoints untuk menggunakan opsi startup ESPv2 tambahan, seperti mengaktifkan CORS, Anda dapat meneruskan argumen dalam variabel lingkungan ESPv2_ARGS:

    gcloud run deploy CLOUD_RUN_SERVICE_NAME \
      --image="gcr.io/ESP_PROJECT_ID/endpoints-runtime-serverless:ESP_VERSION-CLOUD_RUN_HOSTNAME-CONFIG_ID" \
      --set-env-vars=ESPv2_ARGS=--cors_preset=basic \
      --allow-unauthenticated \
      --platform managed \
      --project ESP_PROJECT_ID

    Untuk informasi selengkapnya dan contoh tentang cara menetapkan variabel lingkungan ESPv2_ARGS, termasuk daftar opsi yang tersedia dan informasi tentang cara menentukan beberapa opsi, lihat Flag Extensible Service Proxy V2.

  3. Berikan izin ESPv2 untuk memanggil aplikasi Anda yang diamankan IAP. Jalankan perintah berikut untuk setiap layanan. Dalam perintah berikut:
    • Ganti APP_PROJECT_ID dengan nama project ID App Engine Anda.
    • Ganti ESP_PROJECT_NUMBER dengan nomor project yang Anda buat untuk ESPv2. Salah satu cara untuk menemukannya adalah dengan membuka IAM console dan menemukan akun layanan default Compute Engine, yang merupakan akun layanan yang digunakan dalam flag `member`.
      gcloud projects add-iam-policy-binding APP_PROJECT_ID \
          --member "serviceAccount:ESP_PROJECT_NUMBER-compute@" \
          --role "roles/iap.httpsResourceAccessor"
        

Untuk mengetahui informasi selengkapnya, lihat Mengelola Akses menggunakan IAM.

Mengirim permintaan ke API

Bagian ini menunjukkan cara mengirim permintaan ke API Anda.

  1. Buat variabel lingkungan untuk nama layanan Endpoints Anda. Ini adalah nama yang Anda tentukan di kolom host dalam dokumen OpenAPI Anda. Misalnya:
    • Linux atau macOS:

      export ENDPOINTS_HOST=gateway-12345-uc.a.run.app

    • Windows PowerShell:

      $Env: ENDPOINTS_HOST="gateway-12345-uc.a.run.app"

Linux atau Mac OS

Gunakan curl untuk mengirim permintaan HTTP menggunakan variabel lingkungan ENDPOINTS_HOST yang Anda tetapkan di langkah sebelumnya.

curl --request GET \
   --header "content-type:application/json" \
   "https://${ENDPOINTS_HOST}/"

PowerShell

Gunakan Invoke-WebRequest untuk mengirim permintaan HTTP menggunakan variabel lingkungan ENDPOINTS_HOST yang Anda tetapkan pada langkah sebelumnya.

(Invoke-WebRequest -Method GET `
    -Headers @{"content-type"="application/json"} `
    -URI "https://$Env:ENDPOINTS_HOST/").Content

Pada contoh sebelumnya, dua baris pertama diakhiri dengan tanda petik terbalik. Saat Anda menempelkan contoh ke PowerShell, pastikan tidak ada spasi setelah tanda petik terbalik. Untuk informasi tentang opsi yang digunakan dalam contoh permintaan, lihat Invoke-WebRequest dalam dokumentasi Microsoft.

Aplikasi pihak ketiga

Anda dapat menggunakan aplikasi pihak ketiga seperti permintaan ekstensi browser Chrome Postman.

  • Pilih GET sebagai kata kerja HTTP.
  • Untuk header, pilih kunci content-type dan nilai application/json.
  • Gunakan URL sebenarnya, bukan variabel lingkungan, misalnya:

    https://gateway-12345-uc.a.run.app/
    

Jika Anda tidak mendapatkan respons yang berhasil, lihat Memecahkan Masalah Error Respons.

Anda baru saja men-deploy dan menguji API di Endpoint.

Melacak aktivitas API

  1. Lihat grafik aktivitas untuk API Anda di halaman Endpoints > Service di Konsol Google Cloud.

    Melihat grafik aktivitas Endpoint

    Mungkin perlu waktu beberapa saat agar permintaan ditampilkan dalam grafik.

  2. Lihat log permintaan untuk API Anda di halaman Logs Explorer.

    Melihat log permintaan Endpoints

Membuat portal developer untuk API

Anda dapat menggunakan Cloud Endpoints Portal untuk membuat portal developer, situs yang dapat Anda gunakan untuk berinteraksi dengan API contoh. Untuk mempelajari lebih lanjut, lihat Ringkasan Cloud Endpoints Portal.

Pembersihan

Agar tidak menimbulkan biaya pada akun Google Cloud Anda untuk resource yang digunakan pada halaman ini, ikuti langkah-langkah berikut.

Lihat Menghapus API dan instance API untuk mengetahui informasi tentang cara menghentikan layanan yang digunakan oleh tutorial ini.

Langkah selanjutnya