Eventarc etkinlikleri ile Cloud Run'ı tetikleme

1. Giriş

894762ebb681671c.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.

cb762f29e9183a3f.png

Eventarc, çeşitli hizmetleri (Cloud Run, Cloud Functions, Workflows) farklı 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 Eventarc hakkında bilgi edineceksiniz. Daha net açıklamak gerekirse Eventarc ile Pub/Sub, Cloud Storage ve Cloud Denetleme Günlükleri'nden gelen etkinlikleri dinleyip bir Cloud Run hizmetine ileteceksiniz.

Neler öğreneceksiniz?

  • Eventarc'ın vizyonu
  • Eventarc'taki etkinlikleri keşfetme
  • Cloud Run havuzu oluşturma
  • Pub/Sub için tetikleyici oluşturma
  • Cloud Storage için tetikleyici oluşturma
  • Cloud Denetleme Günlükleri için tetikleyici oluşturma
  • Eventarc kullanıcı arayüzünü keşfetme

2. Eventarc'ın vizyonu

Eventarc, çeşitli Google, Google Cloud ve üçüncü taraf etkinlik kaynaklarından gelen etkinlikleri Google Cloud etkinlik hedeflerine iletmeyi amaçlar.

59b147dc030b2b0b.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ı

Üçüncü taraf kaynakları

Ne Google'a ait olan ne de müşteri tarafından üretilen etkinlik kaynakları. Buna, üçüncü taraf sağlayıcılar ve iş ortakları tarafından sahip olunan ve bakımı yapılan Check Point CloudGuard, Datadog, ForgeRock, Lacework 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.

3. Kurulum ve Gereksinimler

Yönlendirmesiz ortam kurulumu

  1. Google 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.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • Proje adı, bu projenin katılımcıları için görünen addır. Google API'leri tarafından kullanılmayan bir karakter dizisidir 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şturabilir veya kendi kimliğinizi deneyip kullanılabilir olup olmadığını görebilirsiniz. Proje oluşturulduktan sonra bu değer "dondurulur".
  • Bazı API'lerin kullandığı üçüncü bir değer olan Proje Numarası da vardır. Bu üç değer hakkında daha fazla bilgiyi belgelerde bulabilirsiniz.
  1. Ardından, Cloud kaynaklarını/API'lerini 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ı kapatmak üzere codelab'in sonunda bulunan "temizleme" talimatlarını uygulayın. 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:

55efc1aaa7a4d3ad.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:

7ffe5cbb04455448.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.

Başlamadan önce

Cloud Shell'de proje kimliğinizin ayarlandığından emin olun:

PROJECT_ID=your-project-id
gcloud config set project $PROJECT_ID

4. Cloud Run hizmeti dağıtma

Etkinlik almak için bir Cloud Run hizmeti dağıtın. CloudEvents'in içeriklerini günlük kaydı yapan Cloud Run'ın Hello container'ını dağıtacaksınız.

Öncelikle Cloud Run için gerekli hizmetleri etkinleştirin:

gcloud services enable run.googleapis.com

Hello container'ını Cloud Run'a dağıtın:

REGION=us-central1
SERVICE_NAME=hello

gcloud run deploy $SERVICE_NAME \
  --allow-unauthenticated \
  --image=gcr.io/cloudrun/hello \
  --region=$REGION

İşlem başarılı olursa komut satırında hizmet URL'si gösterilir. Hizmetin dağıtıldığını doğrulamak için hizmet URL'sini herhangi bir tarayıcı penceresinde açabilirsiniz.

5. Etkinlik Keşfi

Eventarc'ta tetikleyici oluşturmadan önce etkinlik kaynaklarının ne olduğunu, hangi etkinlik türlerini yayınlayabileceklerini ve bunları kullanmak için tetikleyicilerin nasıl yapılandırılacağını öğrenebilirsiniz.

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

gcloud beta eventarc attributes types list

NAME                                           DESCRIPTION
google.cloud.audit.log.v1.written              Cloud Audit Log written
google.cloud.pubsub.topic.v1.messagePublished  Cloud Pub/Sub message published
google.cloud.storage.object.v1.archived         Cloud Storage: Sent when a live version of an (object versioned) object is archived or deleted.
google.cloud.storage.object.v1.deleted          Cloud Storage: Sent when an object has been permanently deleted.
google.cloud.storage.object.v1.finalized        Cloud Storage: Sent when a new object (or a new generation of an existing object).
google.cloud.storage.object.v1.metadataUpdated  Cloud Storage: Sent when the metadata of an existing object changes.

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

gcloud beta eventarc attributes types describe google.cloud.audit.log.v1.written

attributes: type,serviceName,methodName,resourceName
description: 'Cloud Audit Log: Sent when a log is written.'
name: google.cloud.audit.log.v1.written

Belirli bir etkinlik türü yayan hizmetlerin listesini görmek için:

