1. Giriş
Google API uç noktası
Google Cloud API'leri, hizmetlere erişmek için farklı türlerde uç noktalar sunar. Bu uç noktalar, öncelikle istek yönlendirme, veri yerleşimi ve bölgesel izolasyonu ele alma şekillerinde farklılık gösterir.
Lütfen API uç nokta türleri ile ilgili ürün belgelerini inceleyin.
Küresel, bölgesel ve konuma dayalı uç noktaların dökümü aşağıda verilmiştir:
- Global Endpoints
- Biçim: {service}.googleapis.com (ör. storage.googleapis.com)
- Açıklama: Bu uç noktalar, bir hizmete tek ve global bir erişim noktası sağlar. URL'de bölge belirtilmez.
- Yönlendirme: İstekler, Global Google Front End'ler (GFE) ve Global Hizmet Yükü Dengeleme tarafından yönlendirilir. Bu işlemde genellikle gecikmeyi en aza indirmek için trafik en yakın sağlıklı bölgeye yönlendirilir.
- TLS Sonlandırma: İstemciye en yakın GFE'de gerçekleşir. Bu GFE, verilerin veya kaynakların bulunduğu Google Cloud bölgesinin dışında olabilir.
- Veri Yerleşimi: Geçiş halindeki veriler için garanti verilmez. Veriler, GFE'de şifreleri çözüldükten sonra bölgesel sınırları aşabilir.
- Bölgesel İzolasyon: Sınırlı. Arka uçlar genellikle bölgesel olsa da giriş noktası ve yük dengeleme küreseldir. Bu nedenle, küresel altyapının bir bölümündeki sorunlar diğer bölgelerdeki hizmetleri etkileyebilir.
- Kullanım alanı: Coğrafi olarak dağılmış kullanıcılar için düşük gecikme süresinin önemli olduğu ve geçiş halindeki verilerin katı bir şekilde yerel olarak tutulmasının öncelikli bir endişe olmadığı genel amaçlı erişim.
- Bölgesel Endpoints (REP)
- Biçim: {service}.{location}.rep.googleapis.com (ör. storage.us-east1.rep.googleapis.com)
- Açıklama: Bu bölgeler, güçlü bölgesel izolasyon ve veri yerleşimi garantisi sağlamak için tasarlanmıştır. Konum (belirli bir Google Cloud bölgesi) alt alan adı olarak belirtilir. Bu, modern standarttır ve Konum Uç Noktalarının yerini almaktadır.
- Yönlendirme: Bölgesel harici yük dengeleyiciler ve bölgesel hizmet yük dengeleme dahil olmak üzere tamamen bölgeselleştirilmiş bir ön uç yığını kullanır . DNS'den hizmet arka ucuna kadar olan istek yolunun tamamı belirtilen bölgede kalır.
- TLS Sonlandırma: Bölgesel harici yük dengeleyicilerde belirtilen bölge içinde gerçekleşir.
- Veri Yerleşimi: Hem aktarım sırasında hem de kullanımda verilerin belirlenen bölgede kalmasını garanti ederek katı uygunluk ve egemenlik şartlarını karşılar.
- Bölgesel İzolasyon: Güçlü. Bir bölgenin ön uç altyapısındaki hatalar diğer bölgeleri etkilemez.
- Kullanım alanı: Katı veri yerleşimi, yüksek bölgesel izolasyon ve uyumluluk gerektiren uygulamalar.
Her Google API'sinin bölgesel bir uç noktası olmadığını lütfen unutmayın. Desteklenen tüm bölgesel uç noktalar için burayı kontrol edin.
Çok bölgeli bölgesel uç noktalar (mREP), us (ABD) ve eu (Avrupa Birliği) gibi bölgesel uç noktalardır (ör. storage.us.rep.googleapis.com).
- Konumsal uç noktalar (LEP)
- Biçim: {konum}-{hizmet}.googleapis.com (ör. us-east1-storage.googleapis.com)
- Açıklama: Bu uç noktalar, konuma özel erişim sağlamak için kullanılan önceki bir yaklaşımdı. Konum, ana ana makine adının bir parçasıdır. Not: Konuma dayalı uç noktaların yerini bölgesel uç noktalar alıyor.
- Yönlendirme: Küresel Google ön uçları kullanılmaya devam eder.
- TLS Sonlandırma: Genellikle GFE'de gerçekleşir. Bu, ana makine adında belirtilen bölgede olmayabilir.
- Veri Yerleşimi: Garanti edilemez: Genel internetten gelen trafik için geçiş sırasında verilerin belirtilen bölgede kalacağı garanti edilemez.
- Bölgesel İzolasyon: Küresel ön uç altyapısı kullandıkları için bölgesel uç noktalardan daha zayıftır.
- Kullanım alanı: Geçmişte bazı bölgesel erişim senaryolarında kullanılırdı ancak artık daha güçlü garantiler sunan bölgesel uç noktalar tercih edilmektedir.
Google API'si için Private Service Connect
Private Service Connect, tüketicilerin üretici hizmetlerine erişmesine olanak tanıyan bir Google Cloud ağ özelliği. Bu kapsamda, kullanıcının VPC'sinde barındırılan özel bir uç nokta üzerinden Google API'lerine bağlanma özelliği de yer alır.
Google API'sine erişmek için PSC uç noktasını kullanma:
- Global Google API için PSC uç noktası
- Bölgesel Google API'si için PSC uç noktası
- Konuma Dayalı Google API'ye özel olarak erişmek için Global Google API'ye yönelik PSC uç noktasını kullanırsınız.
Google API'sine erişmek için PSC arka ucunu kullanma:
- Global Google API için PSC arka ucu
- Bölgesel Google API için PSC arka ucu
- Konuma Dayalı Google API'ye özel olarak erişmek için Global Google API'de PSC arka ucunu kullanırsınız.
Cloud Run, VPC ağına trafik gönderiyor
Doğrudan VPC çıkışı, Cloud Run'a gelişmiş altyapı ve daha basit VPC çıkışı yapılandırması sunar. Bu özellik aşağıdaki avantajları içerir:
- Kurulum: Cloud Run hizmetleri ve işleri, Sunucusuz VPC Erişimi bağlayıcısını yönetme ek yükü olmadan bir VPC ağına trafik gönderebilir.
- Maliyet: Yalnızca ağ trafiği ücretlerini ödersiniz. Bu ücretler, hizmetin kendisi gibi sıfıra düşer.
- Güvenlik: Daha ayrıntılı ağ güvenliği için ağ etiketlerini doğrudan hizmet revizyonlarında kullanabilirsiniz.
- Performans: Daha düşük gecikme süresi, daha yüksek işleme hızı.
Doğrudan VPC çıkışını kullanarak Cloud Run hizmetinizin, işlevinizin, işinizin veya çalışan havuzunuzun tüm trafiği bir VPC ağına göndermesini sağlayabilirsiniz.
2. Neler öğreneceksiniz?
- Global Google API için PSC uç noktası oluşturma
- Bölgesel Google API için PSC uç noktası oluşturma
- Cloud Run kodunda API uç noktasını değiştirme ve giden trafik için ağı yapılandırma
3. Genel Laboratuvar Mimarisi

