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

1. Genel Bakış

Bu laboratuvarda, Pub/Sub konusunu iş akışları hizmetine bağlayan bir Eventarc tetikleyicisi oluşturacaksınız. Eventarc, hizmetleri birbirinden ayırıp hizmet iletişimi sağlamanıza olanak tanıyarak çözümünüzü daha genişletilebilir ve olay odaklı hale getirir. Cymbal Eats'te verdiğiniz siparişler için müşteri ödül puanlarını hesaplamak amacıyla bir iş süreci yürütmek için birden fazla adımdan oluşan bir iş akışı oluşturacaksınız. İş akışı, iş mantığını yürütmek için özel bir Cloud Run hizmet API'si çağırır. Cloud Run hizmeti yalnızca dahili trafiğe izin verecek şekilde yapılandırılmıştır ve kimlik doğrulama gerektirir. İş 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ı uygulamak, özelleştirmek veya sürdürmek zorunda kalmadan etkinliğe dayalı mimariler oluşturmanıza olanak tanır. Eventarc, ayrıştırılan mikro hizmetler arasındaki durum değişikliklerinin (etkinlik adı verilen) akışını yönetmek amacıyla standartlaştırılmış bir çözüm sunar. Eventarc, tetiklendiğinde bu etkinlikleri Pub/Sub abonelikleri üzerinden çeşitli hedeflere (ör. (iş akışları veya Cloud Run) sizin için teslimat, güvenlik, yetkilendirme, gözlemlenebilirlik ve hata işlemeyi yönetirken.

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 ve Google harici sağlayıcılardır.

Eventarc tetikleyicileri

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

Etkinlik hedefleri

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

c7ca054200edf1b3.png

Workflows nedir?

İş akışları; mikro hizmetleri, görevleri ve API'leri entegre etmenizi sağlayan, tümüyle yönetilen bir hizmettir. İş akışları, sunucusuz bir hizmettir ve isteğinizi karşılayacak şekilde ölçeklendirilir.

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

  • Etkinlik odaklı iş akışları, tanımlanmış tetikleyicilere göre yürütülür. Örneğin, yeni bir sipariş gönderildiğinde ve müşteri bağlılık puanlarını hesaplamak istediğinizde bu durumla karşılaşabilirsiniz. Alternatif olarak, bir sipariş iptal edildiğinde etkinlik yayınlanabilir ve ilgili tüm hizmetler etkinliği işler.
  • Toplu iş iş akışları, Cloud Scheduler'ı kullanarak işleri düzenli olarak çalıştırır. Örneğin, başarısız durumunda olan menü öğelerinin kontrol edilmesi ve silinmeleri için gecelik bir iş.

İş akışları, hizmetleri düzenleyen iş akışları için idealdir. Bekleme ve yeniden deneme süreçlerini bir yıla kadar otomatik hale getirebilirsiniz.

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

  • Kod üzerinden yapılandırma: Kod yazmak yerine mantığı yapılandırmaya taşıyarak teknik borçu azaltın.
  • Mimarınızı basitleştirin. Durum bilgili iş akışları, karmaşık hizmet entegrasyonlarını ek bağımlılıklar olmadan görselleştirmenize ve izlemenize olanak tanır.
  • Güvenilirlik ve hata toleransı özelliklerini bir araya getirin. Varsayılan veya özel yeniden deneme mantığı ve diğer sistemler başarısız olduğunda bile hata işlemeyle hataları kontrol edin. İlerleme durumunu takip etmenize yardımcı olmak için her adım için Cloud Spanner'ı kontrol edin.
  • Sıfır bakım. Gerektiğinde ölçeklendirin: Düzeltmeniz veya bakım yapmanız gereken bir şey yoktur. Yalnızca iş akışlarınız çalıştığında, beklerken veya etkin değilken ücretsiz olarak ödeme yapın.

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

Öğrenecekleriniz

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

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

Ön koşullar

  • Bu laboratuvarda Cloud Console ve Cloud Shell ortamlarıyla ilgili bilgi sahibi olmanız gerekir.
  • Önceki Cloud Run ve Cloud Pub/Sub deneyimi yararlı olsa da zorunlu değildir.

2. Kurulum ve Gereksinimler

Cloud projesi 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. İstediğiniz zaman güncelleyebilirsiniz.
  • Proje Kimliği, tüm Google Cloud projelerinde benzersizdir 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ğini (genellikle PROJECT_ID olarak tanımlanır) referans almanız gerekir. Oluşturulan kimliği beğenmezseniz rastgele bir kimlik daha oluşturabilirsiniz. Alternatif olarak, kendi ölçümünüzü deneyip mevcut olup olmadığına bakabilirsiniz. Bu adımdan sonra değiştirilemez ve proje süresince kalır.
  • Bilginiz için 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. Sonraki adımda, 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ırma yapılmaması için kaynakları kapatmak isterseniz oluşturduğunuz kaynakları silebilir veya projenin tamamını silebilirsiniz. Yeni Google Cloud kullanıcıları, 300 ABD doları değerindeki ücretsiz denemeden 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şturulacak:

  • AlloyDB kümesi ve örneği
  • Cloud Run İşi ve Müşteri Hizmetleri için container görüntülerini depolayacak Artifact Registry
  • AlloyDB veritabanıyla iletişim kurmak amacıyla Cloud Run Hizmeti ve İşi için VPC Erişim bağlayıcısı
  • AlloyDB veritabanı oluşturma için Cloud Run İşi
  • Cloud Run Müşteri hizmetleri: Quarkus çerçevesi kullanan Java tabanlı mikro hizmet.
./lab-setup.sh

Yetki vermeniz istenirse "Yetkilendir"i tıklayın seçeneğini tıklayın.

6356559df3eccdda.png

Kurulum yaklaşık 10 dakika sürer.

Komut dosyası tamamlanana kadar bekleyin ve diğer adımları çalıştırmadan önce aşağıdaki çıkışı görün.

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ü inceleyebilir, ardından bir sonraki adımdan devam etmek için geri dönebilirsiniz.

3. İş Akışını Gözden Geçirme

İş Akışıyla İlgili Temel Kavramlar

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

İş akışı oluşturulduktan sonra dağıtılır. Böylece iş akışı yürütmeye hazır hale gelir.

Yürütme, iş akışının tanımında yer alan mantığın tek bir çalıştırılmasıdır. Yürütülmeyen bir iş akışı, ücret oluşturmaz. Tüm iş akışı yürütmeleri bağımsızdır ve ürünün hızlı ölçeklendirmesi, çok sayıda eşzamanlı yürütmeye olanak tanır.

Yürütme kontrolleri

  • Adımlar: Bir iş akışı oluşturmak için Workflows söz dizimini kullanarak istediğiniz 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ütme akışını kontrol etmesine olanak tanıyan bir seçim mekanizması olarak switch bloğunu kullanabilirsiniz.
  • Yinelemeler: Bir sayı dizisi üzerinde veya liste ya da harita gibi bir veri koleksiyonunda yineleme yapmak için for döngüsünü kullanabilirsiniz.
  • Alt iş akışları: Alt iş akışı, programlama dilindeki bir rutine veya işleve benzer şekilde çalışır. Bu sayede, iş akışınızın birden çok kez tekrar edeceği bir adımı veya adım kümesini kapsamanıza 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 veya REST API için Cloud İstemci Kitaplıkları kullanılabilir.
  • Planlandı: Belirli bir zaman planı üzerinde iş akışı ç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 bloka yerleştirilmiş) bir params alanı eklenerek erişilebilir. Ana blok, herhangi bir geçerli JSON veri türü olan tek bir bağımsız değişkeni kabul eder. Parametreler alanı, iş akışının girdiğiniz verileri depolamak için kullandığı değişkeni adlandırır.

