1. Pengantar
Endpoint Google API
API Google Cloud menawarkan berbagai jenis endpoint untuk mengakses layanan, yang terutama berbeda dalam cara menangani perutean permintaan, residensi data, dan isolasi regional.
Periksa dokumentasi produk tentang jenis endpoint API.
Berikut perincian endpoint Global, Regional, dan Lokasi:
- Global Endpoints
- Format: {service}.googleapis.com (misalnya, storage.googleapis.com)
- Deskripsi: Endpoint ini menyediakan satu titik akses global ke layanan. Permintaan ini tidak menentukan wilayah di URL.
- Perutean: Permintaan dirutekan oleh Global Google Front End (GFE) dan Global Service Load Balancing, yang biasanya mengarahkan traffic ke region responsif terdekat untuk meminimalkan latensi.
- Penghentian TLS: Terjadi di GFE yang paling dekat dengan klien, yang mungkin berada di luar region Google Cloud tempat data atau resource berada.
- Residensi Data: Tidak ada jaminan yang diberikan untuk data dalam pengiriman. Data dapat melintasi batas regional setelah didekripsi di GFE.
- Isolasi Regional: Terbatas. Meskipun backend sering kali bersifat regional, titik entri dan load balancing bersifat global, yang berarti masalah di satu bagian infrastruktur global berpotensi memengaruhi layanan di region lain.
- Kasus Penggunaan: Akses serbaguna dengan latensi rendah untuk pengguna yang tersebar secara geografis, dan residensi data yang ketat dalam pengiriman bukan menjadi masalah utama.
- Endpoint Regional (REP)
- Format: {service}.{location}.rep.googleapis.com (misalnya, storage.us-east1.rep.googleapis.com)
- Deskripsi: Bucket ini dirancang untuk memberikan jaminan isolasi regional dan residensi data yang kuat. Lokasi (region Google Cloud tertentu) ditentukan sebagai subdomain. Ini adalah standar modern dan menggantikan Endpoint Lokasi.
- Perutean: Menggunakan stack frontend yang sepenuhnya diregionalkan, termasuk Load Balancer Eksternal Regional dan Load Balancing Layanan Regional . Seluruh jalur permintaan, dari DNS hingga backend layanan, tetap berada dalam region yang ditentukan.
- Penghentian TLS: Terjadi dalam region yang ditentukan di Load Balancer Eksternal Regional.
- Residensi Data: Menjamin data tetap berada dalam region yang ditentukan, baik dalam pengiriman maupun dalam penggunaan, sehingga memenuhi persyaratan kepatuhan dan kedaulatan yang ketat.
- Isolasi Regional: Kuat. Kegagalan di infrastruktur frontend satu region tidak memengaruhi region lain.
- Kasus Penggunaan: Aplikasi yang memerlukan residensi data yang ketat, isolasi regional yang tinggi, dan kepatuhan.
Perhatikan bahwa tidak setiap Google API memiliki endpoint regional dan periksa di sini untuk mengetahui semua endpoint regional yang didukung.
Endpoint regional multi-region (mREP) juga merupakan endpoint regional, seperti us (Amerika Serikat), eu (Uni Eropa), dan lain-lain. (misalnya, storage.us.rep.googleapis.com)
- Endpoint Lokasional (LEP)
- Format: {location}-{service}.googleapis.com (misalnya, us-east1-storage.googleapis.com)
- Deskripsi: Endpoint ini adalah pendekatan awal untuk memberikan akses khusus lokasi. Lokasi adalah bagian dari nama host utama. Catatan: Endpoint Lokasi digantikan oleh Endpoint Regional.
- Perutean: Masih mengandalkan Global Google Front Ends.
- Penghentian TLS: Biasanya terjadi di GFE, yang mungkin tidak berada di wilayah yang ditentukan dalam nama host.
- Residensi Data: Tidak dapat menjamin bahwa data tetap berada di dalam region yang ditentukan selama transit untuk traffic dari internet publik.
- Isolasi Regional: Lebih lemah daripada Endpoint Regional karena menggunakan infrastruktur frontend global.
- Kasus Penggunaan: Sebelumnya digunakan untuk beberapa skenario akses regional, tetapi sekarang umumnya tidak disarankan dan lebih memilih Endpoint Regional untuk jaminan yang lebih kuat.
Private Service Connect untuk Google API
Private Service Connect adalah kemampuan jaringan Google Cloud yang memungkinkan konsumen mengakses layanan produsen. Hal ini mencakup kemampuan untuk terhubung ke Google API melalui endpoint pribadi yang dihosting dalam VPC pengguna.
Cara menggunakan endpoint PSC untuk mengakses Google API:
- Endpoint PSC untuk Global Google API
- Endpoint PSC untuk Regional Google API
- Anda menggunakan endpoint PSC untuk Global Google API guna mengakses Locational Google API secara pribadi.
Cara menggunakan backend PSC untuk mengakses Google API:
- Backend PSC untuk Global Google API
- Backend PSC untuk Regional Google API
- Anda menggunakan backend PSC untuk Global Google API guna mengakses Locational Google API secara pribadi.
Cloud Run mengirim traffic ke jaringan VPC
Traffic keluar VPC langsung menghadirkan infrastruktur yang ditingkatkan dan konfigurasi traffic keluar VPC yang lebih sederhana ke Cloud Run, termasuk keuntungan berikut:
- Penyiapan: Layanan dan tugas Cloud Run dapat mengirim traffic ke jaringan VPC tanpa beban dalam mengelola konektor Akses VPC Serverless.
- Biaya: Anda hanya perlu membayar biaya traffic jaringan, dengan penskalaan hingga nol seperti layanan itu sendiri.
- Keamanan: Anda dapat menggunakan tag jaringan langsung pada revisi layanan untuk keamanan jaringan yang lebih terperinci.
- Performa: Latensi yang lebih rendah, throughput yang lebih tinggi.
Anda dapat mengaktifkan layanan, fungsi, tugas, atau kumpulan pekerja Cloud Run untuk mengirim semua traffic ke jaringan VPC menggunakan traffic keluar VPC Langsung.
2. Yang akan Anda pelajari
- Cara membuat endpoint PSC untuk Global Google API.
- Cara membuat endpoint PSC untuk Google API Regional.
- Cara mengubah endpoint API dalam kode Cloud Run dan mengonfigurasi jaringan untuk keluar.
3. Arsitektur Lab Secara Keseluruhan