4. Hazırlık adımları
Laboratuvarda çalışmak için gereken IAM rolleri
Gerekli IAM rollerini proje düzeyinde GCP hesabına atayarak işe başlayın.
- Compute Ağ Yöneticisi (
roles/compute.networkAdmin): Bu rol, Compute Engine ağ iletişimi kaynakları üzerinde tam kontrol sağlar. - Günlük kaydı yöneticisi (
roles/logging.admin): Bu rol, tüm günlük kaydı izinlerine ve bunlara bağlı izinlere erişmenizi sağlar. - Hizmet Kullanımı Yöneticisi (
roles/serviceusage.serviceUsageAdmin): Bu rol, hizmet durumlarını etkinleştirme, devre dışı bırakma ve inceleme; işlemleri inceleme ve tüketici projeleri için kota tüketimi ve faturalandırma yetkisi verir. - DNS yöneticisi (
roles/dns.admin): Bu rol, tüm Cloud DNS kaynaklarına okuma ve yazma erişimi sağlar. - Cloud Run Yöneticisi (
roles/run.admin): Bu rol, tüm Cloud Run kaynakları üzerinde tam kontrol sağlar. - Storage Yöneticisi (
roles/storage.admin): Bu rol, nesneler ve paketler üzerinde tam kontrol sağlar.
API'leri etkinleştir
Cloud Shell'de projenizin doğru şekilde yapılandırıldığından ve ortam değişkenlerinizin ayarlandığından emin olun.
Cloud Shell'de aşağıdakileri yapın:
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
Projede gerekli tüm Google API'lerini etkinleştirin. Cloud Shell'de aşağıdakileri yapın:
gcloud services enable \
artifactregistry.googleapis.com \
cloudbuild.googleapis.com \
run.googleapis.com \
compute.googleapis.com \
dns.googleapis.com \
servicedirectory.googleapis.com \
networkconnectivity.googleapis.com
VPC oluşturma
Projede, özel alt ağ moduna sahip bir VPC ağı oluşturun. Cloud Shell'de aşağıdakileri yapın:
gcloud compute networks create mynet \
--subnet-mode=custom
Alt ağ oluşturma
Cloud Shell'de bir IPv4 alt ağı oluşturmak için aşağıdakileri yapın:
gcloud compute networks subnets create mysubnet \
--network=mynet \
--range=10.0.0.0/24 \
--region=$region
Cloud NAT ve Cloud Router oluşturma
Cloud NAT, Cloud Run işlerinin harici web sitelerine bağlanmasına izin vermek için kullanılır.
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. Cloud Storage için PSC uç noktası oluşturma
Cloud Storage için biri Global kapsamlı, diğeri Bölgesel kapsamlı olmak üzere iki PSC uç noktası oluşturacaksınız.
Global kapsamlı PSC uç noktası oluşturma
Private Service Connect ile VPC ağınızda global dahili IP adreslerini kullanarak global kapsamlı özel uç noktalar oluşturabilirsiniz.
VPC'nizde tanımlanmamış benzersiz bir IP adresi ayırmanız gerekir. Lütfen bu IP adresi şartıyla ilgili belgeye bakın.
Cloud Shell'de IP adresi oluşturmak için aşağıdakileri yapın. Lütfen –addresses=<pscendpointip> kısmını, ayırdığınız IP adresini kullanacak şekilde değiştirin.
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
Uç noktayı Google API'lerine ve hizmetlerine bağlamak için bir iletim kuralı oluşturun.
gcloud compute forwarding-rules create pscendpoint \
--global \
--network=mynet \
--address=pscglobalip \
--target-google-apis-bundle=all-apis
Cloud DNS'de p.googleapis.com'u kontrol edin
Bir uç nokta oluşturduğunuzda aşağıdaki DNS yapılandırmaları otomatik olarak oluşturulur:
- p.googleapis.com için bir Service Directory özel DNS bölgesi oluşturulur.
- Private Service Connect kullanılarak kullanılabilen ve googleapis.com ile biten varsayılan DNS adlarına sahip bazı en çok tercih edilen Google API'leri ve hizmetleri için p.googleapis.com'da DNS kayıtları oluşturulur.
Genel uç noktalar, Hizmet Dizini'ne kaydedilir. Cloud Storage'a erişmek için storage-[psc endpoint name].p.googleapis.com adresini kullanacaksınız. Ayrıntılar için ürün dokümanlarına bakın.
p.googleaps.com bölgesinin daha önce oluşturulup oluşturulmadığını kontrol etmek için komutu çalıştırın.
gcloud dns managed-zones list
Varsayılan DNS adı olan storage.googleapis.com'u kullanmak istiyorsanız Cloud DNS'te storage.googleapis.com adlı özel bir bölge oluşturur ve genel kapsamlı IP adresinin PSC uç noktasına işaret eden apex kaydını eklersiniz.
Cloud Storage için bölgesel kapsamlı PSC uç noktası oluşturma
VPC alt ağından bir IP'ye ihtiyacınız vardır. Aşağıdaki komutu çalıştırın. PSC uç noktası için alt ağdan bir IP ayrılır.
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
Yukarıdaki adımda oluşturulan uç nokta IP adresini alın.
regionalip=$(gcloud network-connectivity regional-endpoints describe psc-regional-endpoint --region=$region --format="value(address)")
echo $regionalip
Cloud Storage'a erişmek için storage.us-central1.rep.googleapis.com adresini kullanırsınız. storage.us-central1.rep.googleapis.com için özel bir bölge ve Cloud DNS'de bölgesel uç nokta için yeni oluşturduğunuz IP adresinin apex kaydını oluşturmanız gerekir.
Cloud Storage bölgesel uç noktası için özel bölge oluşturma
Cloud Storage bölgesel uç noktasına erişmek için storage.[bölge adı].rep.googleapis.com adresini kullanırsınız.
Cloud DNS'de özel bir bölge oluşturmanız ve Cloud Storage bölgesel uç noktasının IP adresini gösteren bir apex kaydı eklemeniz gerekir.
Aşağıdaki komutta us-central1 örnek bölgedir. Bölgenizin adıyla alt bölge oluşturmanız gerekir.
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. Cloud Run işini Global Kapsamlı PSC uç noktasıyla yapılandırma
Kodu alın
Öncelikle web sayfalarının ekran görüntülerini alıp Cloud Storage'de depolamak için bir Node.js uygulamasını keşfedersiniz. Daha sonra, uygulama için bir container görüntüsü oluşturup Cloud Run'da iş olarak çalıştırırsınız.
Cloud Shell'den, uygulama kodunu bu depodan klonlamak için aşağıdaki komutu çalıştırın:
git clone https://github.com/GoogleCloudPlatform/jobs-demos.git
Uygulamayı içeren dizine gidin:
cd jobs-demos/screenshot
Aşağıdaki dosya düzenini görmelisiniz:
|
├── Dockerfile
├── README.md
├── screenshot.js
├── package.json
Her dosyanın kısa açıklaması aşağıda verilmiştir:
- screenshot.js, uygulamanın Node.js kodunu içerir. Uygulama, web sayfalarının ekran görüntülerini alıp Cloud Storage'da depolar.
- package.json, kitaplık bağımlılıklarını tanımlar.
- Dockerfile, kapsayıcı görüntüsünü tanımlar.
screenshot.js kodunu açın. apiEndpoint'i PSC global uç noktası olarak değiştireceksiniz. Kodu arayın ve const storage = new Storage(); yerine aşağıdakileri girin:
const storage = new Storage(
{
apiEndpoint:'https://storage-pscendpoint.p.googleapis.com.',
useAuthWithCustomEndpoint: true
}
);
İş dağıtma
İş oluşturmadan önce, işi çalıştırmak için kullanacağınız bir hizmet hesabı oluşturmanız gerekir.
gcloud iam service-accounts create screenshot-sa --display-name="Screenshot app service account"
Hizmet hesabına storage.admin rolünü verin. Böylece bu hesap, paket ve nesne oluşturmak için kullanılabilir.
gcloud projects add-iam-policy-binding $project_id \
--role roles/storage.admin \
--member serviceAccount:screenshot-sa@$project_id.iam.gserviceaccount.com
Varsayılan Compute hizmet hesabına Storage Nesne Kullanıcısı rolü , Günlük Yazıcı rolü ve Artifact Registry Depo Yöneticisi rolünü verin.
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
Tüm trafiği bir VPC ağına göndermek için Cloud Run işlerinde doğrudan VPC çıkışını etkinleştirirsiniz.
Cloud Shell'de aşağıdakileri yapın:
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
İşi çalıştırma
Cloud Shell'de aşağıdakileri yapın:
gcloud run jobs execute screenshot-1 --region=$region
İşin ve günlüklerin durumunu kontrol edin. Cloud Run konsoluna gidip işi bulun. İşi tıklayıp günlüğün Geçmişi'ni kontrol edebilirsiniz. Aşağıdaki gibi benzer bir iş yürütme sonucu görürsünüz.

