Eventarc ile İş Akışlarını Tetikleme

1. Genel Bakış

Bu laboratuvarda, bir Pub/Sub konusunu Workflows hizmetine bağlayan bir Eventarc tetikleyicisi oluşturacaksınız. Eventarc, hizmetler arası iletişimi ayırmanıza olanak tanıyarak çözümünüzü daha genişletilebilir ve etkinliğe dayalı hale getirir. Cymbal Eats'te sipariş veren müşterilerin ödül puanlarını hesaplamak için bir iş süreci yürütmek üzere birden fazla adım içeren bir iş akışı oluşturacaksınız. İş akışı, iş mantığını yürütmek için özel bir Cloud Run hizmeti API'sini çağırır. Cloud Run hizmeti yalnızca dahili trafiğe izin verecek şekilde yapılandırılmış ve kimlik doğrulama gerektiriyor. İş akışı, hesaplanan ödül puanları hakkında Sipariş Hizmeti'ni bilgilendirmek için Pub/Sub konusuna bir mesaj yayınlar.

c6d4337a47b55333.png

Eventarc nedir?

Eventarc, temel altyapıyı uygulamanız, özelleştirmeniz veya bakımını yapmanız gerekmeden etkinliğe dayalı mimariler oluşturmanıza olanak tanır. Eventarc, ayrılmış mikro hizmetler arasında durum değişikliklerinin (etkinlikler) akışını yönetmek için standartlaştırılmış bir çözüm sunar. Tetiklendiğinde Eventarc, bu etkinlikleri Pub/Sub abonelikleri aracılığıyla çeşitli hedeflere (ör. Workflows veya Cloud Run) kullanırken teslimat, güvenlik, yetkilendirme, gözlemlenebilirlik ve hata işlemeyi sizin için yönetir.

Google Etkinlik sağlayıcıları

  • 90'dan fazla Google Cloud sağlayıcısı. Bu sağlayıcılar, etkinlikleri doğrudan kaynaktan (ör. Cloud Storage) veya Cloud Denetleme Günlükleri girişleri aracılığıyla gönderir.
  • Pub/Sub sağlayıcıları. Bu sağlayıcılar, Pub/Sub mesajlarını kullanarak Eventarc'a etkinlik gönderir.

Üçüncü taraf sağlayıcılar

Üçüncü taraf sağlayıcılar, Eventarc kaynağı sunan Google dışı tüzel kişilerdir.

Eventarc tetikleyicileri

  • Cloud Pub/Sub etkinlikleri. Eventarc, Pub/Sub konularına yayınlanan mesajlarla tetiklenebilir.
  • Cloud Audit Logs (CAL) etkinlikleri. Cloud Denetleme Günlükleri, her Cloud projesi, klasörü ve kuruluşu için Yönetici Etkinliği ve Veri Erişimi denetleme günlükleri sağlar.
  • Doğrudan etkinlikler Eventarc, çeşitli doğrudan etkinlikler (ör. Cloud Storage paketi güncellemesi veya Firebase Remote Config şablonu güncellemesi) tarafından tetiklenebilir.

Etkinlik hedefleri

  • İş akışları
  • Cloud Run
  • GKE
  • Cloud Functions( 2. nesil)

c7ca054200edf1b3.png

Workflows nedir?

Workflows, mikro hizmetleri, görevleri ve API'leri entegre etmenizi sağlayan, tümüyle yönetilen bir hizmettir. Workflows, sunucusuz bir hizmettir ve talebinizi karşılayacak şekilde ölçeklenir.

İş akışlarının kullanım alanları:

  • Etkinliğe dayalı iş akışları, tanımlanan tetikleyiciler üzerinde yürütülür. Örneğin, yeni bir sipariş gönderildiğinde ve müşteri bağlılığı puanlarını hesaplamak istediğinizde. Alternatif olarak, bir sipariş iptal edildiğinde etkinlik yayınlanabilir ve ilgilenen tüm hizmetler etkinliği işler.
  • Toplu iş akışları, Cloud Scheduler'ı kullanarak düzenli olarak iş çalıştırır. Örneğin, başarısız durumdaki menü öğelerini kontrol edip silmek için gece çalıştırılan bir iş.

