پیکربندی Eventarc برای راه‌اندازی گردش‌های کاری که با GKE Autopilot و Pub/Sub ادغام می‌شوند

پیکربندی Eventarc برای راه‌اندازی گردش‌های کاری که با GKE Autopilot و Pub/Sub ادغام می‌شوند

درباره این codelab

subjectآخرین به‌روزرسانی: فوریه ۲, ۲۰۲۳
account_circleنویسنده: Andrey Shakirov, Christopher Grant

1. نمای کلی

در این آزمایشگاه، شما یک تریگر Eventarc ایجاد می کنید که یک موضوع Pub/Sub را به سرویس Workflows متصل می کند. Eventarc به شما این امکان را می‌دهد که خدمات ارتباطی را از سرویس جدا کنید - راه حل شما را توسعه‌پذیرتر و رویداد محورتر می‌کند. شما یک گردش کاری ایجاد خواهید کرد که شامل چندین مرحله برای اجرای یک فرآیند تجاری برای محاسبه امتیازهای پاداش مشتری برای سفارش در Cymbal Eats است. Workflow درخواست‌های متعددی را به برنامه‌ای که در GKE Autopilot اجرا می‌شود ارسال می‌کند و پیامی را به موضوع Pub/Sub منتشر می‌کند تا برنامه Order Service را در مورد امتیازهای پاداش محاسبه‌شده مطلع کند.

6c0606022b76f79d.png

GKE Autopilot چیست؟

GKE Autopilot حالتی از عملکرد در GKE است که در آن Google پیکربندی کلاستر شما را مدیریت می‌کند، از جمله گره‌ها، مقیاس‌گذاری، امنیت و سایر تنظیمات از پیش پیکربندی شده شما. خوشه‌های خلبان خودکار برای اجرای بیشتر بارهای کاری تولید بهینه شده‌اند و منابع محاسباتی را بر اساس مانیفست‌های Kubernetes شما ارائه می‌کنند. پیکربندی کارآمد از بهترین شیوه‌ها و توصیه‌های GKE برای راه‌اندازی کلاستر و حجم کار، مقیاس‌پذیری و امنیت پیروی می‌کند. برای لیست تنظیمات داخلی، به جدول مقایسه خودکار و استاندارد مراجعه کنید.

با استاندارد GKE، کاربران مسئول مدیریت گره های کارگر و پیکربندی استخر گره هستند، در حالی که بقیه امور توسط GKE انجام می شود.

مسئولیت‌های مشتری در مقابل Google هنگام اجرا در حالت استاندارد GKE

85500aad65f87437.png

با GKE Autopilot ، پیکربندی و مدیریت استخر گره بر عهده Google است. این به شما امکان می دهد بر روی برنامه ها و سرویس هایی که در بالای کلاستر اجرا می شوند تمرکز کنید.

Eventarc چیست؟

Eventarc به شما امکان می دهد معماری های رویداد محور را بدون نیاز به پیاده سازی، سفارشی سازی یا حفظ زیرساخت های اساسی بسازید. Eventarc یک راه حل استاندارد برای مدیریت جریان تغییرات حالت، به نام رویدادها، بین میکروسرویس های جدا شده ارائه می دهد. هنگام راه‌اندازی، Eventarc این رویدادها را از طریق اشتراک‌های Pub/Sub به مقاصد مختلف (مثلاً گردش کار، اجرای ابری) هدایت می‌کند و در عین حال تحویل، امنیت، مجوز، قابلیت مشاهده و مدیریت خطا را برای شما مدیریت می‌کند.

ارائه دهندگان رویداد Google

  • بیش از 90 ارائه دهنده Google Cloud. این ارائه دهندگان رویدادها را مستقیماً از منبع (به عنوان مثال، فضای ذخیره سازی ابری) یا از طریق ورودی های گزارش حسابرسی ابری ارسال می کنند.
  • ارائه دهندگان Pub/Sub. این ارائه دهندگان رویدادها را با استفاده از پیام های Pub/Sub به Eventarc ارسال می کنند.

ارائه دهندگان شخص ثالث

ارائه دهندگان شخص ثالث نهادهای غیر Google هستند که منبع Eventarc را ارائه می دهند.

Eventarc باعث می شود

  • رویدادهای Cloud Pub/Sub. Eventarc می تواند توسط پیام های منتشر شده در موضوعات Pub/Sub فعال شود.
  • رویدادهای Cloud Audit Logs (CAL). گزارش‌های حسابرسی ابری گزارش‌های حسابرسی فعالیت مدیریت و دسترسی به داده‌ها را برای هر پروژه، پوشه و سازمان Cloud ارائه می‌کنند.
  • رویدادهای مستقیم Eventarc می‌تواند توسط رویدادهای مستقیم مختلف مانند به‌روزرسانی یک سطل فضای ذخیره‌سازی ابری یا به‌روزرسانی قالب Firebase Remote Config فعال شود.

