GKE Autopilot ve Pub/Sub ile entegre olan iş akışlarını tetiklemek için Eventarc'ı yapılandırma

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ütecek çok adımlı bir iş akışı oluşturacaksınız. İş akışı, GKE Autopilot'ta çalışan bir uygulamaya birden fazla istek gönderir ve hesaplanan ödül puanları hakkında Sipariş Hizmeti uygulamasına bildirim göndermek için Pub/Sub konusuna bir mesaj yayınlar.

6c0606022b76f79d.png

GKE Autopilot nedir?

GKE Autopilot, GKE'de bir çalışma modudur. Bu modda Google, düğümleriniz, ölçeklendirme, güvenlik ve önceden yapılandırılmış diğer ayarlar dahil olmak üzere küme yapılandırmanızı yönetir. Autopilot kümeleri, çoğu üretim iş yükünü çalıştıracak şekilde optimize edilmiştir ve Kubernetes manifestlerinize göre işlem kaynakları sağlar. Basitleştirilmiş yapılandırma, küme ve iş yükü kurulumu, ölçeklenebilirlik ve güvenlik için GKE'deki en iyi uygulamaları ve önerileri takip eder. Yerleşik ayarların listesi için Autopilot ve Standard karşılaştırması tablosuna bakın.

GKE Standard'da kullanıcılar, çalışma düğümlerini ve düğüm havuzu yapılandırmasını yönetmekle sorumludur. Geri kalan işlemler GKE tarafından gerçekleştirilir.

GKE Standart modunda çalışırken müşterinin ve Google'ın sorumlulukları

85500aad65f87437.png

GKE Autopilot ile düğüm havuzu yapılandırması ve yönetimi Google'ın sorumluluğundadır. Bu sayede, kümenin üzerinde çalışan uygulamalara ve hizmetlere odaklanabilirsiniz.

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 akışını (etkinlikler) yönetmek için standartlaştırılmış bir çözüm sunar. Eventarc, tetiklendiğinde bu etkinlikleri Pub/Sub abonelikleri aracılığıyla çeşitli hedeflere (ör. Workflows, Cloud Run) hizmetlerini kullanırken teslimat, güvenlik, yetkilendirme, gözlemlenebilirlik ve hata işleme özelliklerini 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 Denetleme Günlükleri (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 paketinde veya Firebase Remote Config şablonunda yapılan bir güncelleme) 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şleyebilir.
  • 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. Durum bilgili İş 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ımda Cloud Spanner'da kontrol noktası oluşturma.
  • 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 durumunda herhangi bir ücret ödemezsiniz.

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

Öğrenecekleriniz

Bu laboratuvarda şunları yapmayı öğreneceksiniz:

  • Workflows'u tetiklemek için Pub/Sub konusunu ve Eventarc'ı yapılandırma
  • GKE Autopilot'ta çalışan uygulamaya API çağrıları yapmak için iş akışını yapılandırma
  • İş akışını Pub/Sub'a mesaj yayınlayacak şekilde 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 GKE ve Cloud Pub/Sub deneyiminiz olması yararlı olsa da 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.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. 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, 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. 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.

8613854df02635a3.png

Depoyu klonlayıp 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

gke-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
  • GKE Autopilot kümesi
./gke-lab-setup.sh

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

NAME: client-instance
ZONE: us-central1-c
MACHINE_TYPE: e2-medium
PREEMPTIBLE:
INTERNAL_IP: 10.128.0.9
EXTERNAL_IP: 35.232.109.233
STATUS: RUNNING

3. GKE Autopilot kümesi

GKE Autopilot kümesini inceleme

Proje ortamı değişkenlerini ayarlayın:

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)')

İlk kurulumun bir parçası olarak küme, aşağıdaki komut kullanılarak oluşturuldu (Bu komutu çalıştırmanız gerekmez):

gcloud container clusters create-auto $CLUSTER_NAME --region $REGION

Oluşturulan GKE Autopilot kümesini görüntülemek için komutu çalıştırın:

gcloud container clusters list

Örnek çıktı:

772db9dd58172e0c.png

Kümenin kimlik bilgilerini depolamak için komutu çalıştırın:

CLUSTER_NAME=rewards-cluster
REGION=us-central1

gcloud container clusters get-credentials $CLUSTER_NAME --region=$REGION

Uygulama dağıtma

Ardından bir müşteri hizmetleri uygulaması dağıtacaksınız. Bu, Quarkus çerçevesini kullanan Java tabanlı bir mikro hizmettir.

cymbal-eats/customer-service klasörüne gidin ve kapsayıcı görüntüsünü oluşturup yüklemek için aşağıdaki komutları çalıştırın:

./mvnw clean package -DskipTests

export CUSTOMER_SERVICE_IMAGE=gcr.io/$PROJECT_ID/customer-service:1.0.0

gcloud builds submit --tag $CUSTOMER_SERVICE_IMAGE .

AlloyDB özel IP adresini ayarlayın:

export DB_HOST=$(gcloud beta alloydb instances describe customer-instance \
    --cluster=customer-cluster \
    --region=$REGION \
    --format=json | jq \
    --raw-output ".ipAddress")

echo $DB_HOST

Müşteri hizmetleri uygulamasının veritabanına bağlanmak için kullanacağı veritabanı kimlik bilgilerini depolamak üzere Kubernetes sırları nesnesi oluşturmak için aşağıdaki komutları çalıştırın:

DB_NAME=customers
DB_USER=postgres
DB_PASSWORD=password123

kubectl create secret generic gke-alloydb-secrets \
  --from-literal=database=$DB_NAME \
  --from-literal=username=$DB_USER \
  --from-literal=password=$DB_PASSWORD \
  --from-literal=db_host=$DB_HOST

deployment.yaml dosyasında CUSTOMER_SERVICE_IMAGE'ı değiştirmek için komutu çalıştırın:

sed "s@CUSTOMER_SERVICE_IMAGE@$CUSTOMER_SERVICE_IMAGE@g" deployment.yaml.tmpl > customer-service-deployment.yaml

Uygulamayı dağıtmak için komutu çalıştırın:

kubectl apply -f customer-service-deployment.yaml

Uygulamanın RUNNING durumuna geçmesi birkaç dakika sürer.

Dağıtım spesifikasyon dosyasını inceleyin:

deployment.yaml.tmpl

Bu uygulamayı çalıştırmak için gereken kaynakları belirten yapılandırma bölümünü aşağıda bulabilirsiniz.

    spec:
      containers:
      - name: customer-service
        image: CUSTOMER_SERVICE_IMAGE
        resources:
          requests:
            cpu: 250m
            memory: 512Mi
            ephemeral-storage: 512Mi
          limits:
            cpu: 500m
            memory: 1024Mi
            ephemeral-storage: 1Gi

İş akışında kullanılacak harici IP'yi oluşturmak için komutu çalıştırın:

SERVICE_NAME=customer-service

kubectl expose deployment $SERVICE_NAME \
  --type LoadBalancer --port 80 --target-port 8080

Oluşturulan kaynakları doğrulamak için komutu çalıştırın:

kubectl get all

Örnek çıktı:

179a23bd33793924.png

4. İş Akışını İnceleme

Workflows 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 ç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.

İş Akışı Mantığı

Müşteri yoksa 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}

99f9cf1076c03fb6.png

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

Hizmetin harici IP adresini görüntülemek için komutu çalıştırın:

kubectl get svc

Örnek çıktı:

fe5cfec2bc836a5f.png

Önceki çıktıda yer alan Harici IP değerini kullanarak aşağıdaki ortam değişkenini ayarlayın.

CUSTOMER_SERVICE_URL=http://$(kubectl get svc customer-service -o=jsonpath='{.status.loadBalancer.ingress[0].ip}')

İş akışı şablonunda müşteri hizmetleri uygulaması URL'sini değiştirin:

sed "s@CUSTOMER_SERVICE_URL@$CUSTOMER_SERVICE_URL@g" gkeRewardsWorkflow.yaml.tmpl > gkeRewardsWorkflow.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:

  • Arama Günlüğü API'leri
  • PubSub konusuna mesaj yayınlama
