1. بررسی اجمالی
در این آزمایشگاه، یک کار Cloud Run ایجاد می کنید و یک کار Cloud Scheduler را راه اندازی می کنید. با استفاده از اسکریپت تنظیمات، سرویس منوی Cymbal Eats را اجرا خواهید کرد. شما یک کار Cloud Run ایجاد خواهید کرد که با سرویس منوی Cymbal Eats تماس های API برقرار می کند. شما کار را با استفاده از Google Cloud CLI اجرا میکنید و برنامهای برای آن کار تنظیم میکنید. با بررسی گزارشها و برقراری تماسهای API با سرویس منو برای تأیید اینکه آیتمهای منو حذف شدهاند، اجرا را تأیید میکنید.
مشاغل Cloud Run چیست؟
کار Cloud Run محفظهای را اجرا میکند که درخواستهای وب را ارائه نمیکند، اما در عوض وظایف عملیاتی یا پردازش دادهها را اجرا میکند. ظرف کار را اجرا می کند و پس از اتمام کار خارج می شود.
کار خدمات پاکسازی
کار سرویس پاکسازی آیتم های منو را در وضعیت Failed بازیابی می کند و آنها را حذف می کند. هنگامی که آیتم های منوی جدید ایجاد می شوند، تصاویر با استفاده از Vision API تجزیه و تحلیل می شوند تا تشخیص دهند که آیا یک ماده غذایی است یا نه. برای تصاویری که این اعتبارسنجی را انجام نمی دهند، وضعیت آیتم های منو به Failed به روز می شود و متعاقباً توسط کار پاکسازی حذف می شود.
آنچه خواهید آموخت
در این آزمایشگاه با نحوه انجام کارهای زیر آشنا می شوید:
- مشاغل Cloud Run را ایجاد کنید
- کارهای Cloud Run را اجرا کنید
- ایجاد مشاغل Cloud Scheduler
- بررسی اجرای مشاغل
پیش نیازها
- این آزمایشگاه آشنایی با کنسول Cloud و محیط های پوسته را فرض می کند.
- تجربه قبلی Cloud Run و Cloud Scheduler مفید است اما لازم نیست.
2. راه اندازی و الزامات
راه اندازی پروژه ابری
- به Google Cloud Console وارد شوید و یک پروژه جدید ایجاد کنید یا از یک موجود استفاده مجدد کنید. اگر قبلاً یک حساب Gmail یا Google Workspace ندارید، باید یک حساب ایجاد کنید .
- نام پروژه نام نمایشی برای شرکت کنندگان این پروژه است. این یک رشته کاراکتری است که توسط API های Google استفاده نمی شود. شما می توانید آن را در هر زمان به روز کنید.
- شناسه پروژه در تمام پروژههای Google Cloud منحصربهفرد است و تغییرناپذیر است (پس از تنظیم نمیتوان آن را تغییر داد). Cloud Console به طور خودکار یک رشته منحصر به فرد تولید می کند. معمولاً برای شما مهم نیست که چیست. در اکثر کدها، باید به شناسه پروژه ارجاع دهید (معمولاً به عنوان
PROJECT_ID
شناخته می شود). اگر شناسه تولید شده را دوست ندارید، ممکن است یک شناسه تصادفی دیگر ایجاد کنید. از طرف دیگر، میتوانید خودتان را امتحان کنید و ببینید آیا در دسترس است یا خیر. پس از این مرحله نمی توان آن را تغییر داد و در طول مدت پروژه باقی می ماند. - برای اطلاع شما، یک مقدار سوم وجود دارد، یک شماره پروژه که برخی از API ها از آن استفاده می کنند. در مورد هر سه این مقادیر در مستندات بیشتر بیاموزید.
- در مرحله بعد، برای استفاده از منابع Cloud/APIها باید صورتحساب را در کنسول Cloud فعال کنید . اجرا کردن از طریق این کد لبه نباید هزینه زیادی داشته باشد، اگر اصلاً باشد. برای اینکه منابع را خاموش کنید تا بیش از این آموزش متحمل صورتحساب نشوید، می توانید منابعی را که ایجاد کرده اید حذف کنید یا کل پروژه را حذف کنید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان 300 دلاری هستند.
راه اندازی محیط
Cloud Shell را با کلیک بر روی نماد سمت راست نوار جستجو فعال کنید.
از Cloud Shell، دستور زیر را اجرا کنید تا کد برنامه را از این مخزن کلون کنید و به دایرکتوری حاوی سرویس منو بروید:
git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git && cd cymbal-eats/menu-service
سرویس منو را با استفاده از اسکریپت راهاندازی در Cloud Run اجرا کنید. سرویس Menu یک میکروسرویس مبتنی بر جاوا است که با چارچوب Quarkus با استفاده از پایگاه داده Cloud SQL Postgres برای باطن خود ساخته شده است. سرویس Menu وابستگی زمان اجرا برای کار Cloud Run است که در مراحل زیر ایجاد خواهید کرد.
./setup.sh
استقرار حدود 10 دقیقه طول می کشد تا تمام اجزای مورد نیاز ایجاد شود.
پس از اجرای دستور بالا مراحل بعدی را ادامه دهید.
3. کد شغلی Cloud Run را کاوش کنید
با کلیک بر روی نماد مثبت، یک تب جدید در Cloud Shell باز کنید.
به دایرکتوری حاوی سرویس پاکسازی بروید و فایلهایی را که کار را تشکیل میدهند مرور کنید:
cd ~/cymbal-eats/cleanup-service
سرویس پاکسازی در این فهرست حاوی یک Dockerfile
است که تصویر کانتینر را برای کار سرویس پاکسازی با وابستگیهای مورد نیاز (httpie, jq) تعریف میکند.
Dockerfile
FROM ubuntu:latest
RUN apt-get update && apt-get install -y httpie jq && apt-get clean
COPY script.sh /
RUN chmod +x /script.sh
CMD ["/script.sh"]
ENTRYPOINT ["/bin/bash"]
اسکریپت پاکسازی واقعی، فهرست شده در زیر، حاوی دستوراتی برای دریافت لیستی از آیتم های منو در وضعیت ناموفق و حذف آنها با برقراری تماس های API با سرویس Menu است.
script.sh
echo "FAILED_ITEM_AGE=$FAILED_ITEM_AGE"
echo "MENU_SERVICE_URL=$MENU_SERVICE_URL"
# Failed items older than FAILED_ITEM_AGE in minutes
for id in $(http GET $MENU_SERVICE_URL/menu/failed | jq '[.[] | select(.updateDateTime < ((now - 60 * (env.FAILED_ITEM_AGE | tonumber) )| strftime("%Y-%m-%dT%H:%M:%S.%f")))]'| jq '.[].id'); do
echo "Deleting Menu Item : $MENU_SERVICE_URL/menu/$id"
http GET $MENU_SERVICE_URL/menu/$id
http DELETE $MENU_SERVICE_URL/menu/$id
done
# Processing items older than FAILED_ITEM_AGE in minutes
for id in $(http GET $MENU_SERVICE_URL/menu/processing | jq '[.[] | select(.updateDateTime < ((now - 60 * (env.FAILED_ITEM_AGE | tonumber))| strftime("%Y-%m-%dT%H:%M:%S.%f")))]'| jq '.[].id'); do
echo "Deleting Menu Item : $MENU_SERVICE_URL/menu/$id"
http GET $MENU_SERVICE_URL/menu/$id
http DELETE $MENU_SERVICE_URL/menu/$id
done
در مورد اسکریپت به موارد زیر توجه کنید:
- متغیرهای محیطی
FAILED_ITEM_AGE
وMENU_SERVICE_URL
در حین استقرار تنظیم میشوند و با کار Cloud Run ارسال میشوند. -
FAILED_ITEM_AGE
- تعداد دقیقه قبل از مورد ناموفق حذف خواهد شد. -
MENU_SERVICE_URL
- نشانی اینترنتی سرویس منوی Cymbal Eats.
4. Cloud Run Job ایجاد کنید
در مرحله بعد یک تصویر ظرف می سازید و آن را در رجیستری Artifact منتشر می کنید.
این تصویر ظرف برای ایجاد یک کار Cloud Run استفاده خواهد شد.
فعال کردن API های سرویس:
gcloud services enable \
run.googleapis.com \
artifactregistry.googleapis.com \
cloudscheduler.googleapis.com \
--quiet
تنظیم متغیرهای محیطی:
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)')
export REGION=us-east1
export MENU_SERVICE_NAME=menu-service
یک مخزن رجیستری Artifact جدید برای ذخیره تصاویر داکر برای کار پاکسازی ایجاد کنید:
gcloud artifacts repositories create cymbal-eats --repository-format=docker --location=$REGION
تصویر کانتینر را با استفاده از Cloud Build بسازید و با یک دستور آن را به رجیستری Artifact فشار دهید:
gcloud builds submit -t $REGION-docker.pkg.dev/$PROJECT_NAME/cymbal-eats/cleanup-service:latest
خروجی نمونه:
DURATION: 35S SOURCE: gs://cymbal-eats-14906-569_cloudbuild/source/1657126400.933586-dc3e91ec85934a55bb6d2f7012611365.tgz IMAGES: us-east1-docker.pkg.dev/cymbal-eats-14906-569/cymbal-eats/cleanup-service (+1 more) STATUS: SUCCESS
پس از اتمام انتشار، به رجیستری Artifact بروید و تصویر منتشر شده را بررسی کنید:
به برگه دوم Cloud Shell برگردید. دستور زیر را برای توصیف سرویس Menu اجرا کنید و URL را در متغیر محیط ذخیره کنید. این متغیر محیطی برای پیکربندی کار Cloud Run استفاده خواهد شد.
MENU_SERVICE_URL=$(gcloud run services describe $MENU_SERVICE_NAME \
--region=$REGION \
--format=json | jq \
--raw-output ".status.url")
یک کار Cloud Run ایجاد کنید تا موارد منوی ناموفق قدیمیتر از 1 دقیقه را پاک کنید [تنظیم شده توسط FAILED_ITEM_AGE
].
gcloud beta run jobs create cleanup-service \
--image=$REGION-docker.pkg.dev/$PROJECT_NAME/cymbal-eats/cleanup-service:latest \
--set-env-vars MENU_SERVICE_URL=$MENU_SERVICE_URL \
--set-env-vars FAILED_ITEM_AGE=1 \
--region $REGION
خروجی نمونه:
Creating Cloud Run job [cleanup-service] in project [cymbal-eats] region [us-east1] OK Creating job... Done. Done. Job [cleanup-service] has successfully been created.
به بخش Cloud Run JOBS در کنسول بروید و کار ایجاد شده را بررسی کنید.
روی کار کلیک کنید و برگه های موجود را کاوش کنید: HISTORY، LOGS، CONFIGURATION و YAML.
با بررسی بخش CONFIGURATION کار در کنسول، بررسی کنید که متغیرهای محیطی تنظیم شده اند:
(اختیاری) اگر می خواهید متغیرهای آدرس اینترنتی Failed Item Age یا Menu Service را تغییر دهید، پس از ایجاد کار Cloud Run، می توانید از دستور update استفاده کنید:
gcloud beta run jobs update cleanup-service \
--image=$REGION-docker.pkg.dev/$PROJECT_NAME/cymbal-eats/cleanup-service:latest \
--set-env-vars MENU_SERVICE_URL=$MENU_SERVICE_URL \
--set-env-vars FAILED_ITEM_AGE=1 \
--region $REGION
برای تأیید اعتبار کار، کار Cloud Run را با اجرای دستور زیر اجرا کنید:
gcloud beta run jobs execute cleanup-service --region=$REGION
خروجی نمونه:
OK Creating execution... Done. OK Provisioning resources... Done. Execution [cleanup-service-rlxs4] has successfully started running. View details about this execution by running: gcloud beta run jobs executions describe cleanup-service-rlxs4
برای بررسی خروجی کار، به برگه LOGS بروید. شما باید آدرس اینترنتی سرویس منو و سن مورد ناموفق را در گزارشها ببینید.
5. یک برنامه برای Cloud Run Job تنظیم کنید
Cloud Scheduler یک برنامه زمان بندی شغلی cron درجه سازمانی کاملاً مدیریت شده است. این به شما امکان می دهد تقریباً هر کاری را برنامه ریزی کنید، از جمله کارهای دسته ای، کارهای داده های بزرگ، عملیات زیرساخت ابری و موارد دیگر.
یکی از بهترین روش های امنیتی هنگام کار با یک کار Cloud Scheduler این است که هر کار را با اعتبار جداگانه اجرا کنید. در این مرحله یک حساب سرویس برای استفاده توسط کار زمانبندی پاکسازی ایجاد کنید.
export SCHEDULER_SERVICE_ACCOUNT=cleanup-scheduler-job-sa
gcloud iam service-accounts create ${SCHEDULER_SERVICE_ACCOUNT}
کار Cloud Scheduler برای برقراری تماس با Cloud Run Jobs به مجوز نیاز دارد.
اعطای نقش Cloud Run Invoker
به حساب سرویسی که در کار Cloud Scheduler استفاده می شود:
gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:${SCHEDULER_SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com" \
--role="roles/run.invoker"
در مرحله بعد، برنامه ای برای اجرای کار سرویس پاکسازی تنظیم می کنید.
چندین نوع هدف وجود دارد که توسط Cloud Scheduler پشتیبانی می شود.
- HTTP
- میخانه / فرعی
- موتور برنامه HTTP
شما با استفاده از نوع هدف HTTP یک کار زمانبندی ایجاد خواهید کرد.
برای اهداف نمایشی، برنامه ریزی می کنید که هر 5 دقیقه اجرا شود.
gcloud scheduler jobs create http cleanup-schedule \
--location $REGION \
--schedule="*/5 * * * *" \
--uri="https://$REGION-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/$PROJECT_ID/jobs/cleanup-service:run" \
--http-method POST \
--oauth-service-account-email ${SCHEDULER_SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com
بررسی پارامتر uri
که برای فراخوانی Cloud Run Job استفاده می شود:
-
REGION
وPROJECT_ID
- منطقه اجرای ابر و شناسه پروژه که در آن کار سرویس پاکسازی مستقر است -
cleanup-service
- نام Cloud Run Job
برای بررسی کار زمانبندی ایجاد شده، به Cloud Scheduler در کنسول بروید:
گزینه های موجود را در منوی Actions مرور کنید.
6. Cloud Run Job را تست کنید
با استفاده از نقاط پایانی خدمات منو، آیتم های منوی موجود و وضعیت آنها را بررسی کنید:
curl ${MENU_SERVICE_URL}/menu | jq
خروجی:
3 مورد منو را در وضعیت Ready
خواهید دید.
تغییر وضعیت آیتم منو شماره 1 به Failed
:
curl -X PUT "${MENU_SERVICE_URL}/menu/1" \
-H 'Content-Type: application/json' \
-d '{"status": "Failed"}' | jq
1 دقیقه صبر کنید. برای اینکه آیتم منو حذف شود، باید 1 دقیقه قدیمی باشد، همانطور که توسط پارامتر FAILED_ITEM_AGE
تنظیم شده است.
می توانید منتظر اجرای برنامه ریزی شده بعدی باشید یا اجرای کار را از کنسول اجباری کنید.
راه های مختلفی برای راه اندازی یک کار، از طریق UI یا از خط فرمان وجود دارد.
برای این مثال، دستور را در Cloud Shell (گزینه شماره 3) اجرا کنید تا کار را فعال کنید.
- از Cloud Scheduler با انتخاب "Force a job run" از منوی Actions.
- از Cloud Run Job با کلیک بر روی دکمه "EXECUTE".
- از Cloud Shell با اجرای دستور زیر:
gcloud beta run jobs execute cleanup-service --region=$REGION
به بخش Cloud Run JOBS بروید، تب LOGS را باز کنید و بررسی کنید که آیتم منو حذف شده است.
سیاهههای مربوط به "حذف" کلمه کلیدی را برای یافتن سیاههها فیلتر کنید.
از نقاط پایانی سرویس منو برای بررسی موارد موجود در منو از طریق نقطه پایانی REST استفاده کنید.
curl ${MENU_SERVICE_URL}/menu | jq
خروجی:
2 آیتم منو را در وضعیت Ready
خواهید دید.
7. تبریک می گویم!
تبریک می گویم، شما نرم افزار کد را تمام کردید!
آنچه ما پوشش داده ایم:
- نحوه ایجاد مشاغل Cloud Run
- نحوه اجرای کارهای Cloud Run
- نحوه ایجاد مشاغل Cloud Scheduler
- نحوه تأیید اجرای مشاغل
بعدش چیه:
سایر کدهای Cymbal Eats را کاوش کنید:
- راهاندازی گردشهای کاری ابری با Eventarc
- راه اندازی پردازش رویداد از فضای ذخیره سازی ابری
- اتصال به Private CloudSQL از Cloud Run
- اتصال به پایگاه های داده کاملاً مدیریت شده از Cloud Run
- برنامه امن بدون سرور با پروکسی آگاه از هویت (IAP)
- استقرار ایمن در Cloud Run
- ایمن سازی ترافیک ورودی در اجرای ابر
- اتصال به AlloyDB خصوصی از GKE Autopilot
تمیز کردن
برای جلوگیری از تحمیل هزینه به حساب Google Cloud خود برای منابع استفاده شده در این آموزش، یا پروژه حاوی منابع را حذف کنید یا پروژه را نگه دارید و منابع فردی را حذف کنید.
حذف پروژه
ساده ترین راه برای حذف صورتحساب، حذف پروژه ای است که برای آموزش ایجاد کرده اید.