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ızı sağlar. Açık kaynaklı Knative'den derlenen bu platform, container'larınızı Cloud Run ile tümüyle yönetilecek şekilde veya Google Kubernetes Engine kümenizde Cloud Run for Anthos ile çalıştırmayı seçebilmenizi sağlar.

cb762f29e9183a3f.png

Eventarc, çeşitli hizmetleri (Cloud Run, Cloud Functions, Workfklows) çeşitli kaynaklardan gelen etkinliklere bağlamayı kolaylaştırır. Mikro hizmetlerin serbest bağlantılı olduğu ve dağıtıldığı etkinlik odaklı mimariler derlemenize olanak tanır. Ayrıca sizin için etkinlik kullanımı, teslim, güvenlik, yetkilendirme ve hata gidermeyle de ilgilenir. Bu da geliştiricilerin çevikliğini ve uygulama esnekliğini artırır.

Bu codelab'de Eventarc hakkında bilgi edineceksiniz. Daha açık belirtmek gerekirse Eventarc ile Pub/Sub, Cloud Storage ve Cloud Denetleme Günlüklerinden gelen etkinlikleri dinleyecek ve bir Cloud Run hizmetine ileteceksiniz.

Neler öğreneceksiniz?

  • Eventarc'ın vizyonu
  • Eventarc'taki etkinlikleri keşfedin
  • 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 ulaştırmayı amaçlar.

59b147dc030b2b0b.png

Google Cloud kaynakları

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

Google kaynakları

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

Özel kaynaklar

Google'a ait olmayan ve son kullanıcıların kendisi tarafından oluşturulan etkinlik kaynakları

3. taraf kaynaklar

Google'a ait olmayan veya müşteriler tarafından üretilen etkinlik kaynakları. Buna, üçüncü taraf sağlayıcılar ve iş ortakları tarafından sahip olunan ve yönetilen Check Point CloudGuard, Datadog, ForgeRock, Lacework gibi popüler etkinlik kaynakları da dahildir.

Etkinlikler, hizmetler arası birlikte çalışabilirlik için CloudEvents v1.0 biçimine göre normalleştirilir. CloudEvents, etkinlik verilerini ortak biçimlerde açıklayan ve hizmetler, platformlar ve sistemler genelinde birlikte çalışabilirlik sağlayan, tedarikçiden bağımsız bir açık spesifikasyondur.

3. Kurulum ve Gereksinimler

Kendi hızınızda ortam kurulumu

  1. Google Cloud Console'da oturum açıp 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 dizesidir ve bunu istediğiniz zaman güncelleyebilirsiniz.
  • Proje Kimliği, tüm Google Cloud projelerinde benzersiz olmalıdır ve değiştirilemez (belirlendikten sonra değiştirilemez). Cloud Console, otomatik olarak benzersiz bir dize oluşturur. bunun ne olduğunu umursamıyorsunuz. Çoğu codelab'de, Proje Kimliğine referans vermeniz gerekir (ve bu kimlik genellikle PROJECT_ID olarak tanımlanır). Beğenmezseniz başka bir rastgele kod oluşturun ya da kendi proje kimliğinizi deneyip mevcut olup olmadığına bakın. Sıcaklık "soğudu" takip etmeniz gerekir.
  • Bazı API'lerin kullandığı üçüncü bir değer, yani Proje Numarası daha vardır. Bu değerlerin üçü 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 çalıştırmanın maliyeti, yüksek değildir. Bu eğitim dışında faturalandırmayla karşılaşmamak için kaynakları kapatmak istiyorsanız tüm "temizleme" işlemlerini uygulayın buradaki talimatları uygulayın. Yeni Google Cloud kullanıcıları, 300 ABD doları değerindeki ücretsiz denemeden yararlanabilir.

Cloud Shell'i başlatma

Google Cloud dizüstü bilgisayarınızdan uzaktan çalıştırılabilse de 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 yer alan Cloud Shell simgesini tıklayın:

55efc1aaa7a4d3ad.png

Ortamı sağlamak ve bağlamak yalnızca birkaç dakika sürer. Tamamlandığında şuna benzer bir sonuç görmeniz gerekir:

7ffe5cbb04455448

İhtiyacınız olan tüm geliştirme araçlarını bu sanal makinede bulabilirsiniz. 5 GB boyutunda kalıcı bir ana dizin sunar ve Google Cloud üzerinde çalışarak ağ performansını ve kimlik doğrulamasını büyük ölçüde iyileştirir. Bu laboratuvardaki tüm çalışmalarınızı yalnızca bir tarayıcıyla 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

Etkinlikleri almak için bir Cloud Run hizmeti dağıtma CloudEvents içeriğini günlüğe kaydeden Cloud Run'ın Hello container'ını dağıtacaksınız.

İlk olarak, 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ılıp dağıtılmadığını tekrar kontrol etmek 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 neler olduğunu, bunların yayınlayabilecekleri etkinlik türlerini ve tetikleyicileri kullanmak için tetikleyicileri nasıl yapılandıracağınızı keşfedebilirsiniz.

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ünü yayınlayan 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 bir 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

Etkinlik almanın bir yolu da Cloud Pub/Sub'dır. Tüm uygulamalar Pub/Sub'a mesaj yayınlayabilir ve bu mesajlar, Eventarc üzerinden 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ı da olmalıdır. Bir hizmet hesabı oluşturun:

SERVICE_ACCOUNT=eventarc-trigger-sa

gcloud iam service-accounts create $SERVICE_ACCOUNT

Oluştur

Pub/Sub konusunda yayınlanan etkinlikleri, dağıtılan Cloud Run hizmetimize 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, kapaklar altında bir konu oluşturur. Şimdi bunu bulalım ve bir değişkene atayalım:

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

Konuda bir mesaj yayınlamak için gcloud öğesini 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örebilirsiniz:

69e0177e04a0d1af.png

Mevcut bir Pub/Sub konusuyla oluşturma

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

Bunun işleyiş şeklini öğrenmek 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şturun:

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 bir 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, şunlardan etkinlik almak için bir paket oluşturun:

BUCKET_NAME=eventarc-gcs-$PROJECT_ID

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

Hizmet hesabının bir 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

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 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:

904cfc93bb8e8df1.png

8. Cloud Denetleme Günlükleri 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 Denetleme Günlüğü tetikleyicisi oluşturacaksınız.

Kurulum

Bir hizmetten etkinlik almak için Cloud Denetleme Günlükleri'ni etkinleştirmeniz gerekir. Cloud Console'da sol üstteki menüden IAM & Admin ve Audit Logs'yi seçin. Hizmetler listesinde Google Cloud Storage'i işaretleyin:

3c654597faed237c.png

Sağ tarafta Admin, Read ve Write öğelerinin seçili olduğundan emin olun ve Save'i 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

Denetleme 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öreceksiniz:

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

Daha önce yaptığınız gibi aynı dosyayı 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 bakış edinebilir, 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ıklarsanız tetikleyicinin ayrıntılarını görebilir, düzenleyebilir veya silebilirsiniz:

b4d8bbc6601a8b9e.png

Ayrıca Create trigger öğesini seçip tetikleyicinin ayrıntılarını girerek yeni bir tetikleyici oluşturabilirsiniz:

3ee290ec72f130d5.png

10. Tebrikler!

Codelab'i tamamladığınız için tebrikler.

İşlediğimiz konular

  • Eventarc'ın vizyonu
  • Eventarc'taki etkinlikleri keşfedin
  • 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