Menyiapkan Cloud Endpoints OpenAPI untuk fungsi Cloud Run dengan ESPv2
Halaman ini menunjukkan cara menyiapkan Cloud Endpoints di fungsi Cloud Run. Endpoints menggunakan Extensible Service Proxy V2 (ESPv2) sebagai gateway API. Untuk menyediakan pengelolaan API bagi fungsi Cloud Run, Anda men-deploy container ESPv2 yang telah dibuat sebelumnya ke Cloud Run. Kemudian, amankan fungsi Anda menggunakan IAM fungsi Cloud Run agar ESPv2 dapat memanggilnya.
Dengan penyiapan ini, ESPv2 mencegat semua permintaan ke fungsi Anda dan melakukan pemeriksaan yang diperlukan (seperti autentikasi) sebelum memanggil fungsi. Saat fungsi merespons, ESPv2 mengumpulkan dan melaporkan telemetri, seperti yang ditunjukkan pada gambar di bawah. Anda dapat melihat metrik untuk fungsi di halaman Endpoints > Services di konsol Google Cloud .
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 Functions. 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 untuk menyelesaikan tutorial ini.
- Buat project Google Cloud , dan jika Anda belum men-deploy fungsi Cloud Run Anda sendiri, deploy fungsi backend contoh. Lihat Sebelum memulai.
- Cadangkan nama host Cloud Run untuk layanan ESPv2. Lihat Mencadangkan nama host Cloud Run.
- Buat dokumen OpenAPI yang mendeskripsikan API Anda, dan konfigurasi rute ke fungsi Cloud Run Anda. Lihat Mengonfigurasi Endpoint.
- Deploy dokumen OpenAPI untuk membuat layanan terkelola. Lihat Men-deploy konfigurasi Endpoints.
- Buat image Docker ESPv2 baru dengan konfigurasi layanan Endpoints Anda. Lihat Membangun image ESPv2 baru.
- Deploy container ESPv2 ke Cloud Run. Kemudian, berikan izin Identity and Access Management (IAM) kepada ESPv2 untuk memanggil layanan Anda. Lihat Men-deploy container ESPv2.
- Panggil fungsi. Lihat Mengirim permintaan ke API.
- Melacak aktivitas ke fungsi Anda. Lihat Melacak aktivitas API.
- Hindari menimbulkan tagihan ke akun Google Cloud Anda. Lihat Pembersihan.
Biaya
Dalam dokumen ini, Anda akan menggunakan komponen Google Cloudyang dapat ditagih berikut:
Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda,
gunakan kalkulator harga.
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
Sebelum menggunakan Endpoints untuk fungsi Cloud Run, sebaiknya:
Buat project Google Cloud baru untuk digunakan saat Anda men-deploy container ESPv2 ke Cloud Run.
Buat project baru atau pilih project yang sudah ada untuk fungsi Cloud Run Anda.
Untuk menyiapkan:
Di konsol Google Cloud , buka halaman Manage resources dan buat project.
Pastikan penagihan diaktifkan untuk project Anda.
Catat project ID karena akan diperlukan nanti. Di bagian selanjutnya dari halaman ini, project ID ini disebut sebagai ESP_PROJECT_ID.
Catat nomor project karena akan diperlukan nanti. Di bagian lain halaman ini, nomor project ini disebut sebagai ESP_PROJECT_NUMBER.
Download dan instal Google Cloud CLI.
Jika Anda belum men-deploy fungsi Cloud Run backend sendiri, ikuti langkah-langkah dalam Mulai Cepat: Menggunakan Google Cloud CLI untuk memilih atau membuat project Google Cloud dan men-deploy fungsi contoh. Catat region dan project ID tempat fungsi Anda di-deploy. Di bagian selanjutnya dari halaman ini, project ID ini disebut sebagai FUNCTIONS_PROJECT_ID.
Mencadangkan nama host Cloud Run
Anda harus mencadangkan nama host Cloud Run untuk layanan ESPv2 agar dapat mengonfigurasi dokumen OpenAPI atau konfigurasi layanan gRPC. Untuk mencadangkan nama host, Anda akan men-deploy container contoh ke Cloud Run. Selanjutnya, Anda akan men-deploy container ESPv2 ke layanan Cloud Run yang sama.
-
Pastikan gcloud CLI diizinkan untuk mengakses data dan layanan Anda.
- Log in.
gcloud auth login
- Di tab browser baru yang terbuka, pilih akun yang memiliki peran Editor atau Pemilik di project yang Anda buat untuk men-deploy ESPv2 ke Cloud Run. Google Cloud
- Log in.
-
Tetapkan region.
gcloud config set run/region us-central1
-
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 ini:
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 dangateway-12345-uc.a.run.app
adalah CLOUD_RUN_HOSTNAME. - Catat CLOUD_RUN_SERVICE_NAME dan CLOUD_RUN_HOSTNAME.
Selanjutnya, 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 menjelaskan permukaan fungsi Anda dan persyaratan autentikasi apa pun. Anda juga perlu menambahkan kolom khusus Google yang berisi URL untuk setiap fungsi sehingga ESPv2 memiliki informasi yang diperlukan untuk memanggil fungsi. Jika Anda baru mengenal OpenAPI, lihat Ringkasan OpenAPI untuk mengetahui informasi selengkapnya
-
Buat file teks bernama
openapi-functions.yaml
. (Untuk memudahkan, halaman ini merujuk ke dokumen OpenAPI dengan nama file tersebut, tetapi Anda dapat menamainya dengan nama lain jika mau.) -
Setiap fungsi Anda harus dicantumkan di bagian
paths
dalam fileopenapi-functions.yaml
. Contoh: Indentasi penting untuk format yaml. Misalnya, kolomswagger: '2.0' info: title: Cloud Endpoints + GCF description: Sample API on Cloud Endpoints with a Google Cloud Functions backend version: 1.0.0 host: HOST schemes: - https produces: - application/json paths: /hello: get: summary: Greet a user operationId: hello x-google-backend: address: https://REGION-FUNCTIONS_PROJECT_ID.cloudfunctions.net/FUNCTIONS_NAME protocol: h2 responses: '200': description: A successful response schema: type: string
host
harus berada di tingkat yang sama denganinfo
. -
Di kolom
address
di bagianx-google-backend
, ganti REGION dengan Google Cloud region tempat fungsi Anda berada, FUNCTIONS_PROJECT_ID dengan Google Cloud project ID Anda dan FUNCTIONS_NAME dengan nama fungsi Anda. Contoh: Jika Anda ingin mengamankan fungsi Cloud Run dengan hanya mengizinkan ESPv2 memanggilnya, pastikan kolomx-google-backend: address: https://us-central1-myproject.cloudfunctions.net/helloGET
address
menyertakan nama fungsi jikajwt_audience
tidak ditentukan. Contoh: Jikax-google-backend: address: https://REGION-FUNCTIONS_PROJECT_ID.cloudfunctions.net/FUNCTIONS_NAME path_translation: CONSTANT_ADDRESS
jwt_audience
ditentukan, nilainya juga harus menyertakan nama fungsi. Contoh: ESPv2 membuat token ID saat memanggil fungsi Cloud Run untuk autentikasi. Token ID harus memilikix-google-backend: address: https://REGION-FUNCTIONS_PROJECT_ID.cloudfunctions.net jwt_audience: https://REGION-FUNCTIONS_PROJECT_ID.cloudfunctions.net/FUNCTIONS_NAME path_translation: APPEND_PATH_TO_ADDRESS
audience
yang tepat yang menentukan host fungsi dan nama fungsi. ESPv2 menetapkanaudience
untuk token ID menggunakan nilai di kolomjwt_audience
jika ditentukan, atau menggunakan kolomaddress
. Di kolom
host
, tentukan CLOUD_RUN_HOSTNAME, bagian nama host dari URL yang dicadangkan di atas dalam Mencadangkan nama host Cloud Run. Jangan sertakan ID protokol,https://
. Contoh:swagger: '2.0' info: title: Cloud Endpoints + GCF description: Sample API on Cloud Endpoints with a Google Cloud Functions backend version: 1.0.0 host: gateway-12345-uc.a.run.app
Perhatikan nilai properti
title
dalam fileopenapi-functions.yaml
:title: Cloud Endpoints + GCF
Nilai properti
title
menjadi nama layanan Endpoints setelah Anda men-deploy konfigurasi.- 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 Endpoints, Anda menggunakan perintah
gcloud endpoints services deploy
. Perintah ini menggunakan
Service Management untuk membuat
layanan terkelola.
Untuk men-deploy konfigurasi Endpoints:
- Pastikan Anda berada di direktori yang berisi dokumen OpenAPI.
Upload konfigurasi dan buat layanan terkelola.
gcloud endpoints services deploy openapi-functions.yaml \ --project ESP_PROJECT_ID
Tindakan ini akan membuat layanan Endpoints baru dengan nama yang Anda tentukan di kolom
host
pada fileopenapi-functions.yaml
. Layanan dikonfigurasi sesuai dengan dokumen OpenAPI Anda.Saat membuat dan mengonfigurasi layanan, Service Management 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 diikuti dengan nomor revisi. Jika Anda men-deploy
openapi-functions.yaml
lagi pada hari yang sama, nomor revisi akan bertambah dalam 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
Minimal, Endpoints dan ESP memerlukan 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
akan mengaktifkan layanan yang diperlukan ini. Namun, perintah gcloud
berhasil diselesaikan, tetapi
tidak mengaktifkan layanan yang diperlukan dalam keadaan berikut:
Jika Anda menggunakan aplikasi pihak ketiga seperti Terraform, dan Anda tidak menyertakan layanan ini.
Anda men-deploy konfigurasi Endpoints ke projectGoogle Cloud yang sudah ada tempat layanan ini dinonaktifkan secara eksplisit.
Gunakan perintah berikut untuk mengonfirmasi bahwa layanan yang diperlukan sudah 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 ENDPOINTS_SERVICE_NAME yang mungkin ditampilkan di kolom Nama layanan.
Untuk OpenAPI, ENDPOINTS_SERVICE_NAME adalah yang Anda tentukan di kolom
host
spesifikasi OpenAPI. Untuk gRPC, ENDPOINTS_SERVICE_NAME adalah yang Anda tentukan di kolomname
konfigurasi gRPC Endpoints.
Untuk mengetahui informasi selengkapnya tentang perintah gcloud
, lihat
layanan gcloud
.
Membangun image ESPv2 baru
Buat konfigurasi layanan Endpoints menjadi image Docker ESPv2 baru. Anda akan men-deploy image ini ke layanan Cloud Run yang dicadangkan nanti.
Untuk membuat konfigurasi layanan menjadi image Docker ESPv2 baru:
Download skrip ini ke komputer lokal Anda tempat gcloud CLI diinstal.
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 dalam 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
-
Skrip menggunakan perintah
gcloud
untuk mendownload konfigurasi layanan, membangun konfigurasi layanan menjadi image ESPv2 baru, dan mengupload image baru ke container registry project Anda. Skrip otomatis menggunakan rilis ESPv2 terbaru, yang ditunjukkan oleh ESP_VERSION dalam nama gambar 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
Deploy layanan Cloud Run ESPv2 dengan image baru yang Anda buat di atas. Ganti CLOUD_RUN_SERVICE_NAME dengan nama layanan Cloud Run yang sama dengan yang Anda gunakan saat pertama kali mencadangkan nama host di atas dalam Mencadangkan 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
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 mengetahui informasi dan contoh selengkapnya tentang cara menyetel variabel lingkungan
ESPv2_ARGS
, termasuk daftar opsi yang tersedia dan informasi tentang cara menentukan beberapa opsi, lihat Flag Beta Extensible Service Proxy V2.Memberikan izin ESPv2 untuk memanggil Service Management dan Service Control.
- Di konsol Google Cloud , buka halaman Cloud Run.
- Anda dapat melihat instance Cloud Run yang di-deploy dan akun layanan yang terkait dengannya.
- Berikan izin yang diperlukan ke akun layanan:
Beri ESPv2 izin untuk memanggil fungsi Anda. Jalankan perintah berikut untuk setiap fungsi. Dalam perintah berikut:
- Ganti FUNCTION_NAME dengan nama
fungsi Anda dan FUNCTION_REGION dengan region tempat fungsi
di-deploy. Jika Anda menggunakan fungsi yang dibuat di
Panduan memulai: Menggunakan Google Cloud CLI,
maka gunakan
helloGET
sebagai nama. - Ganti ESP_PROJECT_NUMBER dengan
nomor project yang Anda buat untuk
ESPv2. Salah satu cara untuk menemukannya adalah dengan membuka halaman
IAM di konsol Google Cloud dan menemukan
Akun layanan komputasi default, yang merupakan akun layanan yang digunakan dalam
flag
member
.
gcloud functions add-iam-policy-binding FUNCTION_NAME \ --region FUNCTION_REGION \ --member "serviceAccount:ESP_PROJECT_NUMBER-compute@developer.gserviceaccount.com" \ --role "roles/cloudfunctions.invoker" \ --project FUNCTIONS_PROJECT_ID
- Ganti FUNCTION_NAME dengan nama
fungsi Anda dan FUNCTION_REGION dengan region tempat fungsi
di-deploy. Jika Anda menggunakan fungsi yang dibuat di
Panduan memulai: Menggunakan Google Cloud CLI,
maka gunakan
gcloud projects add-iam-policy-binding PROJECT_NAME \ --member "serviceAccount:SERVICE_ACCOUNT" \ --role roles/servicemanagement.serviceController
Untuk mengetahui informasi selengkapnya, lihat Mengelola Akses melalui IAM.
Mengirim permintaan ke API
Bagian ini menunjukkan cara mengirim permintaan ke API Anda.
- Buat variabel lingkungan untuk nama layanan Endpoints Anda. Ini adalah nama yang Anda tentukan di kolom
host
pada 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 pada langkah sebelumnya.
curl --request GET \ --header "content-type:application/json" \ "https://${ENDPOINTS_HOST}/hello"
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/hello").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 mengetahui informasi tentang opsi yang digunakan dalam contoh permintaan, lihat Invoke-WebRequest dalam dokumentasi Microsoft.
Aplikasi pihak ketiga
Anda dapat menggunakan aplikasi pihak ketiga seperti ekstensi browser Chrome Postman untuk membuat permintaan.
- Pilih
GET
sebagai kata kerja HTTP. - Untuk header, pilih kunci
content-type
dan nilaiapplication/json
. Gunakan URL sebenarnya, bukan variabel lingkungan, misalnya:
https://gateway-12345-uc.a.run.app/hello
Jika Anda tidak mendapatkan respons yang berhasil, lihat Memecahkan Masalah Error Respons.
Anda baru saja men-deploy dan menguji API di Endpoints.
Melacak aktivitas API
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.
Lihat log permintaan untuk API Anda di halaman Logs Explorer. Melihat log permintaan Endpoints
Pembersihan
Agar akun Google Cloud Anda tidak dikenai biaya 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.