مقاصد رویداد

  • گردش کار
  • Cloud Run
  • GKE
  • توابع ابری ( نسل دوم )

c7ca054200edf1b3.png

گردش کار چیست؟

Workflows یک سرویس کاملاً مدیریت شده است که به شما امکان می دهد میکروسرویس ها، وظایف و API ها را ادغام کنید. Workflows یک سرویس بدون سرور است و برای پاسخگویی به تقاضای شما مقیاس خواهد شد.

موارد استفاده گردش کار:

  • جریان های کاری رویداد محور بر روی تریگرهای تعریف شده اجرا می شوند. به عنوان مثال، زمانی که یک سفارش جدید ارسال می شود و می خواهید امتیاز وفاداری مشتری را محاسبه کنید. یا زمانی که یک سفارش لغو می شود، رویداد می تواند منتشر شود و تمام خدمات علاقه مند رویداد را پردازش خواهند کرد.
  • جریان های کار دسته ای کارها را به طور منظم با استفاده از Cloud Scheduler اجرا می کنند. به عنوان مثال، یک کار شبانه برای بررسی موارد منو در وضعیت ناموفق و حذف آنها.

Workflows برای گردش های کاری که خدمات را هماهنگ می کند ایده آل است. می‌توانید فرآیندهایی را که شامل انتظار و تلاش مجدد تا یک سال می‌شود، خودکار کنید.

مزایای گردش کار:

  • پیکربندی روی کد: با انتقال منطق به پیکربندی به جای نوشتن کد، بدهی فنی را کاهش دهید.
  • معماری خود را ساده کنید Stateful Workflows به شما این امکان را می دهد که یکپارچه سازی سرویس های پیچیده را بدون وابستگی اضافی تجسم و نظارت کنید.
  • قابلیت اطمینان و تحمل خطا را ترکیب کنید. خرابی‌ها را با منطق امتحان مجدد پیش‌فرض یا سفارشی و مدیریت خطا کنترل کنید، حتی زمانی که سیستم‌های دیگر شکست می‌خورند—هر مرحله را به Cloud Spanner بررسی کنید تا به شما در پیگیری پیشرفت کمک کند.
  • تعمیر و نگهداری صفر مقیاس در صورت نیاز: چیزی برای وصله یا نگهداری وجود ندارد. فقط زمانی پرداخت کنید که گردش‌های کاری شما اجرا شود، بدون هیچ هزینه‌ای در زمان انتظار یا غیرفعال بودن.

در این آزمایشگاه، یک گردش کار مبتنی بر رویداد را پیکربندی خواهید کرد.

آنچه خواهید آموخت

در این آزمایشگاه با نحوه انجام کارهای زیر آشنا می شوید:

  • موضوع Pub/Sub و Eventarc را برای راه‌اندازی Workflows پیکربندی کنید
  • گردش کار را برای برقراری تماس های API با برنامه در حال اجرا در GKE Autopilot پیکربندی کنید
  • گردش کار را برای انتشار پیام‌ها در Pub/Sub پیکربندی کنید
  • نحوه پرس و جو از گزارش های ساختاری Workflows در Cloud Logging و با استفاده از gcloud CLI

پیش نیازها

  • این آزمایشگاه آشنایی با محیط های Cloud Console و Cloud Shell را فرض می کند.
  • تجربه قبلی GKE و Cloud Pub/Sub مفید است اما لازم نیست.

2. راه اندازی و الزامات

