Cloud Run for Anthos Codelab Etkinlikleri

1. Giriş

6a5cf23c8e20491f.png

Cloud Run, tümüyle yönetilen bir ortamda durum bilgisiz container'lar çalıştırmanıza olanak tanır. Açık kaynaklı Knative'den derlenen bu platform sayesinde, container'larınızı Cloud Run ile tümüyle yönetilecek şekilde veya Anthos için Cloud Run ile Google Kubernetes Engine kümenizde çalıştırmayı tercih edebilirsiniz.

Events for Cloud Run for Anthos, Cloud Run hizmetlerini çeşitli kaynaklardaki etkinliklere bağlamayı kolaylaştırır. Mikro hizmetlerin serbest bağlantılı olduğu ve dağıtıldığı etkinlik odaklı mimariler oluşturmanıza olanak tanır. Ayrıca, etkinlik alımı, teslimatı, güvenliği, yetkilendirme ve hata işleme gibi işlemleri sizin için gerçekleştirerek geliştiricilerin çevikliğini ve uygulamaların esnekliğini artırır.

Bu codelab'de, Events for Cloud Run for Anthos hakkında bilgi edineceksiniz. Daha spesifik olarak, Cloud Pub/Sub, Denetleme Günlükleri, Cloud Storage ve Cloud Scheduler'dan gelen etkinlikleri dinleyecek ve özel etkinlikleri nasıl oluşturup tüketeceğinizi öğreneceksiniz.

Neler öğreneceksiniz?

  • Cloud Run for Anthos Etkinlikleri ile ilgili uzun vadeli vizyon
  • Events for Cloud Run for Anthos'un mevcut durumu
  • Cloud Run havuzu oluşturma
  • Cloud Pub/Sub için etkinlik tetikleyici oluşturma
  • Denetleme günlükleri için etkinlik tetikleyici oluşturma
  • Cloud Storage için etkinlik tetikleyici oluşturma
  • Cloud Scheduler için etkinlik tetikleyici oluşturma
  • Özel etkinlikler oluşturma ve kullanma

2. Uzun Vadeli Vizyon

Sunucusuz mimariyi benimsedikçe etkinlikler, bağlantısı kaldırılmış mikro hizmetlerin iletişim kurma şeklinin ayrılmaz bir parçası haline gelir. Events for Cloud Run for Anthos, etkinlikleri Cloud Run for Anthos teklifinin birinci sınıf bir özelliği haline getirerek etkinlik odaklı sunucusuz uygulamalar oluşturmayı kolaylaştırır.

Events for Cloud Run for Anthos, paketlenmiş veya uygulama tarafından oluşturulan etkinlik kaynaklarından küme içi ve küme dışı tüketicilere güvenilir, güvenli ve ölçeklenebilir eşzamansız etkinlik teslimi sağlar.

ce389bcafba6d669.png

Google Cloud kaynakları

Google Cloud'a ait ürünler olan etkinlik kaynakları

Google kaynakları

Gmail, Hangouts ve Android Yönetimi gibi Google'a ait ürünler olan etkinlik kaynakları

Özel kaynaklar

Google'a ait olmayan ve son kullanıcılar tarafından oluşturulan etkinlik kaynakları. Bunlar, kullanıcı tarafından geliştirilen Knative kaynakları veya kümede çalışan ve Cloud Event oluşturabilen diğer uygulamalar olabilir.

Üçüncü taraf kaynakları

Ne Google'a ait olan ne de son kullanıcıya ait olan etkinlik kaynakları. Buna, üçüncü taraf sağlayıcılar, iş ortakları veya OSS toplulukları tarafından sahip olunan ve bakımı yapılan Github, SAP, Datadog, Pagerduty gibi popüler etkinlik kaynakları dahildir.

Etkinlikler, hizmetler arası birlikte çalışabilirlik için CloudEvents v1.0 biçiminde normalleştirilir. CloudEvents, etkinlik verilerini ortak biçimlerde açıklayan, satıcıdan bağımsız açık bir spesifikasyondur. Hizmetler, platformlar ve sistemler arasında birlikte çalışabilirliği sağlar.

