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

۱. مرور کلی

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

6c0606022b76f79d.png

سیستم خلبان خودکار GKE چیست؟

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

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

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

85500aad65f87437.png

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

ایونتارک چیست؟

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

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

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

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

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

محرک‌های Eventarc

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

مقاصد رویداد

  • گردش‌های کاری
  • اجرای ابری
  • جی کی ای
  • عملکردهای ابری ( نسل دوم )

c7ca054200edf1b3.png

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

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

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

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

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

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

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

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

آنچه یاد خواهید گرفت

در این آزمایشگاه، شما یاد خواهید گرفت که چگونه موارد زیر را انجام دهید:

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

پیش‌نیازها

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

۲. تنظیمات و الزامات

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

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

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

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

تنظیمات محیط

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

۸۶۱۳۸۵۴df02635a3.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

۳. خوشه خلبان خودکار GKE

بررسی خوشه خلبان خودکار GKE

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

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) منتقل شود.

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

استقرار.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

خروجی نمونه:

۱۷۹a۲۳bd۳۳۷۹۳۹۲۴.png

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

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

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

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

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

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

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

تحریک اعدام‌ها

  • دستی - می‌توانید گردش‌های کاری را از طریق کنسول Google Cloud یا از طریق خط فرمان با استفاده از Google Cloud CLI مدیریت کنید.
  • برنامه‌نویسی - کتابخانه‌های کلاینت ابری برای 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}

۹۹f9cf1076c03fb6.png

۵. پیکربندی و استقرار گردش کار

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

kubectl get svc

خروجی نمونه:

fe5cfec2bc836a5f.png

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

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

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

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

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

  • API های ثبت تماس
  • انتشار پیام‌ها در تاپیک 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

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

66ba7ebbde76d5a6.png

۶. پیکربندی موضوعات Pub/Sub و تریگر Eventarc

در مرحله بعد، دو موضوع Pub/Sub ایجاد کرده و یک تریگر Eventarc را پیکربندی خواهید کرد.

اپلیکیشن سرویس سفارش، پیام‌هایی را در order-topic منتشر می‌کند که حاوی اطلاعات مربوط به سفارش‌های جدید است.

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

ایجاد موضوعات جدید در میخانه/زیرموضوعات:

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 trigger برای اجرای گردش‌های کاری استفاده شود.

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 گوش دهد و آنها را به Workflowها ارسال کند.

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

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

۲۳d338abc16eaac8.png

۷. گردش کار را آزمایش کنید

6c0606022b76f79d.png

برای شبیه‌سازی سرویس سفارش، پیام‌هایی را از Cloud Shell به تاپیک 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

۸. ثبت وقایع ساختاریافته گردش کار

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

پیکربندی ثبت وقایع (logging) را در زیر بررسی کنید.

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

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

برای نمایش فیلد جستجوی عبارت، روی «نمایش عبارت» کلیک کنید.

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

۹. سوابق مشتری را بررسی کنید

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

دستورات زیر را برای تنظیم متغیر محیطی آدرس اینترنتی خدمات مشتری (Customer Service 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)"

۱۰. تبریک می‌گویم!

تبریک می‌گویم، شما codelab را تمام کردید!

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

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

قدم بعدی چیست؟

سایر آزمایشگاه‌های کد Cymbal Eats را کاوش کنید:

تمیز کردن

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

حذف پروژه

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