راه اندازی پروژه ابری

  1. به Google Cloud Console وارد شوید و یک پروژه جدید ایجاد کنید یا از یک موجود استفاده مجدد کنید. اگر قبلاً یک حساب Gmail یا Google Workspace ندارید، باید یک حساب ایجاد کنید .

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • نام پروژه نام نمایشی برای شرکت کنندگان این پروژه است. این یک رشته کاراکتری است که توسط API های Google استفاده نمی شود. شما می توانید آن را در هر زمان به روز کنید.
  • شناسه پروژه در تمام پروژه‌های Google Cloud منحصربه‌فرد است و تغییرناپذیر است (پس از تنظیم نمی‌توان آن را تغییر داد). Cloud Console به طور خودکار یک رشته منحصر به فرد تولید می کند. معمولاً برای شما مهم نیست که چیست. در اکثر کدها، باید به شناسه پروژه ارجاع دهید (معمولاً به عنوان PROJECT_ID شناخته می شود). اگر شناسه تولید شده را دوست ندارید، ممکن است یک شناسه تصادفی دیگر ایجاد کنید. از طرف دیگر، می‌توانید خودتان را امتحان کنید و ببینید آیا در دسترس است یا خیر. پس از این مرحله نمی توان آن را تغییر داد و در طول مدت پروژه باقی می ماند.
  • برای اطلاع شما، یک مقدار سوم وجود دارد، یک شماره پروژه که برخی از API ها از آن استفاده می کنند. در مورد هر سه این مقادیر در مستندات بیشتر بیاموزید.
  1. در مرحله بعد، برای استفاده از منابع/APIهای Cloud باید صورتحساب را در کنسول Cloud فعال کنید . اجرا کردن از طریق این کد لبه نباید هزینه زیادی داشته باشد، اگر اصلاً باشد. برای اینکه منابع را خاموش کنید تا بیش از این آموزش متحمل صورتحساب نشوید، می توانید منابعی را که ایجاد کرده اید حذف کنید یا کل پروژه را حذف کنید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان 300 دلاری هستند.

راه اندازی محیط

Cloud Shell را با کلیک بر روی نماد سمت راست نوار جستجو فعال کنید.

8613854df02635a3.png

مخزن را کلون کنید و به دایرکتوری بروید، دستور زیر را در ترمینال کپی و پیست کنید و Enter را بزنید:

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

با اجرای gke-lab-setup.sh وابستگی های مورد نیاز را مستقر کنید

منابع زیر ایجاد خواهد شد:

  • خوشه و نمونه AlloyDB
  • خوشه خودکار GKE
./gke-lab-setup.sh

اگر از شما خواسته شد که مجوز دهید، برای ادامه روی "مجوز" کلیک کنید.

6356559df3eccdda.png

تنظیم حدود 10 دقیقه طول خواهد کشید.

صبر کنید تا اسکریپت تمام شود و قبل از اجرای سایر مراحل، خروجی زیر را ببینید.

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 Cluster

کلاستر GKE Autopilot را مرور کنید

تنظیم متغیرهای محیط پروژه:

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

بخشی از تنظیمات اولیه، خوشه با استفاده از دستور زیر ایجاد شد (نیازی به اجرای این دستور ندارید):

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

برای مشاهده کلاستر GKE Autopilot ایجاد شده دستور را اجرا کنید:

gcloud container clusters list

خروجی نمونه:

772db9dd58172e0c.png

دستور ذخیره اعتبار برای خوشه را اجرا کنید:

CLUSTER_NAME=rewards-cluster
REGION
=us-central1

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

استقرار یک برنامه

سپس یک برنامه خدمات مشتری را مستقر خواهید کرد. این یک میکروسرویس مبتنی بر جاوا است که از چارچوب Quarkus استفاده می کند.

به پوشه cymbal-eats/customer-service بروید و دستورات زیر را برای ساخت و آپلود تصویر کانتینر اجرا کنید:

./mvnw clean package -DskipTests

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

gcloud builds submit
--tag $CUSTOMER_SERVICE_IMAGE .

تنظیم آدرس IP خصوصی AlloyDB:

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

echo $DB_HOST

دستورات زیر را برای ایجاد شی Kubernetes Secrets برای ذخیره اعتبار پایگاه داده که توسط برنامه خدمات مشتری برای اتصال به پایگاه داده استفاده می شود، اجرا کنید:

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

دستور جایگزینی CUSTOMER_SERVICE_IMAGE را در فایل deployment.yaml اجرا کنید:

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

دستور را برای استقرار برنامه اجرا کنید:

kubectl apply -f customer-service-deployment.yaml

چند لحظه طول می کشد تا برنامه به حالت RUNNING تبدیل شود.

بررسی فایل مشخصات استقرار:

deployment.yaml.tmpl

در اینجا بخشی از پیکربندی است که منابع مورد نیاز برای اجرای این برنامه را مشخص می کند.

    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

برای ایجاد IP خارجی که در گردش کار استفاده می شود، دستور را اجرا کنید:

SERVICE_NAME=customer-service

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

دستور را برای تأیید منابع ایجاد شده اجرا کنید:

kubectl get all

خروجی نمونه:

179a23bd33793924.png

4. بررسی گردش کار

مفاهیم اصلی گردش کار

یک گردش کار شامل یک سری مراحل است که با استفاده از نحو گردش کار ( YAML یا JSON ) شرح داده شده است.

پس از ایجاد یک گردش کار، مستقر می شود که گردش کار را برای اجرا آماده می کند.