Cloud Run için Events, Knative Eventing ile uyumludur ve container'ların diğer Knative tabanlı uygulamalara ve bu uygulamalardan taşınmasına olanak tanır. Bu, etkinlik üreticilerini etkinlik tüketicileriyle bildirimli olarak bağlamak için tutarlı ve buluttan bağımsız bir çerçeve sağlar.

3. Geçerli durum

Bu önizleme, uzun vadeli işlevlerin ilk grubunu sunan ilk sürümdür.

b1dd0d8a73185b95.png

Kullanıcıların etkinliğe dayalı sunucusuz uygulamalar oluşturmasını sağlamak için başlangıçta iki noktaya odaklanıyoruz:

  1. Anthos kümesindeki Cloud Run hizmetlerinin Google Cloud hizmetlerinden gelen etkinliklere tepki vermesini sağlayan geniş bir Google Cloud Kaynakları ekosistemi sunar.
  • Başlangıçta, Google Cloud kaynaklarındaki etkinlikler Cloud Audit Logs (CAL) aracılığıyla sağlanır ve çok çeşitli etkinlik kaynakları etkinleştirilir. Bu kaynaklardan etkinlik tesliminin gecikme süresi ve kullanılabilirliği, Cloud Denetleme Günlükleri'ninkine bağlıdır. Google Cloud kaynağındaki bir etkinlik her yayınlandığında ilgili bir Cloud Denetleme Günlüğü girişi oluşturulur.
  • Cloud Denetleme Günlükleri'nin yanı sıra Cloud Storage, Cloud Pub/Sub ve Cloud Scheduler'dan etkinlik tüketmek için birinci sınıf destek sunulur. Kullanıcı yolculukları ve geri bildirimlerinden daha fazla şey öğrendikçe bu kaynak ekosistemini birinci sınıf kaynaklarla genişletmeye devam edeceğiz.
  1. Ad alanı kapsamlı küme yerel Broker URL'sine yayın yaparak son kullanıcı uygulamalarının ve hizmetlerinin özel etkinlikler yayınlamasını sağlayın.

Temel alınan teslimat mekanizması, müşterilerin projelerinde görünen Cloud Pub/Sub konularını ve aboneliklerini kullanır. Bu nedenle, özellik Cloud Pub/Sub ile aynı teslimat garantilerini sağlar.

Etkinlik Tetikleyicisi, tetikleyici filtresiyle eşleşen etkinliklerin, Tetikleyicinin işaret ettiği hedefe (veya havuzuna) teslim edilmesi için etkinliklere abone olmanın bir yolunu sunar.

Tüm etkinlikler, hizmetler arası birlikte çalışabilirlik için Cloud Events v1.0 biçiminde sunulur.

GA'ya kadar ve sonrasında yinelemeli bir şekilde daha fazla değer sunmaya devam edeceğiz.

4. Kurulum ve Gereksinimler

Yönlendirmesiz ortam kurulumu

  1. Cloud Console'da oturum açın ve yeni bir proje oluşturun veya mevcut bir projeyi yeniden kullanın. Gmail veya Google Workspace hesabınız yoksa hesap oluşturmanız gerekir.

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

  • Proje Adı, bu proje için görünen adınızdır. Adlandırma kurallarına uyduğunuz sürece istediğiniz her şeyi kullanabilir ve istediğiniz zaman güncelleyebilirsiniz.
  • Proje kimliği, tüm Google Cloud projelerinde benzersiz olmalı ve sabittir (ayarlandıktan sonra değiştirilemez). Cloud Console, benzersiz bir dizeyi otomatik olarak oluşturur. Genellikle bu dizenin ne olduğuyla ilgilenmezsiniz. Çoğu codelab'de proje kimliğine (genellikle PROJECT_ID olarak tanımlanır) başvurmanız gerekir. Bu nedenle, beğenmezseniz başka bir rastgele kimlik oluşturun veya kendi kimliğinizi deneyip kullanılabilir olup olmadığını kontrol edin. Proje oluşturulduktan sonra bu ayar "dondurulur".
  1. Ardından, Google Cloud kaynaklarını kullanmak için Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir.

Bu codelab'i tamamlamak neredeyse hiç maliyetli değildir. Bu eğitimin ötesinde faturalandırma ücreti alınmaması için kaynakları nasıl kapatacağınız konusunda size tavsiyelerde bulunan "Temizleme" bölümündeki talimatları uyguladığınızdan emin olun. Google Cloud'un yeni kullanıcıları 300 ABD doları değerinde ücretsiz deneme programından yararlanabilir.

