رویدادهای Cloud Run برای Anthos Codelab

1. مقدمه

6a5cf23c8e20491f.png

Cloud Run به شما امکان می دهد کانتینرهای بدون حالت را در یک محیط کاملاً مدیریت شده اجرا کنید. این برنامه از منبع باز Knative ساخته شده است و به شما امکان می دهد کانتینرهای خود را به طور کامل با Cloud Run یا در خوشه Google Kubernetes Engine خود با Cloud Run برای Anthos اجرا کنید.

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

در این کد لبه با رویدادهای Cloud Run برای Anthos آشنا خواهید شد. به طور خاص، به رویدادهای Cloud Pub/Sub، Audit Logs، Cloud Storage، Cloud Scheduler و نحوه تولید/مصرف رویدادهای سفارشی گوش خواهید داد.

چیزی که یاد خواهید گرفت

  • چشم انداز بلند مدت رویدادها برای Cloud Run برای Anthos
  • وضعیت فعلی رویدادها برای Cloud Run برای Anthos
  • یک سینک Cloud Run ایجاد کنید
  • یک راه‌انداز رویداد برای Cloud Pub/Sub ایجاد کنید
  • یک راه‌انداز رویداد برای گزارش‌های حسابرسی ایجاد کنید
  • یک راه‌انداز رویداد برای فضای ذخیره‌سازی ابری ایجاد کنید
  • یک راه‌انداز رویداد برای Cloud Scheduler ایجاد کنید
  • رویدادهای سفارشی را تولید و مصرف کنید

2. چشم انداز بلند مدت

همانطور که ما معماری بدون سرور را اتخاذ می کنیم، رویدادها به بخشی جدایی ناپذیر از نحوه ارتباط میکروسرویس های جداشده تبدیل می شوند. رویدادها برای Cloud Run برای Anthos رویدادها را به شهروند درجه یک پیشنهاد Cloud Run برای Anthos تبدیل می‌کند، به طوری که ساخت برنامه‌های بدون سرور مبتنی بر رویداد آسان است.

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

ce389bcafba6d669.png

منابع Google Cloud

منابع رویداد که محصولات متعلق به Google Cloud هستند

منابع گوگل

منابع رویداد که محصولات متعلق به Google هستند مانند Gmail، Hangouts، مدیریت Android و غیره

منابع سفارشی

منابع رویدادی که محصولات متعلق به Google نیستند و توسط خود کاربران نهایی ایجاد می‌شوند. اینها می توانند منابع Knative توسعه یافته توسط کاربر یا هر برنامه دیگری که روی خوشه اجرا می شود و می تواند یک رویداد Cloud ایجاد کند باشد.

منابع شخص ثالث

منابع رویدادی که نه متعلق به Google است و نه متعلق به کاربر نهایی است. این شامل منابع رویداد محبوب مانند Github، SAP، Datadog، Pagerduty، و غیره می‌شود که توسط ارائه‌دهندگان شخص ثالث، شرکا یا جوامع OSS تحت مالکیت و نگهداری هستند.

رویدادها به فرمت CloudEvents v1.0 برای قابلیت همکاری متقابل سرویس عادی شده اند. CloudEvents یک مشخصات باز خنثی از فروشنده است که داده‌های رویداد را در قالب‌های رایج توصیف می‌کند و قابلیت همکاری بین سرویس‌ها، پلتفرم‌ها و سیستم‌ها را ممکن می‌سازد.

Events for Cloud Run با Knative Eventing مطابقت دارد و امکان حمل کانتینرها را به و از دیگر پیاده‌سازی‌های مبتنی بر Knative می‌دهد. این یک چارچوب سازگار و مبتنی بر ابر را برای تولیدکنندگان رویداد به صورت اعلامی با مصرف کنندگان رویداد فراهم می کند.

3. وضعیت فعلی

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