اجرا یک اجرای منفرد از منطق موجود در تعریف گردش کار است. گردش کاری که اجرا نشده است هزینه ای ایجاد نمی کند. همه اجراهای گردش کار مستقل هستند و مقیاس بندی سریع محصول امکان اجرای همزمان زیاد را فراهم می کند.

کنترل های اجرایی

  • مراحل - برای ایجاد گردش کار، steps و ترتیب اجرا مورد نظر را با استفاده از دستور Workflows تعریف می کنید. هر گردش کار باید حداقل یک مرحله داشته باشد.
  • شرایط - می توانید از بلوک switch به عنوان مکانیزم انتخاب استفاده کنید که به مقدار یک عبارت اجازه می دهد تا جریان اجرای یک گردش کار را کنترل کند.
  • تکرارها - می توانید از یک حلقه for برای تکرار بر روی یک دنباله از اعداد یا از طریق مجموعه ای از داده ها، مانند یک لیست یا نقشه استفاده کنید.
  • Subworkflows - یک زیر کار مشابه یک روال یا عملکرد در یک زبان برنامه نویسی عمل می کند و به شما این امکان را می دهد که یک مرحله یا مجموعه ای از مراحل را کپسوله کنید که گردش کار شما چندین بار تکرار می شود.

راه اندازی اعدام ها

  • دستی - می توانید گردش کار را از کنسول Google Cloud یا از خط فرمان با استفاده از Google Cloud CLI مدیریت کنید.
  • برنامه نویسی - کتابخانه های سرویس گیرنده ابری برای Workflows API یا REST API، می توانند برای مدیریت گردش کار استفاده شوند.
  • زمان‌بندی شده - می‌توانید از Cloud Scheduler برای اجرای یک گردش کار در یک برنامه زمانی خاص استفاده کنید.

آرگومان های زمان اجرا

داده های ارسال شده در زمان اجرا را می توان با افزودن یک فیلد params به گردش کار اصلی خود (قرار گرفته در یک بلوک اصلی) دسترسی داشت. بلوک اصلی یک آرگومان واحد را می‌پذیرد که هر نوع داده JSON معتبر باشد. فیلد params متغیری را نام می‌برد که گردش کار برای ذخیره داده‌هایی که ارسال می‌کنید استفاده می‌کند.

منطق گردش کار

اگر مشتری وجود نداشته باشد، گردش کار یک تماس API برقرار می کند تا ابتدا یک مشتری ایجاد کند و سپس امتیازهای پاداش را به روز کند. بر اساس مبلغ کل سفارش، گردش کار یک ضریب برای محاسبه امتیازهای پاداش برای مشتری انتخاب می کند. برای جزئیات بیشتر به نمونه زیر مراجعه کنید.

    - 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. پیکربندی و استقرار Workflow

برای مشاهده آدرس IP خارجی سرویس، دستور را اجرا کنید:

kubectl get svc

خروجی نمونه:

fe5cfec2bc836a5f.png

متغیر محیطی زیر را با استفاده از مقدار External IP از خروجی قبلی تنظیم کنید.

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

URL برنامه خدمات مشتری را در قالب گردش کار جایگزین کنید:

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

مکان را برای سرویس گردش کار و متغیرهای محیط پروژه تنظیم کنید:

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

یک حساب سرویس سفارشی برای گردش کار با مجوزهای زیر ایجاد کنید:

  • Call Logging APIs
  • پیام ها را به موضوع PubSub منتشر کنید
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"

استقرار گردش کار گردش کار برای استفاده از حساب سرویس ایجاد شده در مرحله قبل پیکربندی شده است:

export WORKFLOW_NAME=rewardsWorkflow

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

منبع گردش کار و سایر جزئیات (برگه Triggers) را مرور کنید. در حال حاضر هیچ محرکی برای اجرای این گردش کار پیکربندی نشده است. در مرحله بعد آن را تنظیم خواهید کرد.

66ba7ebbde76d5a6.png

6. موضوعات Pub/Sub و ماشه Eventarc را پیکربندی کنید

در مرحله بعد دو موضوع Pub/Sub ایجاد می‌کنید و یک راه‌انداز Eventarc را پیکربندی می‌کنید.

برنامه Order Service پیام هایی را به order-topic با اطلاعات سفارشات جدید منتشر می کند.

گردش کار پیام هایی را با اطلاعاتی در مورد امتیازهای پاداش سفارش و مبلغ کل به order-points-topic منتشر می کند. Order Service (بخشی از این آزمایشگاه مستقر نشده است) یک نقطه پایانی را نشان می دهد که توسط اشتراک Push برای order-points-topic, برای به روز رسانی امتیاز پاداش و مبلغ کل در هر سفارش استفاده می شود.