Cloud Shell'i başlatma

Google Cloud, dizüstü bilgisayarınızdan uzaktan çalıştırılabilir. Ancak bu codelab'de, Cloud'da çalışan bir komut satırı ortamı olan Google Cloud Shell'i kullanacaksınız.

GCP Console'da sağ üstteki araç çubuğunda Cloud Shell simgesini tıklayın:

bce75f34b2c53987.png

Ortamın temel hazırlığı ve bağlanması yalnızca birkaç dakikanızı alır. İşlem tamamlandığında aşağıdakine benzer bir sonuç görürsünüz:

f6ef2b5f13479f3a.png

Bu sanal makine, ihtiyaç duyacağınız tüm geliştirme araçlarını içerir. 5 GB boyutunda kalıcı bir ana dizin sunar ve Google Cloud üzerinde çalışır. Bu sayede ağ performansı ve kimlik doğrulama önemli ölçüde güçlenir. Bu laboratuvardaki çalışmalarınızın tamamını yalnızca bir tarayıcı kullanarak yapabilirsiniz.

5. API'leri etkinleştirme, bölge ve platform ayarlama

Proje kimliğini ayarlama ve alfa bileşenlerini yükleme

Cloud Shell'de GOOGLE_CLOUD_PROJECT, proje kimliğinize ayarlanmış olmalıdır. Aksi takdirde, bu kimliğin ayarlandığından ve gcloud'un bu proje kimliğiyle yapılandırıldığından emin olun:

export GOOGLE_CLOUD_PROJECT=your-project-id
gcloud config set project ${GOOGLE_CLOUD_PROJECT}

Alpha için gcloud bileşeninin yüklendiğinden emin olun:

gcloud components install alpha

API'leri etkinleştir

Gerekli tüm hizmetleri etkinleştirin:

gcloud services enable cloudapis.googleapis.com 
gcloud services enable container.googleapis.com 
gcloud services enable containerregistry.googleapis.com
gcloud services enable cloudbuild.googleapis.com

Bölge ve platformu ayarlama

Cloud Run Events ile GKE kümesi oluşturmadan önce küme adını, bölgeyi ve platformu ayarlayın. Örneğin, burada adı ve alt bölgeyi events-cluster ve europe-west1-b olarak, platformu ise gke, olarak ayarlıyoruz.

Cloud Shell'de:

export CLUSTER_NAME=events-cluster
export CLUSTER_ZONE=europe-west1-b

gcloud config set run/cluster ${CLUSTER_NAME}
gcloud config set run/cluster_location ${CLUSTER_ZONE}
gcloud config set run/platform gke

Yapılandırmanın ayarlandığını şu şekilde kontrol edebilirsiniz:

gcloud config list

...
[run]
cluster = events-cluster
cluster_location = europe-west1-b
platform = gke

6. Cloud Run Events ile GKE kümesi oluşturma

Aşağıdaki eklentilerin etkin olduğu, Kubernetes >= 1.15.9-gke.26 çalıştıran bir GKE kümesi oluşturun: CloudRun, HttpLoadBalancing, HorizontalPodAutoscaling:

gcloud beta container clusters create ${CLUSTER_NAME} \
  --addons=HttpLoadBalancing,HorizontalPodAutoscaling,CloudRun \
  --machine-type=n1-standard-4 \
  --enable-autoscaling --min-nodes=3 --max-nodes=10 \
  --no-issue-client-certificate --num-nodes=3 --image-type=cos \
  --enable-stackdriver-kubernetes \
  --scopes=cloud-platform,logging-write,monitoring-write,pubsub \
  --zone ${CLUSTER_ZONE} \
  --release-channel=rapid

7. Cloud Run Events'i (kontrol düzlemi) ayarlama

Cloud Run Events'in ayrı ayrı ayarlanması gereken bir kontrol düzlemi ve bir veri düzlemi vardır. Denetim düzlemini ayarlamak için:

Cloud Shell'de:

gcloud beta events init 

Bu işlem, etkinlikleri başlatır ve gerekli hizmet hesaplarını oluşturur. Hizmet hesabı oluşturmanız istendiğinde "Evet"i seçtiğinizden emin olun.