Ayrıntılı iş yürütme günlükleri için görevde Günlüğü görüntüle'yi tıklayın. Aşağıdakine benzer iş günlükleri görürsünüz.

Yeni bir paket oluşturuldu. Cloud Storage konsoluna gidip oluşturulan yeni paketi kontrol edebilirsiniz. Cloud Storage Global Uç Noktası'nı kullanırken paketin çok bölgeli bir paket olduğunu lütfen unutmayın. Pakete yüklenen resimleri kontrol edebilirsiniz.
Test sonucu, Cloud Run işinde değiştirdiğiniz Cloud Storage Global Uç Noktası'na Cloud Run'ın özel olarak eriştiğini gösteriyor:
apiEndpoint:‘https://storage-pscendpoint.p.googleapis.com.'
7. Bölgesel kapsamlı PSC uç noktasıyla Cloud Run işini yapılandırma
Kodda apiEndpoint'i bölgesel kapsamlı PSC uç noktasıyla değiştireceksiniz.
Kodu arayın ve const storage = new Storage(); ifadesini aşağıdakilerle değiştirin ( örnek olarak us-central1 kullanıyoruz). Lütfen bölgenizi seçin ) :
const storage = new Storage(
{
apiEndpoint:'https://storage.us-central1.rep.googleapis.com.',
useAuthWithCustomEndpoint: true
}
);
İş dağıtma
Uygulamayı içeren dizinde (jobs-demos/screenshot) olduğunuzdan emin olun.
pwd
Tüm trafiği bir VPC ağına göndermek için işlerde doğrudan VPC çıkışını etkinleştirirsiniz.
Cloud Shell'de aşağıdakileri yapın:
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
İşi çalıştırma
Cloud Shell'de aşağıdakileri yapın:
gcloud run jobs execute screenshot-2 --region=$region
İşin ve günlüklerin durumunu kontrol edin. Cloud Run konsoluna gidip işi bulun. İşi tıklayıp işin geçmişini kontrol edebilirsiniz. Aşağıdaki gibi benzer bir iş yürütme sonucu görürsünüz.

Ayrıntılı iş yürütme günlükleri için Günlüğü görüntüle'yi tıklayın. Aşağıdakine benzer iş günlükleri görürsünüz.

Yeni bir paket oluşturuldu. Cloud Storage konsoluna gidip oluşturulan yeni paketi kontrol edebilirsiniz. Cloud Storage bölgesel uç noktasını kullanırken paketin tek bölgeli bir paket olduğunu lütfen unutmayın. Pakete yüklenen resimleri kontrol edebilirsiniz.
Test sonucu, Cloud Run işinde değiştirdiğiniz Cloud Storage bölgesel uç noktasına Cloud Run'ın özel olarak eriştiğini gösteriyor:
apiEndpoint:‘https://storage.us-central1.rep.googleapis.com.'
8. Temizleme
Cloud Run işini temizleme
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
PSC uç noktasını temizleme
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
Cloud NAT, Cloud Router ve VPC'leri temizleme
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. Tebrikler
Global uç nokta ve bölgesel uç nokta aracılığıyla Cloud Storage'a Cloud Run özel erişimini başarıyla test ettiniz.