Workflows, hizmetleri düzenleyen iş akışları için idealdir. Bir yıla kadar bekleme ve yeniden deneme içeren süreçleri otomatikleştirebilirsiniz.

İş akışlarının avantajları:

  • Koda göre yapılandırma: Mantığı kod yazmak yerine yapılandırmaya taşıyarak teknik borcu azaltın.
  • Mimarinizi basitleştirin. Durumlu iş akışları, ek bağımlılıklar olmadan karmaşık hizmet entegrasyonlarını görselleştirmenize ve izlemenize olanak tanır.
  • Güvenilirlik ve hatadan etkilenmeme özelliklerini dahil edin. Diğer sistemler başarısız olsa bile varsayılan veya özel yeniden deneme mantığı ve hata işleme ile denetim hataları. İlerleme durumunu takip etmenize yardımcı olmak için her adımı Cloud Spanner'da kontrol edin.
  • Bakım gerektirmez. İhtiyaca göre ölçeklendirin: Yama uygulamanız veya bakım yapmanız gerekmez. Yalnızca iş akışlarınız çalıştığında ödeme yapın. Bekleme veya etkin olmama durumlarında ücret alınmaz.

Bu laboratuvarda, etkinliğe dayalı bir iş akışı yapılandıracaksınız.

Öğrenecekleriniz

Bu laboratuvarda şunları nasıl yapacağınızı öğreneceksiniz:

  • Workflows'u tetiklemek için Pub/Sub konusunu ve Eventarc'ı yapılandırma
  • Cloud Run hizmetini çağırmak ve Pub/Sub'a mesaj yayınlamak için iş akışını yapılandırma
  • Cloud Logging'de ve gcloud CLI'yı kullanarak Workflows yapılandırılmış günlüklerini sorgulama

Ön koşullar

  • Bu laboratuvarda, Cloud Console ve Cloud Shell ortamlarına aşina olduğunuz varsayılır.
  • Daha önce Cloud Run ve Cloud Pub/Sub deneyimi yaşamış olmanız yardımcı olur ancak zorunlu değildir.

2. Kurulum ve Gereksinimler

Cloud projesi 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.pnga99b7ace416376c4.pngbd84a6d3004737c5.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. Dilediğiniz zaman bunu güncelleyebilirsiniz.
  • Proje kimliği, tüm Google Cloud projelerinde benzersizdir ve sabittir (ayarlandıktan sonra değiştirilemez). Cloud Console otomatik olarak benzersiz bir dize 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. Oluşturulan kimliği beğenmezseniz başka bir rastgele kimlik oluşturabilirsiniz. Dilerseniz kendi adınızı deneyerek kullanılabilir olup olmadığını kontrol edebilirsiniz. Bu adımdan sonra değiştirilemez ve proje süresince geçerli kalır.
  • 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 oluşturduğunuz kaynakları veya projenin tamamını silebilirsiniz. Google Cloud'un yeni kullanıcıları 300 ABD doları değerinde ücretsiz deneme programından yararlanabilir.

Ortam Kurulumu

Arama çubuğunun sağındaki simgeyi tıklayarak Cloud Shell'i etkinleştirin.

eb0157a992f16fa3.png

Depoyu klonlayın ve dizine gidin, aşağıdaki komutu kopyalayıp terminale yapıştırın ve Enter tuşuna basın:

git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git && cd cymbal-eats/customer-service

lab-setup.sh komutunu çalıştırarak gerekli bağımlılıkları dağıtın.

Aşağıdaki kaynaklar oluşturulur:

  • AlloyDB kümesi ve örneği
  • Cloud Run işi ve müşteri hizmetleri için container görüntülerini depolamak üzere Artifact Registry
  • Cloud Run hizmetinin ve işinin AlloyDB veritabanıyla iletişim kurması için VPC erişim bağlayıcısı
  • AlloyDB veritabanı oluşturmak için Cloud Run işi
  • Cloud Run müşteri hizmetleri: Quarkus çerçevesini kullanan Java tabanlı mikro hizmet.