b1dd0d8a73185b95.png

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

  1. اکوسیستم گسترده ای از منابع Google Cloud را ارائه دهید که خدمات Cloud Run را در خوشه Anthos قادر می سازد تا به رویدادهای سرویس های Google Cloud واکنش نشان دهند.
  • در ابتدا، رویدادها از منابع Google Cloud از طریق گزارش‌های حسابرسی ابری (CAL) ارائه می‌شوند، که گستردگی منابع رویداد را فعال می‌کند. تأخیر و در دسترس بودن تحویل رویداد از این منابع به گزارش‌های حسابرسی ابری مرتبط است. هر زمان که رویدادی از یک منبع Google Cloud منتشر می شود، یک ورودی گزارش حسابرسی ابری مربوطه ایجاد می شود.
  • همراه با Cloud Audit Logs، پشتیبانی درجه یک برای مصرف رویدادها از Cloud Storage، Cloud Pub/Sub، و Cloud Scheduler وجود دارد. همانطور که از سفرها و بازخوردهای کاربران بیشتر می آموزیم، این اکوسیستم منابع را با منابع درجه یک بیشتری گسترش خواهیم داد.
  1. برنامه‌ها و سرویس‌های کاربر نهایی را فعال کنید تا رویدادهای سفارشی را با انتشار در یک نشانی وب کارگزار محلی با محدوده فضای نام منتشر کنند.

مکانیسم تحویل اساسی از موضوعات و اشتراک‌های Cloud Pub/Sub استفاده می‌کند که در پروژه‌های مشتریان قابل مشاهده است. از این رو این ویژگی همان ضمانت های تحویل را مانند Cloud Pub/Sub ارائه می دهد.

Event Trigger راهی برای اشتراک رویدادها فراهم می کند تا رویدادهای مطابق با فیلتر ماشه به مقصد (یا سینک) که Trigger به آن اشاره می کند تحویل داده شود.

همه رویدادها در قالب Cloud Events v1.0 برای قابلیت همکاری متقابل سرویس ارائه می شوند.

ما به ارائه ارزش بیشتر به روشی تکراری تا GA و فراتر از آن ادامه خواهیم داد.

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

تنظیم محیط خود به خود

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

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

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

اجرا کردن از طریق این کد لبه نباید هزینه زیادی داشته باشد، اگر اصلاً باشد. حتماً دستورالعمل‌های موجود در بخش «تمیز کردن» را دنبال کنید که به شما توصیه می‌کند چگونه منابع را خاموش کنید تا بیش از این آموزش متحمل صورت‌حساب نشوید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان 300 دلاری هستند.

Cloud Shell را راه اندازی کنید

در حالی که Google Cloud را می توان از راه دور از لپ تاپ شما کار کرد، در این کد لبه از Google Cloud Shell استفاده خواهید کرد، یک محیط خط فرمان که در Cloud اجرا می شود.

از کنسول GCP روی نماد Cloud Shell در نوار ابزار بالا سمت راست کلیک کنید:

bce75f34b2c53987.png

تهیه و اتصال به محیط فقط چند لحظه طول می کشد. وقتی تمام شد، باید چیزی شبیه به این را ببینید:

f6ef2b5f13479f3a.png

این ماشین مجازی با تمام ابزارهای توسعه که شما نیاز دارید بارگذاری شده است. این یک فهرست اصلی 5 گیگابایتی دائمی را ارائه می دهد و در Google Cloud اجرا می شود و عملکرد و احراز هویت شبکه را تا حد زیادی افزایش می دهد. تمام کارهای شما در این آزمایشگاه به سادگی با یک مرورگر قابل انجام است.

5. API ها را فعال کنید، ناحیه و پلتفرم را تنظیم کنید

شناسه پروژه را راه اندازی کنید و اجزای آلفا را نصب کنید

در داخل Cloud Shell، GOOGLE_CLOUD_PROJECT باید قبلاً روی شناسه پروژه شما تنظیم شده باشد. اگر نه، مطمئن شوید که تنظیم شده است و gcloud شما با آن شناسه پروژه پیکربندی شده است:

export GOOGLE_CLOUD_PROJECT=your-project-id
gcloud config set project ${GOOGLE_CLOUD_PROJECT}

مطمئن شوید که جزء gcloud برای آلفا نصب شده است:

gcloud components install alpha

API ها را فعال کنید

فعال کردن تمام خدمات لازم:

gcloud services enable cloudapis.googleapis.com 
gcloud services enable container.googleapis.com 
gcloud services enable containerregistry.googleapis.com
gcloud services enable cloudbuild.googleapis.com

تنظیم منطقه و پلت فرم

قبل از ایجاد یک خوشه GKE با رویدادهای Cloud Run، نام، منطقه و پلتفرم خوشه را تنظیم کنید. به عنوان مثال، در اینجا نام و منطقه را روی events-cluster و europe-west1-b قرار می دهیم و پلتفرم gke,

در Cloud Shell:

export CLUSTER_NAME=events-cluster
export CLUSTER_ZONE=europe-west1-b

gcloud config set run/cluster ${CLUSTER_NAME}
gcloud config set run/cluster_location ${CLUSTER_ZONE}
gcloud config set run/platform gke

می توانید بررسی کنید که پیکربندی تنظیم شده است:

gcloud config list

...
[run]
cluster = events-cluster
cluster_location = europe-west1-b
platform = gke

6. یک کلاستر GKE با رویدادهای Cloud Run ایجاد کنید

یک کلاستر GKE با Kubernetes >= 1.15.9-gke.26 با فعال کردن افزونه های زیر ایجاد کنید: CloudRun ، HttpLoadBalancing ، HorizontalPodAutoscaling :

gcloud beta container clusters create ${CLUSTER_NAME} \
  --addons=HttpLoadBalancing,HorizontalPodAutoscaling,CloudRun \
  --machine-type=n1-standard-4 \
  --enable-autoscaling --min-nodes=3 --max-nodes=10 \
  --no-issue-client-certificate --num-nodes=3 --image-type=cos \
  --enable-stackdriver-kubernetes \
  --scopes=cloud-platform,logging-write,monitoring-write,pubsub \
  --zone ${CLUSTER_ZONE} \
  --release-channel=rapid

7. راه اندازی رویدادهای اجرای ابر (صفحه کنترل)

رویدادهای Cloud Run یک Control Plane و یک Data Plane دارند که باید جداگانه تنظیم شوند. برای راه اندازی صفحه کنترل:

در Cloud Shell:

gcloud beta events init 

این رویداد را مقداردهی اولیه می کند و همچنین تعدادی حساب خدمات مورد نیاز را ایجاد می کند. هنگامی که از شما برای ایجاد حساب سرویس خواسته شد، مطمئن شوید که "بله" را انتخاب کنید.

در این مرحله صفحه کنترل باید به درستی مقداردهی اولیه شود. شما باید چهار غلاف با یک را ببینید

وضعیت Running ، 2 ( controller-xxx-xxx و webhook-xxx-xxx ) در فضای نام cloud-run-events و 2 ( eventing-controller-xxx-xxx and eventing-webhook-xxx-xxx ) در فضای نام knative-eventing . با اجرای دستورات زیر می توانید بررسی کنید:

kubectl get pods -n cloud-run-events

NAME                         READY   STATUS    RESTARTS   AGE
controller-9cc679b67-2952n   1/1     Running   0          22s
webhook-8576c4cfcb-dhz82     1/1     Running   0          16m
kubectl get pods -n knative-eventing

NAME                                   READY   STATUS    RESTARTS   AGE
eventing-controller-77f46f6cf8-kj9ck   1/1     Running   0          17m
eventing-webhook-5bc787965f-hcmwg      1/1     Running   0          17m

8. تنظیم رویدادهای Cloud Run (Data Plane)

مرحله بعدی تنظیم صفحه داده در فضاهای نام کاربری است. این یک کارگزار با مجوزهای مناسب برای خواندن/نوشتن از/به Pub/Sub ایجاد می کند.

در داخل Cloud Shell، یک متغیر محیطی NAMESPACE برای فضای نامی که می‌خواهید برای اشیاء خود استفاده کنید، تنظیم کنید. اگر می‌خواهید از فضای نام پیش‌فرض مانند شکل زیر استفاده کنید، می‌توانید آن را روی default تنظیم کنید:

export NAMESPACE=default

توجه داشته باشید که اگر فضای نام مشخص شده وجود نداشته باشد (یعنی فضای نام پیش فرض نیست)، باید آن را ایجاد کنید:

kubectl create namespace ${NAMESPACE}

فضای نام را با رمز پیش فرض مقداردهی کنید:

gcloud beta events namespaces init ${NAMESPACE} --copy-default-secret 

یک کارگزار پیش فرض در فضای نام ایجاد کنید:

gcloud beta events brokers create default --namespace ${NAMESPACE}

بررسی کنید که کارگزار ایجاد شده است. توجه داشته باشید که ممکن است چند ثانیه طول بکشد تا کارگزار آماده شود:

kubectl get broker -n ${NAMESPACE}

NAME      READY   REASON   URL
default   True             http://default-brokercell-ingress.cloud-run-events.svc.cluster.local/default/default

9. کشف رویداد