Bu noktada kontrol düzlemi düzgün şekilde başlatılmış olmalıdır. Şu bilgileri içeren dört kapsül görmelisiniz:

Running durumu, cloud-run-events ad alanında 2 (controller-xxx-xxx ve webhook-xxx-xxx) ve knative-eventing ad alanında 2 (eventing-controller-xxx-xxx ve eventing-webhook-xxx-xxx). Aşağıdaki komutları çalıştırarak kontrol edebilirsiniz:

kubectl get pods -n cloud-run-events

NAME                         READY   STATUS    RESTARTS   AGE
controller-9cc679b67-2952n   1/1     Running   0          22s
webhook-8576c4cfcb-dhz82     1/1     Running   0          16m
kubectl get pods -n knative-eventing

NAME                                   READY   STATUS    RESTARTS   AGE
eventing-controller-77f46f6cf8-kj9ck   1/1     Running   0          17m
eventing-webhook-5bc787965f-hcmwg      1/1     Running   0          17m

8. Cloud Run etkinliklerini (veri düzlemi) ayarlama

Ardından, kullanıcı ad alanlarında veri düzlemini ayarlamanız gerekir. Bu işlem, Pub/Sub'dan okuma/yazma için uygun izinlere sahip bir aracı oluşturur.

Cloud Shell'de, nesneleriniz için kullanmak istediğiniz ad alanı için bir NAMESPACE ortam değişkeni ayarlayın. Aşağıda gösterildiği gibi varsayılan ad alanını kullanmak istiyorsanız default olarak ayarlayabilirsiniz:

export NAMESPACE=default

Belirtilen ad alanı yoksa (ör. ad alanı varsayılan değilse) oluşturmanız gerektiğini unutmayın:

kubectl create namespace ${NAMESPACE}

Ad alanını varsayılan gizli anahtarla başlatın:

gcloud beta events namespaces init ${NAMESPACE} --copy-default-secret 

Ad alanında varsayılan bir aracı oluşturun:

gcloud beta events brokers create default --namespace ${NAMESPACE}

Aracının oluşturulduğunu kontrol edin. Aracının hazır hale gelmesinin birkaç saniye sürebileceğini unutmayın:

kubectl get broker -n ${NAMESPACE}

NAME      READY   REASON   URL
default   True             http://default-brokercell-ingress.cloud-run-events.svc.cluster.local/default/default

9. Etkinlik Keşfi

Kayıtlı kaynakların neler olduğunu, hangi etkinlik türlerini yayınlayabileceklerini ve bunları kullanmak için tetikleyicileri nasıl yapılandıracağınızı öğrenebilirsiniz.

Farklı etkinlik türlerinin listesini görmek için:

gcloud beta events types list

Her etkinlik türü hakkında daha fazla bilgi edinmek için:

gcloud beta events types describe google.cloud.pubsub.topic.v1.messagePublished

10. Cloud Run havuzu oluşturma

Etkinlik havuzu olarak, aldığı CloudEvent'in içeriğini günlüğe kaydeden bir Cloud Run hizmeti dağıtın.

Knative'in önceden derlenmiş event_display özelliğini ve Knative sürümünün bir parçası olarak oluşturulan kapsayıcı görüntüsünü kullanabilirsiniz. Container görüntüsü ayrıntılarını event-display.yaml dosyasında görebilirsiniz:

...
containers:
  - image: gcr.io/knative-releases/knative.dev/eventing-contrib/cmd/event_display@sha256:8da2440b62a5c077d9882ed50397730e84d07037b1c8a3e40ff6b89c37332b27

Cloud Run'a dağıtma

Kapsayıcıya alınmış uygulamanızı Cloud Run'a dağıtın:

export SERVICE_NAME=event-display
gcloud run deploy ${SERVICE_NAME} \
  --namespace=${NAMESPACE} \
  --image gcr.io/knative-releases/knative.dev/eventing-contrib/cmd/event_display@sha256:8da2440b62a5c077d9882ed50397730e84d07037b1c8a3e40ff6b89c37332b27

İşlem başarılı olursa komut satırında hizmet URL'si gösterilir. Artık hizmet URL'sini herhangi bir tarayıcı penceresinde açarak dağıtılan kapsayıcınızı ziyaret edebilirsiniz.