./lab-setup.sh

Yetkilendirme istenirse devam etmek için "Yetkilendir"i tıklayın.

6356559df3eccdda.png

Kurulum yaklaşık 10 dakika sürer.

Diğer adımları çalıştırmadan önce komut dosyasının tamamlanmasını ve aşağıdaki çıktıyı görmeyi bekleyin.

Deploying container to Cloud Run service [customer-service] in project [cymbal-eats-19227-5681] region [us-east1]
OK Deploying new service... Done.                                                   
  OK Creating Revision...
  OK Routing traffic...
Done.
Service [customer-service] revision [customer-service-00001-mid] has been deployed and is serving 100 percent of traffic.
Service URL: https://customer-service-e4p5zon5rq-ue.a.run.app

Bir sonraki bölümü inceleyip sonraki adımdan devam etmek için geri dönebilirsiniz.

3. İş Akışını İnceleme

İş Akışlarıyla İlgili Temel Kavramlar

İş akışı, Workflows söz dizimi( YAML veya JSON) kullanılarak açıklanan bir dizi adımdan oluşur.

Bir iş akışı oluşturulduktan sonra dağıtılır ve yürütülmeye hazır hale gelir.

Yürütme, bir iş akışının tanımında yer alan mantığın tek bir kez çalıştırılmasıdır. Çalıştırılmamış bir iş akışı ücretlendirilmez. Tüm iş akışı yürütmeleri birbirinden bağımsızdır ve ürünün hızlı ölçeklenebilmesi sayesinde eşzamanlı olarak çok sayıda yürütme gerçekleştirilebilir.

Yürütme kontrolleri

  • Adımlar: İş akışı oluşturmak için Workflows söz dizimini kullanarak istenen steps ve yürütme sırasını tanımlarsınız. Her iş akışında en az bir adım olmalıdır.
  • Koşullar: Bir ifadenin değerinin iş akışının yürütülme akışını kontrol etmesine olanak tanıyan bir seçim mekanizması olarak switch bloğunu kullanabilirsiniz.
  • Yinelemeler: Bir sayı dizisi veya liste ya da harita gibi bir veri koleksiyonu üzerinde yineleme yapmak için for döngüsü kullanabilirsiniz.
  • Alt iş akışları: Alt iş akışları, bir programlama dilindeki rutin veya işlevlere benzer şekilde çalışır. İş akışınızın birden çok kez tekrarlayacağı bir adımı veya adım grubunu kapsüllemenize olanak tanır.

Yürütmeleri tetikleme

  • Manuel: İş akışlarını Google Cloud Console'dan veya Google Cloud KSA'yı kullanarak komut satırından yönetebilirsiniz.
  • Programatik: İş akışlarını yönetmek için Workflows API'nin Cloud Client Libraries'i veya REST API'si kullanılabilir.
  • Planlanmış: Bir iş akışını belirli bir zamanlamada çalıştırmak için Cloud Scheduler'ı kullanabilirsiniz.

Çalışma Zamanı Bağımsız Değişkenleri

Çalışma zamanında iletilen verilere, ana iş akışınıza (ana blokta yer alan) bir params alanı eklenerek erişilebilir. Ana blok, geçerli bir JSON veri türü olan tek bir bağımsız değişkeni kabul eder. Params alanı, iş akışının ilettiğiniz verileri depolamak için kullandığı değişkeni adlandırır.

Cloud Run hizmeti kimlik doğrulaması iş akışı

Müşteri hizmeti, bu depoda yer alan, Cloud Run'da çalışan ve yalnızca dahili ağlardan gelen kimliği doğrulanmış isteklere izin verecek şekilde yapılandırılmış örnek bir uygulamadır. Cloud Run hizmetinde kimlik doğrulamak için isteğe Google tarafından imzalanmış bir OpenID Connect(OIDC) jetonu eklemek üzere İş Akışları'nı yapılandıracaksınız.