می‌توانید منابع ثبت‌شده، انواع رویدادهایی که می‌توانند منتشر کنند و نحوه پیکربندی راه‌اندازها برای مصرف آن‌ها را کشف کنید.

برای مشاهده لیست انواع مختلف رویدادها:

gcloud beta events types list

برای دریافت اطلاعات بیشتر در مورد هر نوع رویداد:

gcloud beta events types describe google.cloud.pubsub.topic.v1.messagePublished

10. یک سینک Cloud Run ایجاد کنید

به عنوان یک رویداد، یک سرویس Cloud Run را مستقر کنید که محتویات CloudEvent دریافتی را ثبت می کند.

می توانید از event_display Knative که قبلاً کامپایل شده و تصویر محفظه آن به عنوان بخشی از انتشار Knative ساخته شده است استفاده کنید. می‌توانید جزئیات تصویر ظرف را در event-display.yaml ببینید:

...
containers:
  - image: gcr.io/knative-releases/knative.dev/eventing-contrib/cmd/event_display@sha256:8da2440b62a5c077d9882ed50397730e84d07037b1c8a3e40ff6b89c37332b27

در Cloud Run مستقر شوید

برنامه کانتینری خود را در Cloud Run مستقر کنید:

export SERVICE_NAME=event-display
gcloud run deploy ${SERVICE_NAME} \
  --namespace=${NAMESPACE} \
  --image gcr.io/knative-releases/knative.dev/eventing-contrib/cmd/event_display@sha256:8da2440b62a5c077d9882ed50397730e84d07037b1c8a3e40ff6b89c37332b27

در صورت موفقیت، خط فرمان URL سرویس را نمایش می دهد. اکنون می‌توانید با باز کردن URL سرویس در هر پنجره مرورگر، از کانتینر مستقر شده خود دیدن کنید.

11. یک رویداد برای Cloud Pub/Sub ایجاد کنید

یکی از راه های دریافت رویدادها از طریق Cloud Pub/Sub است. برنامه های کاربردی سفارشی می توانند پیام ها را در Cloud Pub/Sub منتشر کنند و این پیام ها را می توان از طریق Events for Cloud Run به سینک های Google Cloud Run تحویل داد.

یک موضوع ایجاد کنید

ابتدا یک موضوع Cloud Pub/Sub ایجاد کنید. می‌توانید TOPIC_ID با نام موضوع منحصر به فردی که ترجیح می‌دهید جایگزین کنید:

export TOPIC_ID=cr-gke-topic
gcloud pubsub topics create ${TOPIC_ID}

یک ماشه ایجاد کنید

قبل از ایجاد محرک، جزئیات بیشتری در مورد پارامترهایی که برای ایجاد یک ماشه برای رویدادها از Cloud Pub/Sub نیاز دارید، دریافت کنید:

gcloud beta events types describe google.cloud.pubsub.topic.v1.messagePublished

یک ماشه برای فیلتر کردن رویدادهای منتشر شده در موضوع Cloud Pub/Sub در سرویس Cloud Run مستقر شده ما ایجاد کنید:

gcloud beta events triggers create trigger-pubsub \
  --namespace ${NAMESPACE} \
  --target-service ${SERVICE_NAME} \
  --type google.cloud.pubsub.topic.v1.messagePublished \
  --parameters topic=${TOPIC_ID}

ماشه را تست کنید

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

gcloud beta events triggers list

ممکن است لازم باشد تا 10 دقیقه منتظر بمانید تا ایجاد ماشه منتشر شود و رویدادها را فیلتر کند.

به منظور شبیه سازی ارسال پیام سفارشی برنامه، می توانید از gcloud to برای اجرای یک رویداد استفاده کنید:

gcloud pubsub topics publish ${TOPIC_ID} --message="Hello there"

سینک Cloud Run که ما ایجاد کردیم، بدنه پیام دریافتی را ثبت می کند. می‌توانید این را در بخش گزارش‌های نمونه Cloud Run خود مشاهده کنید:

9526909a06c6d4f4.png

توجه داشته باشید که "Hello there" همانگونه که توسط Pub/Sub ارسال شده است، با base64 رمزگذاری می شود و اگر می خواهید پیام اصلی ارسال شده را ببینید، باید آن را رمزگشایی کنید.

ماشه را حذف کنید

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

gcloud beta events triggers delete trigger-pubsub --namespace ${NAMESPACE}

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

