اجرای Cloud Run با رویدادهای Eventarc را فعال کنید

۱. مقدمه

۸۹۴۷۶۲ebb۶۸۱۶۷۱c.png

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

cb762f29e9183a3f.png

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

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

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

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

۲. چشم‌انداز ایونتارک

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

59b147dc030b2b0b.png

منابع ابری گوگل

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

منابع گوگل

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

منابع سفارشی

منابع رویدادی که متعلق به گوگل نیستند و توسط خود کاربران نهایی ایجاد شده‌اند

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

منابع رویدادی که نه متعلق به گوگل هستند و نه توسط مشتری تولید می‌شوند. این شامل منابع رویداد محبوبی مانند Check Point CloudGuard، Datadog، ForgeRock، Lacework و غیره می‌شود که متعلق به ارائه دهندگان و شرکای شخص ثالث بوده و توسط آنها نگهداری می‌شوند.

رویدادها برای قابلیت همکاری بین سرویس‌ها، به فرمت CloudEvents نسخه ۱.۰ نرمال‌سازی شده‌اند. CloudEvents یک استاندارد باز و بی‌طرف از نظر فروشنده است که داده‌های رویداد را در قالب‌های رایج توصیف می‌کند و امکان همکاری بین سرویس‌ها، پلتفرم‌ها و سیستم‌ها را فراهم می‌کند.

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

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

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

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

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

شروع پوسته ابری

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

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

55efc1aaa7a4d3ad.png

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

7ffe5cbb04455448.png

این ماشین مجازی مجهز به تمام ابزارهای توسعه مورد نیاز شماست. این ماشین یک دایرکتوری خانگی دائمی ۵ گیگابایتی ارائه می‌دهد و روی فضای ابری گوگل اجرا می‌شود که عملکرد شبکه و احراز هویت را تا حد زیادی بهبود می‌بخشد. تمام کارهای شما در این آزمایشگاه را می‌توان به سادگی با یک مرورگر انجام داد.

قبل از اینکه شروع کنی

در داخل Cloud Shell، مطمئن شوید که شناسه پروژه شما تنظیم شده است:

PROJECT_ID=your-project-id
gcloud config set project $PROJECT_ID

۴. یک سرویس Cloud Run راه‌اندازی کنید

یک سرویس Cloud Run برای دریافت رویدادها مستقر کنید. شما کانتینر Hello مربوط به Cloud Run را مستقر خواهید کرد که محتویات CloudEvents را ثبت می‌کند.

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

gcloud services enable run.googleapis.com

کانتینر hello را در Cloud Run مستقر کنید:

REGION=us-central1
SERVICE_NAME=hello

gcloud run deploy $SERVICE_NAME \
  --allow-unauthenticated \
  --image=gcr.io/cloudrun/hello \
  --region=$REGION

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

۵. کشف رویداد

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

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

gcloud beta eventarc attributes types list

NAME                                           DESCRIPTION
google.cloud.audit.log.v1.written              Cloud Audit Log written
google.cloud.pubsub.topic.v1.messagePublished  Cloud Pub/Sub message published
google.cloud.storage.object.v1.archived         Cloud Storage: Sent when a live version of an (object versioned) object is archived or deleted.
google.cloud.storage.object.v1.deleted          Cloud Storage: Sent when an object has been permanently deleted.
google.cloud.storage.object.v1.finalized        Cloud Storage: Sent when a new object (or a new generation of an existing object).
google.cloud.storage.object.v1.metadataUpdated  Cloud Storage: Sent when the metadata of an existing object changes.

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

gcloud beta eventarc attributes types describe google.cloud.audit.log.v1.written

attributes: type,serviceName,methodName,resourceName
description: 'Cloud Audit Log: Sent when a log is written.'
name: google.cloud.audit.log.v1.written

برای مشاهده لیست سرویس‌هایی که نوع خاصی از رویداد را منتشر می‌کنند:

gcloud beta eventarc attributes service-names list --type=google.cloud.audit.log.v1.written