4. Langkah-langkah persiapan
Peran IAM yang diperlukan untuk mengerjakan lab
Anda mulai dengan menetapkan peran IAM yang diperlukan ke akun GCP di tingkat project.
- Admin Jaringan Compute (
roles/compute.networkAdmin) Peran ini memberi Anda kontrol penuh atas resource jaringan Compute Engine. - Admin Logging (
roles/logging.admin) Peran ini memberi Anda akses ke semua izin logging dan izin dependen. - Admin Penggunaan Layanan (
roles/serviceusage.serviceUsageAdmin) Peran ini memberi Anda kemampuan untuk mengaktifkan, menonaktifkan, dan memeriksa status layanan, memeriksa operasi, serta menggunakan kuota dan penagihan untuk project konsumen. - Administrator DNS (
roles/dns.admin) Peran ini memberi Anda akses baca-tulis ke semua resource Cloud DNS - Admin Cloud Run (
roles/run.admin) Peran ini memberi Anda kontrol penuh atas semua resource Cloud Run. - Admin Penyimpanan (
roles/storage.admin) Peran ini memberi Anda kontrol penuh atas objek dan bucket.
Mengaktifkan API
Di dalam Cloud Shell, pastikan project Anda dikonfigurasi dengan benar dan tetapkan variabel lingkungan Anda.
Di dalam Cloud Shell, lakukan hal berikut:
gcloud auth login
gcloud config set project <your project id>
export project_id=<your project id>
export region=<your region>
export zone=$region-a
echo $project_id
echo $region
Aktifkan semua Google API yang diperlukan di project. Di dalam Cloud Shell, lakukan hal berikut:
gcloud services enable \
artifactregistry.googleapis.com \
cloudbuild.googleapis.com \
run.googleapis.com \
compute.googleapis.com \
dns.googleapis.com \
servicedirectory.googleapis.com \
networkconnectivity.googleapis.com
Buat VPC
Di project, buat jaringan VPC dengan mode subnet kustom. Lakukan hal berikut di dalam Cloud Shell:
gcloud compute networks create mynet \
--subnet-mode=custom
Membuat subnet
Di dalam Cloud Shell, lakukan hal berikut untuk membuat subnet IPV4:
gcloud compute networks subnets create mysubnet \
--network=mynet \
--range=10.0.0.0/24 \
--region=$region
Membuat Cloud NAT dan Cloud Router
Cloud NAT digunakan untuk mengizinkan tugas Cloud Run terhubung ke situs eksternal.
gcloud compute routers create $region-cr \
--network=mynet \
--region=$region
gcloud compute routers nats create $region-nat \
--router=$region-cr \
--region=$region \
--nat-all-subnet-ip-ranges \
--auto-allocate-nat-external-ips
5. Membuat endpoint PSC untuk Cloud Storage
Anda akan membuat dua endpoint PSC untuk Cloud Storage, satu untuk cakupan Global dan yang lainnya untuk cakupan Regional.
Membuat endpoint PSC dengan Cakupan Global
Dengan Private Service Connect, Anda dapat membuat endpoint pribadi Cakupan Global menggunakan alamat IP internal global dalam jaringan VPC Anda.
Anda harus mengalokasikan alamat IP unik yang tidak ditentukan di VPC Anda. Lihat dokumen tentang persyaratan alamat IP ini.
Di dalam Cloud Shell, lakukan hal berikut untuk membuat alamat IP. Ubah –addresses=<pscendpointip> untuk menggunakan alamat IP yang telah Anda alokasikan.
gcloud compute addresses create pscglobalip \
--global \
--purpose=PRIVATE_SERVICE_CONNECT \
--addresses=<pscendpointip> \
--network=mynet
pscendpointip=$(gcloud compute addresses list --filter=name:pscglobalip --format="value(address)")
echo $pscendpointip
Buat aturan penerusan untuk menghubungkan endpoint ke Google API dan layanan Google.
gcloud compute forwarding-rules create pscendpoint \
--global \
--network=mynet \
--address=pscglobalip \
--target-google-apis-bundle=all-apis
Memeriksa p.googleapis.com di Cloud DNS
Saat Anda membuat endpoint, konfigurasi DNS berikut akan otomatis dibuat:
- Zona DNS pribadi Direktori Layanan dibuat untuk p.googleapis.com.
- Data DNS dibuat di p.googleapis.com untuk beberapa Google API dan layanan yang umum digunakan yang tersedia menggunakan Private Service Connect dan memiliki nama DNS default yang diakhiri dengan googleapis.com.
Endpoint Global terdaftar dengan Direktori Layanan. Anda akan menggunakan storage-[nama endpoint PSC].p.googleapis.com untuk mengakses Cloud Storage. Berikut adalah dokumentasi produk untuk mengetahui detailnya.
Periksa apakah zona p.googleaps.com sudah dibuat dengan menjalankan perintah.
gcloud dns managed-zones list
Jika ingin menggunakan nama DNS default, storage.googleapis.com, Anda akan membuat zona pribadi storage.googleapis.com di Cloud DNS dan menambahkan data apex yang mengarah ke endpoint PSC alamat IP cakupan global.
Membuat endpoint PSC Cakupan Regional untuk Cloud Storage
Anda akan memerlukan satu IP dari subnet VPC. Jalankan perintah di bawah, IP dari subnetwork akan dialokasikan untuk endpoint PSC.
gcloud network-connectivity regional-endpoints create psc-regional-endpoint \
--region=$region \
--network=projects/$project_id/global/networks/mynet \
--subnetwork=projects/$project_id/regions/$region/subnetworks/mysubnet \
--target-google-api=storage.us-central1.rep.googleapis.com
Dapatkan alamat IP endpoint yang dibuat dari langkah di atas.
regionalip=$(gcloud network-connectivity regional-endpoints describe psc-regional-endpoint --region=$region --format="value(address)")
echo $regionalip
Anda akan menggunakan storage.us-central1.rep.googleapis.com untuk mengakses Cloud Storage. Anda perlu membuat zona pribadi untuk storage.us-central1.rep.googleapis.com dan data apex alamat IP yang baru saja Anda buat untuk endpoint regional di Cloud DNS.
Membuat zona pribadi untuk Endpoint Regional Cloud Storage
Anda akan menggunakan storage.[nama region].rep.googleapis.com untuk mengakses endpoint regional Cloud Storage.
Anda harus membuat zona pribadi di Cloud DNS dan menambahkan data apex yang mengarah ke alamat IP endpoint regional Cloud Storage.
Pada perintah di bawah, us-central1 adalah contoh region. Anda harus membuat zona dengan nama wilayah Anda.
gcloud dns managed-zones create psc-regional-endpoint-zone \
--description="" \
--dns-name="storage.us-central1.rep.googleapis.com" \
--visibility="private" \
--networks="mynet"
gcloud dns record-sets create storage.us-central1.rep.googleapis.com. \
--rrdatas=$regionalip \
--ttl=300 \
--type=A \
--zone=psc-regional-endpoint-zone
6. Mengonfigurasi tugas Cloud Run dengan endpoint PSC Cakupan Global
Mendapatkan kode
Pertama-tama, Anda akan mempelajari aplikasi Node.js terlebih dahulu untuk mengambil screenshot halaman web dan menyimpannya ke Cloud Storage. Kemudian, Anda membuat image container untuk aplikasi dan menjalankannya sebagai tugas di Cloud Run.
Dari Cloud Shell, jalankan perintah berikut untuk meng-clone kode aplikasi dari repo ini:
git clone https://github.com/GoogleCloudPlatform/jobs-demos.git
Buka direktori yang berisi aplikasi:
cd jobs-demos/screenshot
Anda akan melihat tata letak file ini:
|
├── Dockerfile
├── README.md
├── screenshot.js
├── package.json
Berikut deskripsi singkat dari setiap file:
- screenshot.js berisi kode Node.js untuk aplikasi. Aplikasi mengambil screenshot halaman web dan menyimpannya di Cloud Storage.
- package.json menentukan dependensi library.
- Dockerfile menentukan image container.
Buka kode screenshot.js, Anda akan mengubah apiEndpoint ke endpoint global PSC. Cari kode dan ganti const storage = new Storage(); dengan kode berikut:
const storage = new Storage(
{
apiEndpoint:'https://storage-pscendpoint.p.googleapis.com.',
useAuthWithCustomEndpoint: true
}
);
Men-deploy tugas
Sebelum membuat tugas, Anda perlu membuat akun layanan yang akan digunakan untuk menjalankan tugas tersebut.
gcloud iam service-accounts create screenshot-sa --display-name="Screenshot app service account"
Beri peran storage.admin ke akun layanan agar dapat digunakan untuk membuat bucket dan objek.
gcloud projects add-iam-policy-binding $project_id \
--role roles/storage.admin \
--member serviceAccount:screenshot-sa@$project_id.iam.gserviceaccount.com
Berikan peran Storage Object User, peran Logs Writer, dan peran Artifact Registry Repository Administrator ke akun layanan Compute default.
project_number=$(gcloud projects describe $project_id --format="value(projectNumber)")
gcloud projects add-iam-policy-binding $project_id \
--role roles/storage.objectUser \
--member serviceAccount:$project_number-compute@developer.gserviceaccount.com
gcloud projects add-iam-policy-binding $project_id \
--role roles/logging.logWriter \
--member serviceAccount:$project_number-compute@developer.gserviceaccount.com
gcloud projects add-iam-policy-binding $project_id \
--role roles/artifactregistry.repoAdmin \
--member serviceAccount:$project_number-compute@developer.gserviceaccount.com
Anda akan mengaktifkan traffic keluar VPC Langsung untuk tugas Cloud Run guna mengirim semua traffic ke jaringan VPC.
Di dalam Cloud Shell, lakukan hal berikut:
gcloud run jobs deploy screenshot-1 \
--source=. \
--args="https://example.com" \
--args="https://cloud.google.com" \
--tasks=2 \
--task-timeout=5m \
--region=$region \
--set-env-vars=BUCKET_NAME=screenshot-$project_id-$RANDOM \
--service-account=screenshot-sa@$project_id.iam.gserviceaccount.com \
--vpc-egress=all-traffic \
--network=mynet \
--subnet=mysubnet
Menjalankan tugas
Di dalam Cloud Shell, lakukan hal berikut:
gcloud run jobs execute screenshot-1 --region=$region
Periksa status tugas dan log. Buka konsol Cloud Run dan cari tugas. Anda mengklik tugas dan memeriksa Histori log. Anda akan melihat hasil eksekusi tugas yang serupa seperti di bawah.