Hizmetten hizmete kimlik doğrulama hakkında daha fazla bilgi edinmek için belgeleri inceleyin.

İş akışı kimlik doğrulaması, auth bölümü kullanılarak args bloğunda yapılandırılır.

rewardsWorkflow.yaml.tmpl

   - create_customer:
        call: http.post
        args:
          url: CUSTOMER_SERVICE_URL/customer
          auth:
            type: OIDC

İş Akışı Mantığı

Müşteri yoksa bu iş akışı, önce müşteri oluşturmak için bir API çağrısı yapar, ardından ödül puanlarını günceller. Siparişin toplam tutarına göre iş akışı, müşterinin ödül puanlarını hesaplamak için bir çarpan seçer. Ayrıntılar için aşağıdaki örneğe bakın.

  - calculate_multiplier:
        switch:
          - condition: ${totalAmount < 10}
            steps:
              - set_multiplier1:
                  assign:
                    - multiplier: 2
          - condition: ${totalAmount >= 10 and totalAmount < 25}
            steps:
              - set_multiplier2:
                  assign:
                    - multiplier: 3
          - condition: ${totalAmount >= 25}
            steps:
              - set_multiplier3:
                  assign:
                    - multiplier: 5
    - calculate_rewards:
        assign:
            - rewardPoints: ${customerRecord.rewardPoints * multiplier}

fcd91b2bc5d60347.png

4. İş akışını yapılandırma ve dağıtma

Ortam değişkenlerini ayarlayın:

export REGION=us-east1

export CUSTOMER_SERVICE_URL=$(gcloud run services describe customer-service \
  --platform managed \
  --region $REGION \
  --format=json | jq \
  --raw-output ".status.url")

echo $CUSTOMER_SERVICE_URL

İş akışı şablonundaki hizmet URL'sini değiştirin:

sed "s@CUSTOMER_SERVICE_URL@$CUSTOMER_SERVICE_URL@g" rewardsWorkflow.yaml.tmpl > rewardsWorkflow.yaml

İş Akışları hizmeti ve proje ortamı değişkenleri için konumu ayarlayın:

gcloud config set workflows/location ${REGION}

export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
export PROJECT_NAME=$(gcloud projects describe $PROJECT_ID --format='value(name)')

İş akışı için aşağıdaki izinlere sahip özel bir hizmet hesabı oluşturun:

  • Cloud Run hizmetini çağırma
  • Call Logging API'leri
  • PubSub konusuna mesaj yayınlama
export WORKFLOW_SERVICE_ACCOUNT=workflows-cloudrun-sa

gcloud iam service-accounts create ${WORKFLOW_SERVICE_ACCOUNT}

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member "serviceAccount:${WORKFLOW_SERVICE_ACCOUNT}@$PROJECT_ID.iam.gserviceaccount.com" \
  --role "roles/run.invoker"

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member "serviceAccount:${WORKFLOW_SERVICE_ACCOUNT}@$PROJECT_ID.iam.gserviceaccount.com" \
  --role "roles/logging.logWriter"

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member "serviceAccount:${WORKFLOW_SERVICE_ACCOUNT}@$PROJECT_ID.iam.gserviceaccount.com" \
  --role "roles/pubsub.publisher"

İş akışını dağıtın. İş akışı, önceki adımda oluşturulan hizmet hesabını kullanacak şekilde yapılandırılır:

export WORKFLOW_NAME=rewardsWorkflow

gcloud workflows deploy ${WORKFLOW_NAME} \
  --source=rewardsWorkflow.yaml \
  --service-account=${WORKFLOW_SERVICE_ACCOUNT}@$PROJECT_ID.iam.gserviceaccount.com

İş akışı kaynağını ve diğer ayrıntıları(Tetikleyiciler sekmesi) inceleyin. Şu anda bu iş akışını yürütecek tetikleyici yapılandırılmamış. Bunu bir sonraki adımda ayarlayacaksınız.

d3527393fb07a9b3.png

5. Pub/Sub konularını ve Eventarc tetikleyicisini yapılandırma