gcloud beta eventarc attributes service-names list --type=google.cloud.audit.log.v1.written

SERVICE_NAME                                DISPLAY_NAME
accessapproval.googleapis.com               Access Approval
accesscontextmanager.googleapis.com         Access Context Manager
admin.googleapis.com                        Google Workspace Admin
aiplatform.googleapis.com                   AI Platform (under Vertex AI)
apigee.googleapis.com                       Apigee
apigeeconnect.googleapis.com                Apigee Connect
...
workflows.googleapis.com                    Workflows

Her hizmetin yayınlayabileceği yöntem adlarının (alt etkinlikler) listesini görmek için:

gcloud beta eventarc attributes method-names list --type=google.cloud.audit.log.v1.written --service-name=workflows.googleapis.com

METHOD_NAME
google.cloud.workflows.v1.Workflows.CreateWorkflow
google.cloud.workflows.v1.Workflows.DeleteWorkflow
google.cloud.workflows.v1.Workflows.GetWorkflow
google.cloud.workflows.v1.Workflows.ListWorkflows
google.cloud.workflows.v1.Workflows.UpdateWorkflow
google.cloud.workflows.v1beta.Workflows.CreateWorkflow
google.cloud.workflows.v1beta.Workflows.DeleteWorkflow
google.cloud.workflows.v1beta.Workflows.GetWorkflow
google.cloud.workflows.v1beta.Workflows.ListWorkflows
google.cloud.workflows.v1beta.Workflows.UpdateWorkflow

6. Pub/Sub tetikleyicisi oluşturma

Etkinlikleri almanın bir yolu Cloud Pub/Sub'ı kullanmaktır. Herhangi bir uygulama, Pub/Sub'a mesaj yayınlayabilir ve bu mesajlar Eventarc aracılığıyla Cloud Run'a teslim edilebilir.

Kurulum

Tetikleyici oluşturmadan önce Eventarc için gerekli hizmetleri etkinleştirin:

gcloud services enable eventarc.googleapis.com

Tetikleyiciler tarafından kullanılacak bir hizmet hesabınız da olmalıdır. Hizmet hesabı oluşturun:

SERVICE_ACCOUNT=eventarc-trigger-sa

gcloud iam service-accounts create $SERVICE_ACCOUNT

Oluştur

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

TRIGGER_NAME=trigger-pubsub

gcloud eventarc triggers create $TRIGGER_NAME \
  --destination-run-service=$SERVICE_NAME \
  --destination-run-region=$REGION \
  --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
  --location=$REGION \
  --service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com

Test

Pub/Sub tetikleyicisi, arka planda bir konu oluşturur. Bu değeri bulup bir değişkene atayalım:

TOPIC_ID=$(gcloud eventarc triggers describe $TRIGGER_NAME --location $REGION --format='value(transport.pubsub.topic)')

Konuda mesaj yayınlamak için gcloud simgesini kullanın:

gcloud pubsub topics publish $TOPIC_ID --message="Hello World"

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

69e0177e04a0d1af.png

Mevcut bir Pub/Sub konusuyla oluşturma

Varsayılan olarak, bir Pub/Sub tetikleyici oluşturduğunuzda Eventarc, uygulamanız ile Cloud Run hizmeti arasında aktarım konusu olarak kullanabileceğiniz bir konu oluşturur. Bu, Pub/Sub destekli bir tetikleyiciyi kolayca ve hızlı bir şekilde oluşturmak için kullanışlıdır ancak bazen mevcut bir konuyu kullanmak isteyebilirsiniz. Eventarc, --transport-topic gcloud işaretiyle aynı projede mevcut bir Pub/Sub konusu belirtmenize olanak tanır.

Bunun nasıl çalıştığını görmek için taşıma konusu olarak kullanılacak bir Pub/Sub konusu oluşturun:

TOPIC_ID=eventarc-topic

gcloud pubsub topics create $TOPIC_ID

Tetikleyici oluşturma:

TRIGGER_NAME=trigger-pubsub-existing

gcloud eventarc triggers create $TRIGGER_NAME \
  --destination-run-service=$SERVICE_NAME \
  --destination-run-region=$REGION \
  --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
  --location=$REGION \
  --transport-topic=projects/$PROJECT_ID/topics/$TOPIC_ID \
  --service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com

Konuya mesaj göndererek tetikleyiciyi test edebilirsiniz:

gcloud pubsub topics publish $TOPIC_ID --message="Hello again"

7. Cloud Storage tetikleyicisi oluşturma

Bu adımda, Cloud Storage'daki etkinlikleri dinlemek için bir tetikleyici oluşturacaksınız.

Kurulum

Öncelikle, etkinliklerin alınacağı bir paket oluşturun:

BUCKET_NAME=eventarc-gcs-$PROJECT_ID

gsutil mb -l $REGION gs://$BUCKET_NAME

