راه اندازی گردش کار با Eventarc

۱. مرور کلی

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

c6d4337a47b55333.png

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

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 برای فعال کردن گردش‌های کاری
  • پیکربندی گردش کار برای فراخوانی سرویس Cloud Run و انتشار پیام‌ها در Pub/Sub
  • نحوه پرس و جو از لاگ‌های ساختاریافته گردش‌های کاری در Cloud Logging و استفاده از gcloud CLI

پیش‌نیازها

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

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

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

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

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

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

تنظیمات محیط

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

eb0157a992f16fa3.png

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

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

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

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

  • کلاستر و نمونه AlloyDB
  • رجیستری مصنوعات برای ذخیره تصاویر کانتینر برای کار Cloud Run و خدمات مشتری
  • رابط دسترسی VPC برای سرویس Cloud Run و Job جهت ارتباط با پایگاه داده AlloyDB
  • اجرای ابری کار برای ایجاد پایگاه داده AlloyDB
  • خدمات مشتری Cloud Run - میکروسرویس مبتنی بر جاوا که از چارچوب Quarkus استفاده می‌کند.
./lab-setup.sh

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

6356559df3eccdda.png

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

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

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

می‌توانید بخش بعدی را بررسی کنید و سپس برای ادامه از مرحله بعدی برگردید.

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

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

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

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

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

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

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

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

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

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

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

گردش کار برای احراز هویت سرویس Cloud Run

سرویس مشتری یک برنامه نمونه است که در این مخزن گنجانده شده است و روی Cloud Run اجرا می‌شود و طوری پیکربندی شده است که فقط به درخواست‌های احراز هویت شده از شبکه‌های داخلی اجازه ورود بدهد. شما Workflowها را طوری پیکربندی خواهید کرد که یک توکن OpenID Connect(OIDC) امضا شده توسط گوگل را به درخواست احراز هویت با سرویس Cloud Run اضافه کنند.

برای کسب اطلاعات بیشتر در مورد احراز هویت سرویس به سرویس، مستندات را مرور کنید.

احراز هویت گردش کار در زیر بلوک args با استفاده از بخش auth پیکربندی شده است.

rewardWorkflow.yaml.tmpl

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

منطق گردش کار

اگر مشتری وجود نداشته باشد، این گردش کار ابتدا یک فراخوانی 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}

fcd91b2bc5d60347.png

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

متغیرهای محیطی را تنظیم کنید:

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

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

sed "s@CUSTOMER_SERVICE_URL@$CUSTOMER_SERVICE_URL@g" rewardsWorkflow.yaml.tmpl > rewardsWorkflow.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)')

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

  • سرویس Cloud Run را فراخوانی کنید
  • API های ثبت تماس
  • انتشار پیام‌ها در تاپیک PubSub
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"

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

export WORKFLOW_NAME=rewardsWorkflow

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

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

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

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

c6d4337a47b55333.png

برای شبیه‌سازی سرویس سفارش، پیام‌هایی را از Cloud Shell به تاپیک Pub/Sub ارسال خواهید کرد و گزارش‌های سرویس مشتری Cloud Run را در کنسول 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

aad0eae7a970316.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 را در کنسول باز کنید و یک پرس و جو برای سفارش‌های پردازش شده با مبلغ کل بیش از ۲ دلار اجرا کنید .

از کوئری زیر استفاده کنید، شناسه پروژه ( qwiklabs-gcp-01-1a990bfcadb3 ) را با شناسه پروژه فعلی خود جایگزین کنید:

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"

خروجی نمونه:

۲۲d2f4686c58724d.png

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

شناسه پروژه ( qwiklabs-gcp-01-1a990bfcadb3 ) را با شناسه پروژه فعلی خود جایگزین کنید.

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 :

35d5fd851ecde60.png

شناسه پروژه ( qwiklabs-gcp-01-1a990bfcadb3 ) را با شناسه پروژه فعلی خود جایگزین کنید.

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 :

ac7421548ea9a9f2.png

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

(مراحل اختیاری) در حال حاضر customer-service طوری پیکربندی شده است که فقط ترافیک شبکه‌های داخلی را بپذیرد.

برای ذخیره URL سرویس و تماس با خدمات مشتری، دستورات زیر را اجرا کنید.

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

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

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

برای مشاهده سوابق مشتریان فعلی، تنظیمات ورود به customer-service Cloud Run را به گزینه « Allow all traffic » تغییر دهید و روی «ذخیره» کلیک کنید.

این کار نقطه پایانی را عمومی می‌کند و شما می‌توانید API خدمات مشتری را از Cloud Shell با استفاده از curl فراخوانی کنید.

۹۱۵۶e۰eb۰a۱۹bc۶۸.png

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

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

خروجی نمونه:

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

دستور زیر را اجرا کنید تا یک سفارش جدید را چندین بار منتشر کنید و امتیازهای پاداش مشتری را با دستور 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 -H "Authorization: Bearer $(gcloud auth print-identity-token)" $CUSTOMER_SERVICE_URL/customer | jq

لاگ‌ها را تأیید کنید. شناسه پروژه ( qwiklabs-gcp-01-1a990bfcadb3 ) را با شناسه پروژه فعلی خود جایگزین کنید.

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

۹. تبریک می‌گویم!

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

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

  • نحوه پیکربندی گردش‌های کاری
  • نحوه پیکربندی تریگر Eventarc برای گردش‌های کاری
  • نحوه فراخوانی سرویس Cloud Run از Workflows
  • نحوه پرس و جو از لاگ‌های ساختاریافته در Cloud Logging و استفاده از gcloud CLI

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

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

تمیز کردن

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

حذف پروژه

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