Ardından iki Pub/Sub konusu oluşturacak ve bir Eventarc tetikleyicisi yapılandıracaksınız.

Sipariş hizmeti, yeni siparişlerle ilgili bilgileri içeren mesajları order-topic'ya yayınlar.

İş akışı, order-points-topic'ya sipariş ödül puanları ve toplam tutar hakkında bilgiler içeren mesajlar yayınlar. Order Service(bu laboratuvarın dağıtılmamış kısmı), order-points-topic, için ödül puanlarını ve sipariş başına toplam tutarı güncellemek üzere Push aboneliği tarafından kullanılan bir uç nokta sunar.

Yeni Pub/Sub konuları oluşturma:

export TOPIC_ID=order-topic
export ORDER_POINTS_TOPIC_ID=order-points-topic
gcloud pubsub topics create $TOPIC_ID --project=$PROJECT_ID
gcloud pubsub topics create $ORDER_POINTS_TOPIC_ID --project=$PROJECT_ID

Eventarc hizmeti için konumu ayarlayın:

gcloud config set eventarc/location ${REGION}

Eventarc tetikleyicisi tarafından iş akışlarını yürütmek için kullanılacak özel bir hizmet hesabı oluşturun.

export TRIGGER_SERVICE_ACCOUNT=eventarc-workflow-sa

gcloud iam service-accounts create ${TRIGGER_SERVICE_ACCOUNT}

İş akışlarını yürütmek için hizmet hesabına erişim izni verin.

gcloud projects add-iam-policy-binding ${PROJECT_ID} \
  --member="serviceAccount:${TRIGGER_SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com" \
  --role="roles/workflows.invoker"

Pub/Sub mesajlarını dinlemek ve bunları Workflows'a iletmek için bir Eventarc tetikleyicisi oluşturun.

gcloud eventarc triggers create new-orders-trigger \
  --destination-workflow=${WORKFLOW_NAME} \
  --destination-workflow-location=${REGION} \
  --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
  --service-account="${TRIGGER_SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com" \
  --transport-topic=$TOPIC_ID

Örnek çıkış:

Creating trigger [new-orders-trigger] in project [qwiklabs-gcp-01-1a990bfcadb3], location [us-east1]...done.     
Publish to Pub/Sub topic [projects/qwiklabs-gcp-01-1a990bfcadb3/topics/order-topic] to receive events in Workflow [rewardsWorkflow].
WARNING: It may take up to 2 minutes for the new trigger to become active.

Oluşturulan Eventarc tetikleyicisini inceleyin.

bda445561ad5f4.png

Tetikleyici için oluşturulan aboneliği inceleyin.

3fccdda7d5526597.png

İş akışı tarafındaki değişiklikleri inceleyin. Yeni bir tetikleyici eklendi.

23d338abc16eaac8.png

6. İş akışını test etme

c6d4337a47b55333.png

Sipariş Hizmeti'ni simüle etmek için Cloud Shell'den Pub/Sub konusuna mesaj gönderecek ve Cloud Console'da Cloud Run Müşteri Hizmeti günlüklerini doğrulayacaksınız.

export TOPIC_ID=order-topic
gcloud pubsub topics publish $TOPIC_ID --message '{"userId":"id1","orderNumber":123456,"name":"Angela Jensen","email":"ajensen9090+eats@gmail.com","address":"1845 Denise St","city":"Mountain View","state":"CA","zip":"94043","orderItems":[{"id":7,"createDateTime":"2022-03-17T21:51:44.968584","itemImageURL":"https://images.unsplash.com/photo-1618449840665-9ed506d73a34?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=687&q=80","itemName":"Curry Plate","itemPrice":12.5,"itemThumbnailURL":"https://images.unsplash.com/photo-1618449840665-9ed506d73a34?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=687&q=80","spiceLevel":0,"status":"Ready","tagLine":"Spicy touch for your taste buds","updateDateTime":"2022-03-18T01:30:29.340584","inventory":8,"quantity":1}]}'