11. Cloud Pub/Sub için etkinlik tetikleyici oluşturma

Etkinlikleri almanın bir yolu Cloud Pub/Sub'ı kullanmaktır. Özel uygulamalar, Cloud Pub/Sub'a mesaj yayınlayabilir ve bu mesajlar, Cloud Run için Etkinlikler aracılığıyla Google Cloud Run hedeflerine teslim edilebilir.

Konu oluşturma

Öncelikle bir Cloud Pub/Sub konusu oluşturun. TOPIC_ID ifadesini tercih ettiğiniz benzersiz bir konu adıyla değiştirebilirsiniz:

export TOPIC_ID=cr-gke-topic
gcloud pubsub topics create ${TOPIC_ID}

Tetikleyici oluşturma

Tetikleyiciyi oluşturmadan önce Cloud Pub/Sub'daki etkinlikler için tetikleyici oluşturmak üzere kullanmanız gereken parametreler hakkında daha fazla bilgi edinin:

gcloud beta events types describe google.cloud.pubsub.topic.v1.messagePublished

Cloud Pub/Sub konusuna yayınlanan etkinlikleri dağıtılan Cloud Run hizmetimize göre filtrelemek için bir tetikleyici oluşturun:

gcloud beta events triggers create trigger-pubsub \
  --namespace ${NAMESPACE} \
  --target-service ${SERVICE_NAME} \
  --type google.cloud.pubsub.topic.v1.messagePublished \
  --parameters topic=${TOPIC_ID}

Tetikleyiciyi test etme

Tüm tetikleyicileri listeleyerek tetikleyicinin oluşturulup oluşturulmadığını kontrol edebilirsiniz:

gcloud beta events triggers list

Tetikleyici oluşturma işleminin yayılması ve etkinlikleri filtrelemeye başlaması için 10 dakika kadar beklemeniz gerekebilir.

Mesaj gönderen özel bir uygulamayı simüle etmek için gcloud kullanarak bir etkinlik tetikleyebilirsiniz:

gcloud pubsub topics publish ${TOPIC_ID} --message="Hello there"

Oluşturduğumuz Cloud Run hedefi, gelen iletinin gövdesini günlüğe kaydeder. Bunu Cloud Run örneğinizin Günlükler bölümünde görüntüleyebilirsiniz:

9526909a06c6d4f4.png

"Hello there" ifadesinin Pub/Sub tarafından gönderildiği için base64 ile kodlanacağını ve gönderilen orijinal mesajı görmek istiyorsanız kodu çözmeniz gerektiğini unutmayın.

Tetikleyiciyi silme

Dilerseniz test tamamlandıktan sonra tetikleyiciyi silebilirsiniz.

gcloud beta events triggers delete trigger-pubsub --namespace ${NAMESPACE}

12. Denetleme günlükleri için etkinlik tetikleyici oluşturma

Denetleme günlüklerindeki etkinlikleri dinlemek için bir tetikleyici ayarlarsınız. Daha spesifik olarak, denetleme günlüklerinde Pub/Sub konusu oluşturma etkinliklerini arayacaksınız.

Denetleme Günlüklerini Etkinleştirme

Bir hizmetten etkinlik almak için denetleme günlüklerini etkinleştirmeniz gerekir. Cloud Console'da sol üstteki menüden IAM & Admin > Audit Logs simgesini seçin. Hizmet listesinde Google Cloud Pub/Sub'ı işaretleyin:

97bd4b57c6a05fcc.png

Sağ tarafta Yönetici, Okuma ve Yazma seçeneklerinin işaretli olduğundan emin olun. Kaydet'i tıklayın:

bec31b4f35fbcea.png

Denetleme Günlüklerini Test Etme

Gerçek bir tetikleyici oluşturmak için ayarlamanız gereken parametreleri nasıl belirleyeceğinizi öğrenmek için gerçek bir işlem gerçekleştirin.

Örneğin, bir Pub/Sub konusu oluşturun:

gcloud pubsub topics create cre-gke-topic1

Şimdi de bu güncellemenin ne tür bir denetleme günlüğü oluşturduğunu görelim. Cloud Console'da sol üstteki menüden Logging > Logs Viewer simgesini seçin.

Query Builder, bölümünde Cloud Pub/Sub Topic seçeneğini belirleyin ve Add seçeneğini tıklayın:

f5c634057e935bc6.png

Sorguyu çalıştırdıktan sonra Pub/Sub konularıyla ilgili günlükleri görürsünüz. Bunlardan biri google.pubsub.v1.Publisher.CreateTopic olmalıdır:

b083cce219773d24.png

serviceName, methodName ve resourceName hükümlerini inceleyin. Bunları tetikleyiciyi oluştururken kullanacağız.

Tetikleyici oluşturma

Artık denetleme günlükleri için bir etkinlik tetikleyici oluşturmaya hazırsınız.

Google Cloud kaynaklarından gelen etkinlikler için tetikleyici oluşturmak üzere kullanmanız gereken parametreler hakkında daha fazla bilgi edinmek için aşağıdaki komutu çalıştırabilirsiniz:

gcloud beta events types describe google.cloud.audit.log.v1.written

Tetikleyiciyi doğru filtrelerle oluşturun:

gcloud beta events triggers create trigger-auditlog \
  --namespace ${NAMESPACE} \
  --target-service ${SERVICE_NAME} \
  --type=google.cloud.audit.log.v1.written \
  --parameters serviceName=pubsub.googleapis.com \
  --parameters methodName=google.pubsub.v1.Publisher.CreateTopic

Tetikleyiciyi test etme

Tetikleyicinin başarıyla oluşturulduğunu onaylamak için tüm tetikleyicileri listeleyin:

gcloud beta events triggers list

Tetikleyici oluşturma işleminin yayılması ve etkinlikleri filtrelemeye başlaması için 10 dakika kadar bekleyin. Hazır olduğunda oluşturma etkinliklerini filtreleyip hizmete gönderir. Artık bir etkinlik tetiklemeye hazırsınız.

Daha önce yaptığınız gibi başka bir Pub/Sub konusu oluşturun:

gcloud pubsub topics create cre-gke-topic2

Cloud Console'da Cloud Run hizmetinin günlüklerini kontrol ederseniz alınan etkinliği görürsünüz:

aff3b2e7ad05c75d.png

Tetikleyiciyi ve konuları silme

Dilerseniz test tamamlandıktan sonra tetikleyiciyi silebilirsiniz:

gcloud beta events triggers delete trigger-auditlog

Ayrıca aşağıdaki konuları da silin:

gcloud pubsub topics delete cre-gke-topic1 cre-gke-topic2

13. Cloud Storage için etkinlik tetikleyici oluşturma

Cloud Storage'daki etkinlikleri dinlemek için bir tetikleyici ayarlayacaksınız.

Paket oluşturma

Öncelikle, dağıtılan Cloud Run hizmetiyle aynı bölgede bir Cloud Storage paketi oluşturun. BUCKET_NAME ifadesini tercih ettiğiniz benzersiz bir adla değiştirebilirsiniz:

export BUCKET_NAME=[new bucket name]
export REGION=europe-west1

gsutil mb -p $(gcloud config get-value project) \
  -l $REGION \
  gs://$BUCKET_NAME/

Cloud Storage izinlerini ayarlama

Tetikleyici oluşturmadan önce Cloud Storage için varsayılan hizmet hesabına Pub/Sub'a yayınlama izni vermeniz gerekir.

Öncelikle Cloud Storage'ın Pub/Sub'a yayınlamak için kullandığı hizmet hesabını bulmanız gerekir. Hizmet hesabını almak için Cloud Storage hizmet hesabını alma bölümünde belirtilen adımları uygulayabilir veya aşağıdaki komutu kullanabilirsiniz:

curl -X GET -H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://storage.googleapis.com/storage/v1/projects/$(gcloud config get-value project)/serviceAccount"

Hizmet hesabı, email_address altında listelenmelidir.

Yukarıda bulduğunuz hizmet hesabının service-XYZ@gs-project-accounts.iam.gserviceaccount.com olduğunu varsayarak bunu bir ortam değişkenine ayarlayın:

export GCS_SERVICE_ACCOUNT=service-XYZ@gs-project-accounts.iam.gserviceaccount.com

Ardından, bu hizmet hesabına Pub/Sub'a yayın yapma hakkı verin:

gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \
  --member=serviceAccount:${GCS_SERVICE_ACCOUNT} \
  --role roles/pubsub.publisher