SERVICE_NAME                                DISPLAY_NAME
accessapproval.googleapis.com               Access Approval
accesscontextmanager.googleapis.com         Access Context Manager
admin.googleapis.com                        Google Workspace Admin
aiplatform.googleapis.com                   AI Platform (under Vertex AI)
apigee.googleapis.com                       Apigee
apigeeconnect.googleapis.com                Apigee Connect
...
workflows.googleapis.com                    Workflows

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

gcloud beta eventarc attributes method-names list --type=google.cloud.audit.log.v1.written --service-name=workflows.googleapis.com

METHOD_NAME
google.cloud.workflows.v1.Workflows.CreateWorkflow
google.cloud.workflows.v1.Workflows.DeleteWorkflow
google.cloud.workflows.v1.Workflows.GetWorkflow
google.cloud.workflows.v1.Workflows.ListWorkflows
google.cloud.workflows.v1.Workflows.UpdateWorkflow
google.cloud.workflows.v1beta.Workflows.CreateWorkflow
google.cloud.workflows.v1beta.Workflows.DeleteWorkflow
google.cloud.workflows.v1beta.Workflows.GetWorkflow
google.cloud.workflows.v1beta.Workflows.ListWorkflows
google.cloud.workflows.v1beta.Workflows.UpdateWorkflow

۶. یک تریگر Pub/Sub ایجاد کنید

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

راه‌اندازی

قبل از ایجاد هرگونه تریگر، سرویس‌های مورد نیاز برای Eventarc را فعال کنید:

gcloud services enable eventarc.googleapis.com

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

SERVICE_ACCOUNT=eventarc-trigger-sa

gcloud iam service-accounts create $SERVICE_ACCOUNT

ایجاد کردن

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

TRIGGER_NAME=trigger-pubsub

gcloud eventarc triggers create $TRIGGER_NAME \
  --destination-run-service=$SERVICE_NAME \
  --destination-run-region=$REGION \
  --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
  --location=$REGION \
  --service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com

تست

تریگر Pub/Sub یک موضوع (topic) مخفی ایجاد می‌کند. بیایید آن را پیدا کنیم و به یک متغیر اختصاص دهیم:

TOPIC_ID=$(gcloud eventarc triggers describe $TRIGGER_NAME --location $REGION --format='value(transport.pubsub.topic)')

از gcloud برای انتشار پیام در تاپیک استفاده کنید:

gcloud pubsub topics publish $TOPIC_ID --message="Hello World"

سرویس Cloud Run بدنه پیام ورودی را ثبت می‌کند. می‌توانید این را در بخش Logs نمونه Cloud Run خود مشاهده کنید:

69e0177e04a0d1af.png

با یک موضوع میخانه/زیرموضوع موجود ایجاد کنید

به طور پیش‌فرض، وقتی یک تریگر Pub/Sub ایجاد می‌کنید، Eventarc یک تاپیک در زیر پوشش ایجاد می‌کند تا شما بتوانید از آن به عنوان یک تاپیک انتقال بین برنامه خود و یک سرویس Cloud Run استفاده کنید. این برای ایجاد آسان و سریع یک تریگر پشتیبانی شده توسط Pub/Sub مفید است، اما گاهی اوقات ممکن است بخواهید از یک تاپیک موجود استفاده کنید. Eventarc به شما امکان می‌دهد یک تاپیک Pub/Sub موجود را در همان پروژه با پرچم --transport-topic gcloud مشخص کنید.

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

TOPIC_ID=eventarc-topic

gcloud pubsub topics create $TOPIC_ID

یک تریگر ایجاد کنید:

TRIGGER_NAME=trigger-pubsub-existing

gcloud eventarc triggers create $TRIGGER_NAME \
  --destination-run-service=$SERVICE_NAME \
  --destination-run-region=$REGION \
  --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
  --location=$REGION \
  --transport-topic=projects/$PROJECT_ID/topics/$TOPIC_ID \
  --service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com

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

gcloud pubsub topics publish $TOPIC_ID --message="Hello again"

۷. یک محرک ذخیره‌سازی ابری ایجاد کنید

در این مرحله، یک تریگر (trigger) برای دریافت رویدادها از فضای ذخیره‌سازی ابری (Cloud Storage) ایجاد خواهید کرد.