Untuk log eksekusi tugas mendetail, klik Lihat log di tugas. Anda akan melihat log tugas yang serupa seperti di bawah ini.

Bucket baru telah dibuat. Anda dapat membuka konsol Cloud Storage, dan memeriksa bucket baru yang dibuat. Perhatikan bahwa saat Anda menggunakan Endpoint Global Cloud Storage, bucket tersebut adalah bucket multi-region. Anda dapat memeriksa gambar yang diupload ke bucket.
Hasil pengujian menunjukkan bahwa Cloud Run mengakses Endpoint Global Cloud Storage secara pribadi yang Anda ubah di tugas Cloud Run:
apiEndpoint:‘https://storage-pscendpoint.p.googleapis.com.'
7. Mengonfigurasi tugas Cloud Run dengan endpoint PSC Cakupan Regional
Dalam kode, Anda akan mengubah apiEndpoint ke endpoint PSC dengan cakupan regional.
Telusuri kode dan ganti const storage = new Storage(); dengan kode berikut ( kami menggunakan us-central1 sebagai contoh. Ubah ke wilayah Anda ) :
const storage = new Storage(
{
apiEndpoint:'https://storage.us-central1.rep.googleapis.com.',
useAuthWithCustomEndpoint: true
}
);
Men-deploy tugas
Pastikan Anda berada di direktori yang berisi aplikasi (jobs-demos/screenshot).
pwd
Anda mengaktifkan traffic keluar VPC Langsung untuk tugas guna mengirim semua traffic ke jaringan VPC.
Di dalam Cloud Shell, lakukan hal berikut:
gcloud run jobs deploy screenshot-2 \
--source=. \
--args="https://example.com" \
--args="https://cloud.google.com" \
--tasks=2 \
--task-timeout=5m \
--region=$region \
--set-env-vars=BUCKET_NAME=screenshot-$PROJECT_ID-$RANDOM \
--service-account=screenshot-sa@$project_id.iam.gserviceaccount.com \
--vpc-egress=all-traffic \
--network=mynet \
--subnet=mysubnet
Menjalankan tugas
Di dalam Cloud Shell, lakukan hal berikut:
gcloud run jobs execute screenshot-2 --region=$region
Periksa status tugas dan log. Buka konsol Cloud Run dan cari tugas. Anda dapat mengklik tugas dan memeriksa Histori tugas. Anda akan melihat hasil eksekusi tugas yang serupa seperti di bawah.