شما یک ماشه برای گوش دادن به رویدادها از گزارش حسابرسی تنظیم خواهید کرد. به طور خاص، شما به دنبال رویدادهای ایجاد موضوع Pub/Sub در گزارش حسابرسی خواهید بود.

گزارش های حسابرسی را فعال کنید

برای دریافت رویدادها از یک سرویس، باید گزارش های حسابرسی را فعال کنید. از Cloud Console، IAM & Admin > Audit Logs از منوی سمت چپ بالا انتخاب کنید. در لیست خدمات، Google Cloud Pub/Sub را بررسی کنید:

97bd4b57c6a05fcc.png

در سمت راست، مطمئن شوید که Admin، Read و Write انتخاب شده اند. روی ذخیره کلیک کنید:

bec31b4f35fbcea.png

تست گزارش های حسابرسی

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

به عنوان مثال، یک موضوع Pub/Sub ایجاد کنید:

gcloud pubsub topics create cre-gke-topic1

حال، بیایید ببینیم این به‌روزرسانی چه نوع گزارش حسابرسی ایجاد کرده است. از Cloud Console، Logging > Logs Viewer از منوی سمت چپ بالا انتخاب کنید.

در بخش Query Builder, Cloud Pub/Sub Topic را انتخاب کنید و روی Add کلیک کنید:

f5c634057e935bc6.png

پس از اجرای پرس و جو، گزارش‌های مربوط به موضوعات Pub/Sub را مشاهده خواهید کرد و یکی از آن‌ها باید google.pubsub.v1.Publisher.CreateTopic باشد:

b083cce219773d24.png

به serviceName ، methodName و resourceName توجه کنید. ما از اینها در ایجاد ماشه استفاده خواهیم کرد.

یک ماشه ایجاد کنید

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

با اجرای دستور زیر می‌توانید جزئیات بیشتری در مورد پارامترهایی که برای ایجاد یک ماشه برای رویدادها نیاز دارید از منابع Google Cloud دریافت کنید:

gcloud beta events types describe google.cloud.audit.log.v1.written

ماشه را با فیلترهای مناسب ایجاد کنید:

gcloud beta events triggers create trigger-auditlog \
  --namespace ${NAMESPACE} \
  --target-service ${SERVICE_NAME} \
  --type=google.cloud.audit.log.v1.written \
  --parameters serviceName=pubsub.googleapis.com \
  --parameters methodName=google.pubsub.v1.Publisher.CreateTopic

ماشه را تست کنید

همه محرک‌ها را فهرست کنید تا تأیید کنید که ماشه با موفقیت ایجاد شده است:

gcloud beta events triggers list

تا 10 دقیقه صبر کنید تا ایجاد ماشه منتشر شود و رویدادها فیلتر شود. پس از آماده شدن، رویدادهای ایجاد شده را فیلتر کرده و آنها را به سرویس ارسال می کند. اکنون آماده هستید تا یک رویداد را فعال کنید.

یک موضوع Pub/Sub دیگری ایجاد کنید، همانطور که قبلا انجام دادید:

gcloud pubsub topics create cre-gke-topic2

اگر گزارش های سرویس Cloud Run را در Cloud Console بررسی کنید، باید رویداد دریافتی را مشاهده کنید:

aff3b2e7ad05c75d.png

ماشه و موضوعات را حذف کنید

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

gcloud beta events triggers delete trigger-auditlog

همچنین موضوعات را حذف کنید:

gcloud pubsub topics delete cre-gke-topic1 cre-gke-topic2

13. یک تریگر رویداد برای Cloud Storage ایجاد کنید

شما یک ماشه برای گوش دادن به رویدادها از فضای ذخیره‌سازی ابری تنظیم خواهید کرد.

یک سطل ایجاد کنید

ابتدا یک سطل Cloud Storage در همان ناحیه ای که سرویس Cloud Run مستقر شده ایجاد کنید. می‌توانید BUCKET_NAME با نام منحصربه‌فردی که ترجیح می‌دهید جایگزین کنید:

export BUCKET_NAME=[new bucket name]
export REGION=europe-west1

gsutil mb -p $(gcloud config get-value project) \
  -l $REGION \
  gs://$BUCKET_NAME/

مجوزهای Cloud Storage را تنظیم کنید

قبل از ایجاد یک ماشه، باید به حساب سرویس پیش‌فرض برای فضای ذخیره‌سازی ابری اجازه انتشار در Pub/Sub بدهید.