export WORKFLOW_SERVICE_ACCOUNT=workflows-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/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=gkeRewardsWorkflow.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.

66ba7ebbde76d5a6.png

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

Order Service uygulaması, 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 konum ayarlama:

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 çı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

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

6c0606022b76f79d.png

Sipariş Hizmeti'ni simüle etmek için Cloud Shell'den Pub/Sub konusuna mesaj gönderecek ve Cloud Console'da 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

57ff9705bf507fb0.png

8. İş 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ı kullanılarak 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

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

Arama sorgusu alanını göstermek için "Sorguyu göster"i tıklayın.

f0a57ff3d10bad2.png

resource.type="workflows.googleapis.com/Workflow" AND 
jsonPayload.totalAmount > 2 AND 
timestamp >= "2023-01-01T00:00:00Z" AND 
timestamp <= "2024-12-31T23:59:59Z"

Örnek çıktı:

9093f87159f1b928.png

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

gcloud logging read 'resource.type="workflows.googleapis.com/Workflow" AND jsonPayload.totalAmount > 2 AND timestamp >= "2023-01-01T00:00:00Z" AND timestamp <= "2023-12-31T23:59:59Z"' --limit 10 --format="table(jsonPayload.orderNumber,jsonPayload.totalAmount,jsonPayload.orderRewardPoints,jsonPayload.totalRewardPoints,jsonPayload.multiplier)"

table biçimini kullanan örnek çıktı:

35d5fd851ecde60.png

Günlükleri JSON biçiminde döndürmek için aşağıdaki komutu çalıştırın:

gcloud logging read 'resource.type="workflows.googleapis.com/Workflow" AND jsonPayload.totalAmount > 2 AND timestamp >= "2023-01-01T00:00:00Z" AND timestamp <= "2023-12-31T23:59:59Z"' --limit 10 --format=json | jq

json biçimini kullanan örnek çıktı:

ac7421548ea9a9f2.png

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

(İsteğe bağlı adımlar)

Müşteri Hizmetleri URL'si ortam değişkenini ayarlamak için aşağıdaki komutları çalıştırın.

CUSTOMER_SERVICE_URL=http://$(kubectl get svc customer-service -o=jsonpath='{.status.loadBalancer.ingress[0].ip}')

curl $CUSTOMER_SERVICE_URL/customer | jq

Örnek çıktı:

[
  {
    "address": "1845 Denise St",
    "city": "Mountain View",
    "createDateTime": "2023-01-31T17:22:08.853644",
    "email": "ajensen9090+eats@gmail.com",
    "id": "id1",
    "name": "Angela Jensen",
    "rewardPoints": 4,
    "state": "CA",
    "updateDateTime": "2023-01-31T17:22:09.652117",
    "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ı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üşteri ödül puanlarını doğrulayın:

curl $CUSTOMER_SERVICE_URL/customer | jq

En son günlükleri kontrol etmek için aşağıdaki komutu çalıştırın:

gcloud logging read 'resource.type="workflows.googleapis.com/Workflow" AND jsonPayload.totalAmount > 2 AND timestamp >= "2023-01-01T00:00:00Z" AND timestamp <= "2023-12-31T23:59:59Z"' --limit 10 --format="table(jsonPayload.orderNumber,jsonPayload.totalAmount,jsonPayload.orderRewardPoints,jsonPayload.totalRewardPoints,jsonPayload.multiplier)"

10. Tebrikler!

Tebrikler, codelab'i tamamladınız.

İşlediğimiz konular:

  • Workflows'u tetiklemek için Pub/Sub konusunu ve Eventarc'ı yapılandırma
  • GKE Autopilot'ta çalışan uygulamaya API çağrıları yapmak için iş akışını yapılandırma
  • İş akışını Pub/Sub'a mesaj yayınlayacak şekilde yapılandırma
  • Cloud Logging'de ve gcloud CLI'yı kullanarak Workflows yapılandırılmış günlüklerini sorgulama

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.