Tetikleyici oluşturma

Artık Cloud Storage etkinlikleri için bir etkinlik tetikleyici oluşturmaya hazırsınız.

Tetikleyiciyi oluşturmak için gereken parametreler hakkında daha fazla bilgi edinebilirsiniz:

gcloud beta events types describe google.cloud.storage.object.v1.finalized

Tetikleyiciyi doğru filtrelerle oluşturun:

gcloud beta events triggers create trigger-storage \
  --namespace ${NAMESPACE} \
  --target-service ${SERVICE_NAME} \
  --type=google.cloud.storage.object.v1.finalized \
  --parameters bucket=${BUCKET_NAME}

Tetikleyiciyi test etme

Tetikleyicinin başarıyla oluşturulduğunu onaylamak için tüm tetikleyicileri listeleyin:

gcloud beta events triggers list

Tetikleyici oluşturma işleminin yayılması ve etkinlikleri filtrelemeye başlaması için 10 dakika kadar bekleyin. Hazır olduğunda oluşturma etkinliklerini filtreleyip hizmete gönderir.

Artık bir etkinlik tetiklemeye hazırsınız.

Cloud Storage paketine rastgele bir dosya yükleyin:

echo "Hello World" > random.txt
gsutil cp random.txt gs://${BUCKET_NAME}/random.txt

Cloud Console'da Cloud Run hizmetinin günlüklerini kontrol ederseniz alınan etkinliği görürsünüz:

aff3b2e7ad05c75d.png

Tetikleyiciyi silme

Dilerseniz test tamamlandıktan sonra tetikleyiciyi silebilirsiniz:

gcloud beta events triggers delete trigger-storage

14. Cloud Scheduler için etkinlik tetikleyici oluşturma

Cloud Scheduler'dan gelen etkinlikleri dinlemek için bir tetikleyici ayarlayacaksınız.

App Engine uygulaması oluşturma

Cloud Scheduler'ı kullanmak için App Engine uygulaması oluşturmanız gerekir. Bir App Engine Konumu seçin ve uygulamayı oluşturun:

export APP_ENGINE_LOCATION=europe-west
gcloud app create --region=${APP_ENGINE_LOCATION}

Tetikleyici oluştur

Google Cloud kaynaklarından gelen etkinlikler için tetikleyici oluşturmak üzere kullanmanız gereken parametreler hakkında daha fazla bilgi edinmek için aşağıdaki komutu çalıştırabilirsiniz:

gcloud beta events types describe google.cloud.scheduler.job.v1.executed

Zamanlayıcıyı oluşturmak için bir Cloud Scheduler konumu seçin:

export SCHEDULER_LOCATION=europe-west1

Google Cloud Scheduler'da her dakika yürütülecek bir iş oluşturacak ve hedef hizmeti çağıracak bir tetikleyici oluşturun:

gcloud beta events triggers create trigger-scheduler \
  --namespace ${NAMESPACE} \
  --target-service=${SERVICE_NAME} \
  --type=google.cloud.scheduler.job.v1.executed \
  --parameters location=${SCHEDULER_LOCATION} \
  --parameters schedule="* * * * *" \
  --parameters data="trigger-scheduler-data"

Tetikleyiciyi test etme

Tetikleyicinin başarıyla oluşturulduğunu onaylamak için tüm tetikleyicileri listeleyin:

gcloud beta events triggers list

Tetikleyici oluşturma işleminin yayılması ve etkinlikleri filtrelemeye başlaması için 10 dakika kadar bekleyin. Hazır olduğunda oluşturma etkinliklerini filtreleyip hizmete gönderir.

Cloud Console'da Cloud Run hizmetinin günlüklerini kontrol ederseniz alınan etkinliği görürsünüz.

Tetikleyiciyi silme

Dilerseniz test tamamlandıktan sonra tetikleyiciyi silebilirsiniz:

gcloud beta events triggers delete trigger-scheduler

15. Özel Etkinlikler (Aracı Uç Noktası)

Bu codelab'in bu bölümünde, Broker'ı kullanarak özel etkinlikler oluşturacak ve tüketeceksiniz.

Etkinlikler Üretmek İçin Curl Pod Oluşturma