Untuk log eksekusi tugas mendetail, klik Lihat log. Anda akan melihat log tugas yang serupa seperti di bawah ini.

Bucket baru telah dibuat. Anda dapat membuka konsol Cloud Storage, dan memeriksa bucket baru yang dibuat. Perhatikan bahwa saat Anda menggunakan Endpoint Regional Cloud Storage, bucket adalah bucket satu region. Anda dapat memeriksa gambar yang diupload ke bucket.
Hasil pengujian menunjukkan bahwa Cloud Run mengakses Endpoint Regional Cloud Storage secara pribadi yang Anda ubah dalam tugas Cloud Run:
apiEndpoint:‘https://storage.us-central1.rep.googleapis.com.'
8. Pembersihan
Membersihkan tugas Cloud Run
gcloud run jobs delete screenshot-1 \
--region=$region --quiet
gcloud run jobs delete screenshot-2 \
--region=$region --quiet
gcloud iam service-accounts delete screenshot-sa@$project_id.iam.gserviceaccount.com --quiet
Membersihkan endpoint PSC
gcloud compute forwarding-rules delete pscendpoint \
--global --quiet
gcloud network-connectivity regional-endpoints delete psc-regional-endpoint \
--region=$region --quiet
gcloud compute addresses delete pscglobalip \
--global --quiet
Membersihkan Cloud NAT, Cloud Router, dan VPC
gcloud compute routers nats delete $region-nat \
--router=$region-cr \
--region=$region --quiet
gcloud compute routers delete $region-cr \
--region=$region --quiet
gcloud compute networks subnets delete mysubnet \
--region=$region --quiet
gcloud compute networks delete mynet --quiet
9. Selamat
Anda telah berhasil menguji akses pribadi Cloud Run ke Cloud Storage melalui Endpoint Global dan Endpoint Regional.