ایجاد موضوعات Pub/Sub جدید:

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:

gcloud config set eventarc/location ${REGION}

یک حساب سرویس سفارشی ایجاد کنید که توسط تریگر Eventarc برای اجرای گردش کار استفاده شود.

export TRIGGER_SERVICE_ACCOUNT=eventarc-workflow-sa

gcloud iam service
-accounts create ${TRIGGER_SERVICE_ACCOUNT}

اجازه دسترسی به حساب سرویس برای اجرای گردش کار.

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

یک ماشه Eventarc برای گوش دادن به پیام‌های Pub/Sub و تحویل آنها به Workflows ایجاد کنید.

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

خروجی نمونه:

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.

ماشه Eventarc ایجاد شده را مرور کنید.

bda445561ad5f4.png

اشتراک ایجاد شده برای محرک را بررسی کنید.

3fccdda7d5526597.png

تغییرات را در سمت گردش کار مرور کنید. یک ماشه جدید اضافه شد.

23d338abc16eaac8.png

7. تست گردش کار

6c0606022b76f79d.png

برای شبیه‌سازی Order Service، پیام‌هایی را از پوسته Cloud به موضوع Pub/Sub ارسال می‌کنید و گزارش‌های خدمات مشتری را در کنسول Cloud تأیید می‌کنید.

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}]}'

خروجی نمونه:

messageIds:
- '5063709859203105'

جزئیات اجرای گردش کار و گزارش‌ها را بررسی کنید.

1e802826c700cc3e.png

57ff9705bf507fb0.png

8. گزارش ساختار یافته گردش کار

گردش کار برای نوشتن گزارش های ساختاریافته در قالب JSON پیکربندی شده است. گزارش‌ها با استفاده از Cloud Logging API، منبع workflows.googleapis.com/Workflow و تحت نام گزارش projects/${PROJECT_ID}/logs/Workflows نوشته می‌شوند.

پیکربندی ورود به سیستم را در زیر مرور کنید.

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

Logs Explorer را در Cloud Console باز کنید و یک پرس و جو برای یافتن سفارشات پردازش شده با مبلغ کل بیش از 2 دلار اجرا کنید.

برای نمایش فیلد درخواست جستجو، روی "نمایش پرس و جو" کلیک کنید.

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"

خروجی نمونه:

9093f87159f1b928.png

Cloud Shell را باز کنید و از gcloud CLI برای خواندن گزارش‌ها با دستورات زیر استفاده کنید.

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 :

35d5fd851ecde60.png

دستور زیر را برای برگرداندن گزارش‌ها با فرمت JSON اجرا کنید:

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 :

ac7421548ea9a9f2.png

9. بررسی سوابق مشتری

(مراحل اختیاری)

برای تنظیم متغیر محیط URL خدمات مشتری، دستورات زیر را اجرا کنید.

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

curl $CUSTOMER_SERVICE_URL
/customer | jq

خروجی نمونه:

[
  {
    "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"
  }
]

دستور را اجرا کنید تا یک سفارش جدید را چندین بار منتشر کنید و امتیازهای پاداش مشتری را با دستور curl تأیید کنید.

انتشار پیام سفارش جدید:

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}]}'

امتیازهای پاداش مشتری را تأیید کنید:

curl $CUSTOMER_SERVICE_URL/customer | jq

برای بررسی آخرین گزارش ها دستور زیر را اجرا کنید:

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. تبریک می گویم!

تبریک می گویم، شما نرم افزار کد را تمام کردید!

آنچه ما پوشش داده ایم:

  • نحوه پیکربندی موضوع Pub/Sub و Eventarc برای راه‌اندازی Workflows
  • نحوه پیکربندی Workflow برای برقراری تماس های API با برنامه در حال اجرا در GKE Autopilot
  • نحوه پیکربندی Workflow برای انتشار پیام‌ها در Pub/Sub
  • نحوه پرس و جو از گزارش های ساختاری Workflows در Cloud Logging و با استفاده از gcloud CLI

بعدش چیه:

سایر کدهای Cymbal Eats را کاوش کنید:

پاک کن

برای جلوگیری از تحمیل هزینه به حساب Google Cloud خود برای منابع استفاده شده در این آموزش، یا پروژه حاوی منابع را حذف کنید یا پروژه را نگه دارید و منابع فردی را حذف کنید.

حذف پروژه

ساده ترین راه برای حذف صورتحساب، حذف پروژه ای است که برای آموزش ایجاد کرده اید.