ابتدا، باید حساب سرویسی را که Cloud Storage برای انتشار در Pub/Sub استفاده می‌کند، پیدا کنید. می توانید از مراحل ذکر شده در دریافت حساب سرویس Cloud Storage برای دریافت حساب سرویس استفاده کنید یا از دستور زیر استفاده کنید:

curl -X GET -H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://storage.googleapis.com/storage/v1/projects/$(gcloud config get-value project)/serviceAccount"

حساب سرویس باید در زیر email_address فهرست شود.

فرض کنید حساب سرویسی که از بالا پیدا کردید service-XYZ@gs-project-accounts.iam.gserviceaccount.com بود، این را روی یک متغیر محیطی تنظیم کنید:

export GCS_SERVICE_ACCOUNT=service-XYZ@gs-project-accounts.iam.gserviceaccount.com

سپس، حقوقی را به آن حساب سرویس اعطا کنید تا در Pub/Sub منتشر شود:

gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \
  --member=serviceAccount:${GCS_SERVICE_ACCOUNT} \
  --role roles/pubsub.publisher

یک ماشه ایجاد کنید

اکنون آماده ایجاد یک راه‌انداز رویداد برای رویدادهای Cloud Storage هستید.

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

gcloud beta events types describe google.cloud.storage.object.v1.finalized

ماشه را با فیلترهای مناسب ایجاد کنید:

gcloud beta events triggers create trigger-storage \
  --namespace ${NAMESPACE} \
  --target-service ${SERVICE_NAME} \
  --type=google.cloud.storage.object.v1.finalized \
  --parameters bucket=${BUCKET_NAME}

ماشه را تست کنید

همه محرک‌ها را فهرست کنید تا تأیید کنید که ماشه با موفقیت ایجاد شده است:

gcloud beta events triggers list

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

اکنون آماده هستید تا یک رویداد را فعال کنید.

یک فایل تصادفی را در سطل فضای ذخیره سازی ابری آپلود کنید:

echo "Hello World" > random.txt
gsutil cp random.txt gs://${BUCKET_NAME}/random.txt

اگر گزارش های سرویس Cloud Run را در Cloud Console بررسی کنید، باید رویداد دریافتی را مشاهده کنید:

aff3b2e7ad05c75d.png

ماشه را حذف کنید

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

gcloud beta events triggers delete trigger-storage

14. یک راه‌انداز رویداد برای Cloud Scheduler ایجاد کنید

شما یک ماشه برای گوش دادن به رویدادها از Cloud Scheduler تنظیم خواهید کرد.

یک برنامه App Engine ایجاد کنید

Cloud Scheduler در حال حاضر به کاربران برای ایجاد یک برنامه App Engine نیاز دارد. یک مکان App Engine را انتخاب کنید و برنامه را ایجاد کنید:

export APP_ENGINE_LOCATION=europe-west
gcloud app create --region=${APP_ENGINE_LOCATION}

یک ماشه ایجاد کنید

با اجرای دستور زیر می‌توانید جزئیات بیشتری در مورد پارامترهایی که برای ایجاد یک ماشه برای رویدادها نیاز دارید از منابع Google Cloud دریافت کنید:

gcloud beta events types describe google.cloud.scheduler.job.v1.executed

یک مکان Cloud Scheduler را برای ایجاد زمان‌بندی انتخاب کنید:

export SCHEDULER_LOCATION=europe-west1

یک Trigger ایجاد کنید که هر دقیقه یک کار در Google Cloud Scheduler ایجاد می کند و با سرویس مورد نظر تماس بگیرید:

gcloud beta events triggers create trigger-scheduler \
  --namespace ${NAMESPACE} \
  --target-service=${SERVICE_NAME} \
  --type=google.cloud.scheduler.job.v1.executed \
  --parameters location=${SCHEDULER_LOCATION} \
  --parameters schedule="* * * * *" \
  --parameters data="trigger-scheduler-data"

ماشه را تست کنید

همه محرک‌ها را فهرست کنید تا تأیید کنید که ماشه با موفقیت ایجاد شده است:

gcloud beta events triggers list

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

اگر گزارش های سرویس Cloud Run را در Cloud Console بررسی کنید، باید رویداد دریافتی را مشاهده کنید.

ماشه را حذف کنید

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

gcloud beta events triggers delete trigger-scheduler

15. رویدادهای سفارشی (نقطه پایان کارگزار)

در این قسمت از Codelab با استفاده از Broker رویدادهای سفارشی را تولید و مصرف خواهید کرد.