Cloud Run Hizmet Kimlik Doğrulaması'na İş Akışı

Müşteri hizmetleri, bu depoda yer alan ve Cloud Run'da çalışan ve kimliği doğrulanmış isteklere yalnızca dahili ağlardan gelen isteklere izin verecek şekilde yapılandırılmış örnek bir uygulamadır. Cloud Run hizmetiyle kimlik doğrulama isteğinde bulunmak için Workflows'u yapılandırarak isteğe Google imzalı bir RFC Connect(OIDC) jetonu ekleyin.

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

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

rewardsWorkflow.yaml.tmpl

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

İş Akışı Mantığı

Bir müşteri yoksa bu iş akışı, önce müşteri oluşturmak ve ardından ödül puanlarını güncellemek için bir API çağrısı yapar. İş akışı, toplam sipariş tutarına göre 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 kurun:

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

Workflows hizmeti ve proje ortamı değişkenlerinin konumunu 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
  • Çağrı Kaydı 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ğıtma. İş 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ütmek üzere yapılandırılmış tetikleyici yok. Bir sonraki adımda kuracaksı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 adresine yayınlar.

İş akışı, sipariş ödül puanları ve toplam tutarla ilgili bilgilerin yer aldığı mesajları order-points-topic üzerinde yayınlar. Sipariş Hizmeti(bu laboratuvarın dağıtılmayan bölümünde), ödül puanlarını ve sipariş başına toplam tutarı güncellemek amacıyla order-points-topic, için 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 konum ayarlayın:

gcloud config set eventarc/location ${REGION}

İş akışlarını yürütmek için Eventarc tetikleyicisi tarafından kullanılacak bir özel 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 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ı iş akışlarına teslim etmek 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 çıktı:

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. Test iş akışı

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 hizmetleri 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 çıktı:

messageIds:
- '5063709859203105'

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

1e802826c700cc3e.png

aad0eae7a970316.png

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

İş akışı, yapılandırılmış günlükleri JSON biçiminde yazacak şekilde yapılandırılmıştır. Günlükler, Cloud Logging API, workflows.googleapis.com/Workflow kaynağı kullanılarak ve projects/${PROJECT_ID}/logs/Workflows günlük adı altına 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ı 2 ABD dolarından fazla olan işlenmiş siparişler için bir 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 çıktı:

22d2f4686c58724d.png

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

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) customer-service şu anda 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 yasak olduğunu belirten 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" olarak değiştirin seçeneğini belirtin ve "Kaydet"i tıklayın.

Bu işlem, uç noktasını herkese açık hale getirir ve curl kullanarak Cloud Shell'den Customer Service API'yi ç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 çıktı:

[
  {
    "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 komut çalıştırın ve curl komutuyla müşteri ödül puanlarını doğrulayın.

Yeni sipariş mesajı yayınla:

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üşteri ödül puanlarını doğrulama:

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:

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

Sıradaki adım:

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

Temizleme

Bu eğiticide kullanılan kaynaklar için Google Cloud hesabınızın ücretlendirilmesini istemiyorsanız kaynakları içeren projeyi silin veya projeyi tutup tek tek kaynakları silin.

Projeyi silme

Faturalandırmayı ortadan kaldırmanın en kolay yolu, eğitim için oluşturduğunuz projeyi silmektir.