Örnek çıkış:

messageIds:
- '5063709859203105'

İş akışı yürütme ayrıntılarını ve günlükleri inceleyin.

1e802826c700cc3e.pngaad0eae7a970316.png

7. İş Akışı Yapılandırılmış Günlük Kaydı

İş akışı, JSON biçiminde yapılandırılmış günlükler yazacak şekilde yapılandırılır. Günlükler, Cloud Logging API, workflows.googleapis.com/Workflow kaynağı ve projects/${PROJECT_ID}/logs/Workflows günlük adı altında yazılır.

Aşağıdaki günlük kaydı yapılandırmasını inceleyin.

    - log_totalAmount:
        call: sys.log
        args:
            json:
              orderNumber: ${order.orderNumber}
              totalAmount: ${totalAmount}
              multiplier: ${multiplier}
              totalRewardPoints: ${rewardPoints}
              orderRewardPoints: ${orderRewardPoints}
            severity: INFO

Console'da Günlük Gezgini'ni açın ve toplam tutarı 2 ABD dolarından fazla olan işlenmiş siparişler için sorgu çalıştırın.

Aşağıdaki sorguyu kullanın ve proje kimliğini(qwiklabs-gcp-01-1a990bfcadb3) geçerli proje kimliğinizle değiştirin:

resource.type="workflows.googleapis.com/Workflow" AND 
logName=projects/qwiklabs-gcp-01-1a990bfcadb3/logs/Workflows AND 
jsonPayload.totalAmount > 2 AND 
timestamp >= "2022-11-01T23:59:59Z" AND 
timestamp <= "2023-11-05T00:00:00Z"

Örnek çıkış:

22d2f4686c58724d.png

Cloud Shell'i açın ve aşağıdaki komutlarla günlükleri okumak için gcloud KSA'yı kullanın.

Proje kimliğini(qwiklabs-gcp-01-1a990bfcadb3) geçerli proje kimliğinizle değiştirin.

gcloud logging read 'resource.type="workflows.googleapis.com/Workflow" AND logName=projects/qwiklabs-gcp-01-1a990bfcadb3/logs/Workflows AND jsonPayload.totalAmount > 2 AND timestamp >= "2022-11-01T23:59:59Z" AND timestamp <= "2023-11-05T00:00:00Z"' --limit 10 --format="table(jsonPayload.orderNumber,jsonPayload.totalAmount,jsonPayload.orderRewardPoints,jsonPayload.totalRewardPoints,jsonPayload.multiplier)"

table biçimini kullanan örnek çıkış:

35d5fd851ecde60.png

Proje kimliğini(qwiklabs-gcp-01-1a990bfcadb3) geçerli proje kimliğinizle değiştirin.

gcloud logging read 'resource.type="workflows.googleapis.com/Workflow" AND logName=projects/qwiklabs-gcp-01-1a990bfcadb3/logs/Workflows AND jsonPayload.totalAmount > 2 AND timestamp >= "2022-11-01T23:59:59Z" AND timestamp <= "2023-11-05T00:00:00Z"' --limit 10 --format=json | jq

json biçimini kullanan örnek çıkış:

ac7421548ea9a9f2.png

8. Müşteri Kayıtlarını İnceleme

(İsteğe bağlı adımlar) Şu anda customer-service yalnızca dahili ağlardan gelen trafiği kabul edecek şekilde yapılandırılmıştır.

Hizmet URL'sini kaydetmek ve müşteri hizmetlerini aramak için aşağıdaki komutları çalıştırın.

export REGION=us-east1
CUSTOMER_SERVICE_URL=$(gcloud run services describe customer-service \
    --region=$REGION \
    --format=json | jq \
    --raw-output ".status.url")

curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" $CUSTOMER_SERVICE_URL/customer

Erişimin yasaklandığına dair bir hata mesajı alırsınız.

<html><head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<title>403 Forbidden</title>
</head>
<body text=#000000 bgcolor=#ffffff>
<h1>Error: Forbidden</h1>
<h2>Access is forbidden.</h2>
<h2></h2>
</body></html>

