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

1. بررسی اجمالی

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

c6d4337a47b55333.png

Eventarc چیست؟

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

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

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

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

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

Eventark باعث می شود

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

پیش نیازها

  • این آزمایشگاه آشنایی با محیط های Cloud Console و Cloud Shell را فرض می کند.
  • تجربه قبلی Cloud Run و 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 را با کلیک بر روی نماد سمت راست نوار جستجو فعال کنید.

eb0157a992f16fa3.png

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

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

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

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

  • خوشه و نمونه AlloyDB
  • Artifact Registry برای ذخیره تصاویر کانتینر برای Cloud Run Job و خدمات مشتری
  • اتصال VPC Access برای Cloud Run Service و Job برای ارتباط با پایگاه داده AlloyDB
  • Cloud Run Job برای ایجاد پایگاه داده AlloyDB
  • Cloud Run Customer Service microservice مبتنی بر جاوا که از چارچوب 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

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

3. گردش کار را مرور کنید

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

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

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

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

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

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

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

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

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

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

گردش کار به Cloud Run Service Authentication

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

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

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

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

4. Workflow را پیکربندی و استقرار دهید

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

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

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
  • Call Logging APIs
  • پیام ها را به موضوع 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

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

d3527393fb07a9b3.png

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

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

سرویس سفارش پیام هایی را با اطلاعات سفارشات جدید به 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

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

c6d4337a47b55333.png

برای شبیه‌سازی Order Service، پیام‌هایی را از پوسته Cloud به موضوع 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

7. ورود به سیستم ساختار یافته گردش کار

گردش کار برای نوشتن گزارش های ساختاریافته در قالب 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 را در کنسول باز کنید و یک پرس و جو برای سفارشات پردازش شده با مبلغ کل بیش از 2 دلار اجرا کنید .

از عبارت زیر استفاده کنید، شناسه پروژه ( 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"

خروجی نمونه:

22d2f4686c58724d.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

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

(مراحل اختیاری) در حال حاضر 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 " تغییر دهید و روی "Save" کلیک کنید.

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

9156e0eb0a19bc68.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)"

9. تبریک می گویم!

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

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

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

بعدش چیه:

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

پاک کردن

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

حذف پروژه

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