Curl Pod را برای تولید رویدادها ایجاد کنید

رویدادها معمولاً به صورت برنامه نویسی ایجاد می شوند. با این حال، در این مرحله curl برای ارسال دستی رویدادهای فردی و مشاهده نحوه دریافت این رویدادها توسط مصرف کننده صحیح استفاده خواهید کرد.

برای ایجاد یک Pod که به عنوان تولید کننده رویداد عمل می کند، دستور زیر را اجرا کنید:

cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
  labels:
    run: curl
  name: curl
  namespace: $NAMESPACE
spec:
  containers:
  - image: radial/busyboxplus:curl
    imagePullPolicy: IfNotPresent
    name: curl
    resources: {}
    stdin: true
    terminationMessagePath: /dev/termination-log
    terminationMessagePolicy: File
    tty: true
EOF

بررسی کنید که کرل پاد به درستی کار می کند. شما باید یک غلاف به نام curl با Status=Running ببینید:

kubectl get pod curl -n ${NAMESPACE}

یک ماشه ایجاد کنید

شما یک Trigger با یک فیلتر روی نوع خاص CloudEvents (در این مورد alpha-type ) که منتشر می کنید ایجاد خواهید کرد. توجه داشته باشید که فیلتر مطابقت دقیق در هر تعداد از ویژگی‌های CloudEvents و همچنین برنامه‌های افزودنی پشتیبانی می‌شود. اگر فیلتر شما چندین ویژگی را تنظیم می‌کند، یک رویداد باید همه ویژگی‌ها را داشته باشد تا Trigger آن را فیلتر کند. برعکس، اگر فیلتری را مشخص نکنید، همه رویدادها در سرویس شما دریافت خواهند شد.

ایجاد محرک:

gcloud beta events triggers create trigger-custom \
  --namespace ${NAMESPACE} \
  --target-service ${SERVICE_NAME} \
  --type=alpha-type \
  --custom-type

ماشه را تست کنید

همه محرک‌ها را فهرست کنید تا تأیید کنید که ماشه با موفقیت ایجاد شده است:

gcloud beta events triggers list

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

kubectl get brokers -n ${NAMESPACE}

NAME      READY   REASON   URL
default   True             http://default-broker.<NAMESPACE>.svc.cluster.local

SSH به غلاف curl که قبلا ایجاد کردید:

kubectl --namespace ${NAMESPACE} attach curl -it

شما SSH را به پادک وارد کرده اید، و اکنون می توانید درخواست HTTP داشته باشید. یک اعلان مشابه زیر ظاهر می شود:

Defaulting container name to curl.
Use 'kubectl describe pod/curl -n default' to see all of the containers in this pod.
If you don't see a command prompt, try pressing enter.
[ root@curl:/ ]$

ایجاد یک رویداد:

curl -v "<BROKER-URL>" \
-X POST \
-H "Ce-Id: my-id" \
-H "Ce-Specversion: 1.0" \
-H "Ce-Type: alpha-type" \
-H "Ce-Source: my-source" \
-H "Content-Type: application/json" \
-d '{"msg":"send-cloudevents-to-broker"}'

اگر رویداد دریافت شده باشد، یک پاسخ HTTP 202 Accepted دریافت خواهید کرد. با Ctrl + D از جلسه SSH خارج شوید

بررسی کنید که رویداد منتشر شده با مشاهده گزارش‌های سرویس Cloud Run ارسال شده است:

kubectl logs --selector serving.knative.dev/service=$SERVICE_NAME \
 -c user-container -n $NAMESPACE --tail=100

ماشه را حذف کنید

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

gcloud beta events triggers delete trigger-custom

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

برای تکمیل کد لبه تبریک می گویم.

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

  • چشم انداز بلند مدت رویدادها برای Cloud Run برای Anthos
  • وضعیت فعلی رویدادها برای Cloud Run برای Anthos
  • یک سینک Cloud Run ایجاد کنید
  • یک راه‌انداز رویداد برای Cloud Pub/Sub ایجاد کنید
  • یک راه‌انداز رویداد برای گزارش‌های حسابرسی ایجاد کنید
  • یک راه‌انداز رویداد برای فضای ذخیره‌سازی ابری ایجاد کنید
  • یک راه‌انداز رویداد برای Cloud Scheduler ایجاد کنید
  • رویدادهای سفارشی را تولید و مصرف کنید