راه‌اندازی

ابتدا، یک باکت (bucket) برای دریافت رویدادها از موارد زیر ایجاد کنید:

BUCKET_NAME=eventarc-gcs-$PROJECT_ID

gsutil mb -l $REGION gs://$BUCKET_NAME

نقش eventarc.eventReceiver را اعطا کنید، تا حساب سرویس بتواند در یک تریگر Cloud Storage استفاده شود:

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --role roles/eventarc.eventReceiver \
  --member serviceAccount:$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com

همچنین باید نقش pubsub.publisher را به حساب سرویس Cloud Storage برای تریگرهای Cloud Storage اضافه کنید:

SERVICE_ACCOUNT_STORAGE=$(gsutil kms serviceaccount -p $PROJECT_ID)

gcloud projects add-iam-policy-binding $PROJECT_ID \
    --member serviceAccount:$SERVICE_ACCOUNT_STORAGE \
    --role roles/pubsub.publisher

ایجاد کردن

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

TRIGGER_NAME=trigger-storage

gcloud eventarc triggers create $TRIGGER_NAME \
  --destination-run-service=$SERVICE_NAME \
  --destination-run-region=$REGION \
  --event-filters="type=google.cloud.storage.object.v1.finalized" \
  --event-filters="bucket=$BUCKET_NAME" \
  --location=$REGION \
  --service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com

تست

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

gcloud eventarc triggers list

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

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

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

904cfc93bb8e8df1.png

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

اگرچه تریگر Cloud Storage روش بهتری برای گوش دادن به رویدادهای Cloud Storage است، در این مرحله، شما یک تریگر Cloud Audit Log برای انجام همین کار ایجاد می‌کنید.

راه‌اندازی

برای دریافت رویدادها از یک سرویس، باید Cloud Audit Logs را فعال کنید. از کنسول Cloud، IAM & Admin و Audit Logs از منوی سمت چپ بالا انتخاب کنید. در لیست سرویس‌ها، Google Cloud Storage تیک بزنید:

3c654597faed237c.png

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

۱deb3ad78f11dd5f.png

ایجاد کردن

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

TRIGGER_NAME=trigger-auditlog-storage

gcloud eventarc triggers create $TRIGGER_NAME\
  --destination-run-service=$SERVICE_NAME \
  --destination-run-region=$REGION \
  --event-filters="type=google.cloud.audit.log.v1.written" \
  --event-filters="serviceName=storage.googleapis.com" \
  --event-filters="methodName=storage.objects.create" \
  --event-filters-path-pattern="resourceName=/projects/_/buckets/$BUCKET_NAME/objects/*" \
  --location=$REGION \
  --service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com

تست

فعال‌سازی اولیه‌ی تریگرهای Audit Logs کمی زمان می‌برد. می‌توانید با فهرست کردن تمام تریگرها، از ایجاد شدن تریگر مطمئن شوید:

gcloud eventarc triggers list

باید ببینید که فیلد ACTIVE Yes است:

NAME                          TYPE                                       DESTINATION               ACTIVE
trigger-auditlog-storage  google.cloud.audit.log.v1.written              Cloud Run service: hello  Yes

همان فایلی را که قبلاً آپلود کردید، در فضای ذخیره‌سازی ابری آپلود کنید:

gsutil cp random.txt gs://$BUCKET_NAME/random.txt

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

7be7859bcc8976f8.png

۹. رابط کاربری Eventarc را بررسی کنید

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

به بخش Eventarc در Google Cloud بروید:

81e139f17e0d29bf.png

لیست تریگرهایی که قبلاً ایجاد کرده‌اید را مشاهده خواهید کرد:

3240c7c830398718.png

اگر روی یک تریگر کلیک کنید، می‌توانید جزئیات تریگر را مشاهده کنید، آن را ویرایش یا حذف کنید:

b4d8bbc6601a8b9e.png

همچنین می‌توانید با انتخاب Create trigger و پر کردن جزئیات تریگر، یک تریگر جدید ایجاد کنید:

3ee290ec72f130d5.png

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

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

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

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