Hizmet hesabının Cloud Storage tetikleyicisinde kullanılabilmesi için eventarc.eventReceiver rolünü verin:

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --role roles/eventarc.eventReceiver \
  --member serviceAccount:$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com

Ayrıca, Cloud Storage tetikleyicileri için Cloud Storage hizmet hesabına pubsub.publisher rolünü de eklemeniz gerekir:

SERVICE_ACCOUNT_STORAGE=$(gsutil kms serviceaccount -p $PROJECT_ID)

gcloud projects add-iam-policy-binding $PROJECT_ID \
    --member serviceAccount:$SERVICE_ACCOUNT_STORAGE \
    --role roles/pubsub.publisher

Oluştur

Yeni dosya oluşturma etkinliklerini paketten hizmetinize yönlendirmek için bir tetikleyici oluşturun:

TRIGGER_NAME=trigger-storage

gcloud eventarc triggers create $TRIGGER_NAME \
  --destination-run-service=$SERVICE_NAME \
  --destination-run-region=$REGION \
  --event-filters="type=google.cloud.storage.object.v1.finalized" \
  --event-filters="bucket=$BUCKET_NAME" \
  --location=$REGION \
  --service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com

Test

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

gcloud eventarc triggers list

Cloud Storage paketine dosya yükleme:

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:

904cfc93bb8e8df1.png

8. Cloud Audit Logs tetikleyicisi oluşturma

Cloud Storage tetikleyicisi, Cloud Storage etkinliklerini dinlemenin daha iyi bir yolu olsa da bu adımda aynı işlemi yapmak için bir Cloud Audit Log tetikleyicisi oluşturursunuz.

Kurulum

Bir hizmetten etkinlik almak için Cloud Audit Logs'u etkinleştirmeniz gerekir. Cloud Console'da sol üstteki menüden IAM & Admin ve Audit Logs simgelerini seçin. Hizmetler listesinde Google Cloud Storage işaretini kaldırın:

3c654597faed237c.png

Sağ tarafta Admin, Read ve Write seçeneklerinin işaretli olduğundan emin olun ve Save simgesini tıklayın:

1deb3ad78f11dd5f.png

Oluştur

Yeni dosya oluşturma etkinliklerini paketten hizmetinize yönlendirmek için bir tetikleyici oluşturun:

TRIGGER_NAME=trigger-auditlog-storage

gcloud eventarc triggers create $TRIGGER_NAME\
  --destination-run-service=$SERVICE_NAME \
  --destination-run-region=$REGION \
  --event-filters="type=google.cloud.audit.log.v1.written" \
  --event-filters="serviceName=storage.googleapis.com" \
  --event-filters="methodName=storage.objects.create" \
  --event-filters-path-pattern="resourceName=/projects/_/buckets/$BUCKET_NAME/objects/*" \
  --location=$REGION \
  --service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com

Test

Denetim günlükleri tetikleyicilerinin başlatılması biraz zaman alır. Tüm tetikleyicileri listeleyerek tetikleyicinin oluşturulup oluşturulmadığını kontrol edebilirsiniz:

gcloud eventarc triggers list

ACTIVE alanının Yes olduğunu görürsünüz:

NAME                          TYPE                                       DESTINATION               ACTIVE
trigger-auditlog-storage  google.cloud.audit.log.v1.written              Cloud Run service: hello  Yes

Aynı dosyayı daha önce yaptığınız gibi Cloud Storage paketine yükleyin:

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:

7be7859bcc8976f8.png

9. Eventarc kullanıcı arayüzünü keşfetme

Bu adımda, Google Cloud Console'daki Eventarc kullanıcı arayüzünü keşfedeceksiniz. Eventarc kullanıcı arayüzünde tüm tetikleyicilere genel bir bakış atabilir, bunları düzenleyip silebilir ve Google Cloud Console'dan yeni tetikleyiciler oluşturabilirsiniz.

Google Cloud'un Eventarc bölümüne gidin:

81e139f17e0d29bf.png

Daha önce oluşturduğunuz tetikleyicilerin listesini görürsünüz:

3240c7c830398718.png

Bir tetikleyiciyi tıkladığınızda tetikleyicinin ayrıntılarını görebilir, tetikleyiciyi düzenleyebilir veya silebilirsiniz:

b4d8bbc6601a8b9e.png

Ayrıca, Create trigger simgesini seçip tetikleyiciyle ilgili ayrıntıları girerek de yeni bir tetikleyici oluşturabilirsiniz:

3ee290ec72f130d5.png

10. Tebrikler!

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

İşlediğimiz konular

  • Eventarc'ın vizyonu
  • Eventarc'taki etkinlikleri keşfetme
  • Cloud Run havuzu oluşturma
  • Pub/Sub için tetikleyici oluşturma
  • Cloud Storage için tetikleyici oluşturma
  • Cloud Denetleme Günlükleri için tetikleyici oluşturma
  • Eventarc kullanıcı arayüzünü keşfetme