Etkinlikler genellikle programlı şekilde oluşturulur. Ancak bu adımda, bağımsız etkinlikleri manuel olarak göndermek ve bu etkinliklerin doğru tüketici tarafından nasıl alındığını görmek için curl simgesini kullanacaksınız.

Etkinlik üreticisi olarak işlev gören bir kapsül oluşturmak için aşağıdaki komutu çalıştırın:

cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
  labels:
    run: curl
  name: curl
  namespace: $NAMESPACE
spec:
  containers:
  - image: radial/busyboxplus:curl
    imagePullPolicy: IfNotPresent
    name: curl
    resources: {}
    stdin: true
    terminationMessagePath: /dev/termination-log
    terminationMessagePolicy: File
    tty: true
EOF

curl Pod'unun düzgün çalıştığını doğrulayın. curl adlı bir kapsül görmeniz gerekir. Bu kapsülde Status=Running bulunur:

kubectl get pod curl -n ${NAMESPACE}

Tetikleyici oluşturma

Yayınlayacağınız belirli CloudEvents türü (bu örnekte alpha-type) üzerinde filtre içeren bir tetikleyici oluşturursunuz. Herhangi bir sayıda CloudEvents özelliği ve uzantı üzerinde tam eşleşme filtrelemenin desteklendiğini unutmayın. Filtreniz birden fazla özellik ayarlarsa tetikleyicinin filtreleyebilmesi için etkinlikte tüm özellikler bulunmalıdır. Aksine, filtre belirtmezseniz tüm etkinlikler hizmetinizde alınır.

Tetikleyiciyi oluşturun:

gcloud beta events triggers create trigger-custom \
  --namespace ${NAMESPACE} \
  --target-service ${SERVICE_NAME} \
  --type=alpha-type \
  --custom-type

Tetikleyiciyi test etme

Tetikleyicinin başarıyla oluşturulduğunu onaylamak için tüm tetikleyicileri listeleyin:

gcloud beta events triggers list

Broker'a bir HTTP isteği göndererek etkinlik oluşturun. Aşağıdaki komutu çalıştırarak Broker URL'sini kendinize hatırlatın:

kubectl get brokers -n ${NAMESPACE}

NAME      READY   REASON   URL
default   True             http://default-broker.<NAMESPACE>.svc.cluster.local

Daha önce oluşturduğunuz curl pod'una SSH ile bağlanın:

kubectl --namespace ${NAMESPACE} attach curl -it

Pod'a SSH ile bağlandınız ve artık HTTP isteği gönderebilirsiniz. Aşağıdakine benzer bir istem görüntülenir:

Defaulting container name to curl.
Use 'kubectl describe pod/curl -n default' to see all of the containers in this pod.
If you don't see a command prompt, try pressing enter.
[ root@curl:/ ]$

Etkinlik oluşturma:

curl -v "<BROKER-URL>" \
-X POST \
-H "Ce-Id: my-id" \
-H "Ce-Specversion: 1.0" \
-H "Ce-Type: alpha-type" \
-H "Ce-Source: my-source" \
-H "Content-Type: application/json" \
-d '{"msg":"send-cloudevents-to-broker"}'

Etkinlik alındıysa HTTP 202 Accepted yanıtı alırsınız. Ctrl + D ile SSH oturumundan çıkın.

Yayınlanan etkinliğin gönderildiğini doğrulamak için Cloud Run hizmetinin günlüklerine bakın:

kubectl logs --selector serving.knative.dev/service=$SERVICE_NAME \
 -c user-container -n $NAMESPACE --tail=100

Tetikleyiciyi silme

Dilerseniz test tamamlandıktan sonra tetikleyiciyi silebilirsiniz:

gcloud beta events triggers delete trigger-custom

16. Tebrikler!

Codelab'i tamamladığınız için tebrik ederiz.

İşlediğimiz konular

  • Cloud Run for Anthos Etkinlikleri ile ilgili uzun vadeli vizyon
  • Events for Cloud Run for Anthos'un mevcut durumu
  • Cloud Run havuzu oluşturma
  • Cloud Pub/Sub için etkinlik tetikleyici oluşturma
  • Denetleme günlükleri için etkinlik tetikleyici oluşturma
  • Cloud Storage için etkinlik tetikleyici oluşturma
  • Cloud Scheduler için etkinlik tetikleyici oluşturma
  • Özel etkinlikler oluşturma ve kullanma