Mevcut müşteri kayıtlarını görüntülemek için Cloud Run customer-service giriş ayarlarını "Allow all traffic" seçeneğine değiştirin ve "Kaydet"i tıklayın.

Bu işlem, uç noktayı herkese açık hale getirir ve Cloud Shell'den curl kullanarak Müşteri Hizmetleri API'sini çağırabilirsiniz.

9156e0eb0a19bc68.png

Hizmet URL'sini kaydetmek ve mevcut müşterileri listelemek için aşağıdaki komutları çalıştırın.

CUSTOMER_SERVICE_URL=$(gcloud run services describe customer-service \
    --region=$REGION \
    --format=json | jq \
    --raw-output ".status.url")

curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" $CUSTOMER_SERVICE_URL/customer | jq

Örnek çıkış:

[
  {
    "id": "id1",
    "rewardPoints": 3,
    "address": "1845 Denise St",
    "city": "Mountain View",
    "createDateTime": "2022-11-11T15:56:45.487566",
    "email": "ajensen9090+eats@gmail.com",
    "name": "Angela Jensen",
    "state": "CA",
    "updateDateTime": "2022-11-11T15:56:45.866125",
    "zip": "94043"
  }
]

Yeni bir siparişi birden çok kez yayınlamak için komutu çalıştırın ve curl komutuyla müşteri ödül puanlarını doğrulayın.

Yeni sipariş mesajı yayınlama:

export TOPIC_ID=order-topic
gcloud pubsub topics publish $TOPIC_ID --message '{"userId":"id1","orderNumber":123456,"name":"Angela Jensen","email":"ajensen9090+eats@gmail.com","address":"1845 Denise St","city":"Mountain View","state":"CA","zip":"94043","orderItems":[{"id":7,"createDateTime":"2022-03-17T21:51:44.968584","itemImageURL":"https://images.unsplash.com/photo-1618449840665-9ed506d73a34?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=687&q=80","itemName":"Curry Plate","itemPrice":12.5,"itemThumbnailURL":"https://images.unsplash.com/photo-1618449840665-9ed506d73a34?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=687&q=80","spiceLevel":0,"status":"Ready","tagLine":"Spicy touch for your taste buds","updateDateTime":"2022-03-18T01:30:29.340584","inventory":8,"quantity":1}]}'

Müşterinin ödül puanlarını doğrulayın:

curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" $CUSTOMER_SERVICE_URL/customer | jq

Günlükleri doğrulayın. Proje kimliğini(qwiklabs-gcp-01-1a990bfcadb3) geçerli proje kimliğinizle değiştirin.

gcloud logging read 'resource.type="workflows.googleapis.com/Workflow" AND logName=projects/qwiklabs-gcp-01-1a990bfcadb3/logs/Workflows AND jsonPayload.totalAmount > 2 AND timestamp >= "2022-11-01T23:59:59Z" AND timestamp <= "2023-11-05T00:00:00Z"' --limit 10 --format="table(jsonPayload.orderNumber,jsonPayload.totalAmount,jsonPayload.orderRewardPoints,jsonPayload.totalRewardPoints,jsonPayload.multiplier)"

9. Tebrikler!

Tebrikler, codelab'i tamamladınız.

İşlediğimiz konular:

  • İş akışlarını yapılandırma
  • Workflows için Eventarc tetikleyicisini yapılandırma
  • Workflows'tan Cloud Run hizmetini çağırma
  • Cloud Logging'deki yapılandırılmış günlükleri sorgulama ve gcloud CLI'yı kullanma

Sıradaki adım:

Diğer Cymbal Eats codelab'lerini keşfedin:

Temizleme

Bu eğitimde kullanılan kaynaklar için Google Cloud hesabınızın ücretlendirilmesini önlemek amacıyla kaynakları içeren projeyi silin veya projeyi koruyup tek tek kaynakları silin.

Projeyi silme

Faturalandırılmanın önüne geçmenin en kolay yolu, eğitim için oluşturduğunuz projeyi silmektir.