במדריך הזה נסביר איך להשתמש ב-Cloud Scheduler ובפונקציות Cloud Run כדי להפעיל ולהפסיק אוטומטית מופעים של Compute Engine בלוח זמנים קבוע באמצעות תוויות משאבים.
מטרות
- כתיבה ופריסה של קבוצת פונקציות באמצעות פונקציות Cloud Run שמפעילות ומפסיקות מכונות של Compute Engine.
- יוצרים קבוצה של משימות באמצעות Cloud Scheduler כדי לתזמן מופעים עם תווית משאב
devלהפעלה בין השעות 09:00 ל-17:00, בימים שני עד שישי, בהתאם לשעות הפעילות הרגילות.
עלויות
במסמך הזה משתמשים ברכיבים הבאים של Google Cloud, והשימוש בהם כרוך בתשלום:
- Cloud Scheduler
- Cloud Run functions
- Pub/Sub
- Compute Engine
כדי להעריך את ההוצאות בהתאם לתחזית השימוש שלכם, אתם יכולים להיעזר במחשבון העלויות.
לפני שמתחילים
- מגדירים את הסביבה ל-Cloud Scheduler.
מפעילים את ממשקי ה-API של פונקציות Cloud Run, Pub/Sub ו-Compute Engine.
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, צריך את תפקיד ה-IAM 'אדמין של Service Usage' (
roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאהserviceusage.services.enable. איך מקצים תפקידים
ארכיטקטורה של אפליקציות
הפתרון הזה כולל את הרכיבים הבאים Google Cloud :
- מכונה של Compute Engine שאנחנו רוצים להפעיל לפי לוח זמנים.
- Cloud Run functions כדי להפעיל ולהפסיק את המכונה שאנחנו רוצים לתזמן.
- הודעות Pub/Sub שנשלחות ומתקבלות לכל אירוע התחלה ועצירה.
- משימות של Cloud Scheduler כדי לבצע שיחות לפי לוח זמנים מוגדר, כדי להפעיל ולהפסיק את המופע.
דרישות לגבי מיקומים
יש רכיבים שנתמכים רק באזורים מסוימים:
- מכונת Compute Engine: נתמכת בכל אזור שמופיע באזורים ותחומים.
- פונקציות Cloud Run: נתמכות באזורים שמפורטים במיקומים.
- הודעות Pub/Sub: נתמכות באופן גלובלי כי Pub/Sub הוא שירות גלובלי.
- משימות של Cloud Scheduler עם יעדי Pub/Sub: נתמכות בכל Google Cloud מיקום.
למה לא להשתמש ב-HTTP במקום ב-Pub/Sub?
כדי לפשט את הארכיטקטורה הזו, אפשר להשתמש בטריגרים של HTTP של פונקציות Cloud Run במקום בטריגרים של Pub/Sub.
במדריך הזה משתמשים ב-Pub/Sub כטריגר לפונקציות של Cloud Run, כי בעבר השיטה הזו הייתה מאובטחת יותר משימוש ב-HTTP. עם זאת, פרוטוקול HTTP הוא גם בחירה תקפה, ועכשיו אפשר לאבטח אותו באמצעות דרישת אימות.
מידע על אבטחת פונקציות Cloud Run זמין בסקירה הכללית בנושא אבטחת פונקציות Cloud Run. השוואה בין טריגרים מסוג HTTP וטריגרים מסוג Pub/Sub מופיעה במאמר בנושא טריגרים של פונקציות Cloud Run.
הגדרת מכונה של Compute Engine
המסוף
- נכנסים לדף VM instances במסוף Google Cloud .
נכנסים לדף VM instances. - לוחצים על Create instance.
- מגדירים את Name לערך
dev-instance. - בקטע תוויות, לוחצים על הוספת תוויות.
- לוחצים על הוספת תווית.
- מזינים
envבשדה Key (מפתח) ו-devבשדה Value (ערך). - בשדה Region, בוחרים us-west1.
- בשדה Zone, בוחרים us-west1-b.
- לוחצים על Save.
- לוחצים על יצירה בתחתית הדף.
gcloud
gcloud compute instances create dev-instance \
--network default \
--zone us-west1-b \
--labels=env=dev
פריסת פונקציות שמופעלות על ידי Pub/Sub באמצעות פונקציות Cloud Run
יצירה ופריסה של הפונקציות
המסוף
יוצרים את פונקציית ההתחלה.
- נכנסים לדף Cloud Run functions במסוף Google Cloud .
כניסה לדף Cloud Run functions. - לוחצים על יצירת פונקציה.
- בשדה סביבה, בוחרים באפשרות דור ראשון.
- מגדירים את Function name לערך
startInstancePubSub. - משאירים את ערך ברירת המחדל בשדה אזור.
- בשדה Trigger type, בוחרים באפשרות Cloud Pub/Sub.
- בקטע Select a Cloud Pub/Sub topic, לוחצים על Create a topic.
- תופיע תיבת הדו-שיח Create topic.
- בקטע מזהה נושא, מזינים
start-instance-event. - כדי לסיים את תיבת הדו-שיח, לוחצים על יצירה.
- בקטע מזהה נושא, מזינים
- לוחצים על שמירה בתחתית התיבה טריגר.
- לוחצים על הבא בתחתית הדף.
- בקטע סביבת זמן ריצה, בוחרים באפשרות Node.js 16 או גרסה מתקדמת יותר.
- בשדה Entry point (נקודת כניסה), מזינים
startInstancePubSub. - בצד ימין של עורך הקוד, בוחרים באפשרות index.js.
מחליפים את קוד ההתחלה בקוד הבא:
בצד ימין של עורך הקוד, בוחרים באפשרות package.json.
מחליפים את קוד ההתחלה בקוד הבא:
לוחצים על פריסה בתחתית הדף.
יוצרים את פונקציית העצירה.
- צריך להיות בדף Cloud Run functions במסוף Google Cloud .
- לוחצים על יצירת פונקציה.
- בשדה סביבה, בוחרים באפשרות דור ראשון.
- מגדירים את Function name לערך
stopInstancePubSub. - משאירים את ערך ברירת המחדל בשדה אזור.
- בשדה Trigger type, בוחרים באפשרות Cloud Pub/Sub.
- בקטע Select a Cloud Pub/Sub topic, לוחצים על Create a topic.
- תופיע תיבת הדו-שיח Create topic.
- בקטע מזהה נושא, מזינים
stop-instance-event. - כדי לסיים את תיבת הדו-שיח, לוחצים על יצירה.
- בקטע מזהה נושא, מזינים
- לוחצים על שמירה בתחתית התיבה טריגר.
- לוחצים על הבא בתחתית הדף.
- בקטע סביבת זמן ריצה, בוחרים באפשרות Node.js 16 או גרסה מתקדמת יותר.
- בשדה Entry point (נקודת כניסה), מזינים
stopInstancePubSub. - בצד ימין של עורך הקוד, בוחרים באפשרות index.js.
מחליפים את קוד ההתחלה בקוד הבא:
בצד ימין של עורך הקוד, בוחרים באפשרות package.json.
מחליפים את קוד ההתחלה בקוד הבא:
לוחצים על פריסה בתחתית הדף.
gcloud
יוצרים את הנושאים ב-Pub/Sub.
gcloud pubsub topics create start-instance-event
gcloud pubsub topics create stop-instance-event
קבל את הקוד
מורידים את הקוד.
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
אפשרות נוספת היא להוריד את הדוגמה כקובץ ZIP ולחלץ אותה.
עוברים לספרייה הנכונה.
cd nodejs-docs-samples/functions/scheduleinstance/
יוצרים את פונקציות ההתחלה והעצירה.
אתם אמורים להיות בספרייה nodejs-docs-samples/functions/scheduleinstance/.
gcloud functions deploy startInstancePubSub \ --trigger-topic start-instance-event \ --runtime nodejs18 \ --allow-unauthenticated
gcloud functions deploy stopInstancePubSub \ --trigger-topic stop-instance-event \ --runtime nodejs18 \ --allow-unauthenticated
(אופציונלי) מאמתים שהפונקציות פועלות
המסוף
עצירת המכונה
- נכנסים לדף Cloud Run functions במסוף Google Cloud .
כניסה לדף Cloud Run functions. - לוחצים על הפונקציה שנקראת
stopInstancePubSub. - יוצגו כמה כרטיסיות: כללי, טריגר, מקור, הרשאות ובדיקה. לוחצים על הכרטיסייה בדיקה.
בקטע אירוע הפעלה מזינים את הערכים הבאים:
{"data":"eyJ6b25lIjoidXMtd2VzdDEtYiIsICJsYWJlbCI6ImVudj1kZXYifQo="}זוהי המחרוזת בקידוד Base64 של
{"zone":"us-west1-b", "label":"env=dev"}אם רוצים לקודד מחרוזת משלכם, אפשר להשתמש בכל כלי קידוד base64 באינטרנט.
לוחצים על הלחצן בדיקת הפונקציה.
בסיום ההרצה, אמור להופיע הערך
Successfully stopped instance dev-instanceמתחת לOutput. התהליך עשוי להימשך עד 60 שניות.אם במקום זאת מופיע
error: 'Error: function failed to load.', פשוט מחכים כ-10 שניות עד שהפונקציה מסיימת את הפריסה ומנסים שוב.אם במקום זאת מופיע
error: 'Error: function execution attempt timed out.', פשוט עוברים לשלב הבא כדי לבדוק אם לוקח למופע הרבה זמן להיסגר.אם במקום זאת הוא מסיים את הפעולה אבל לא מציג כלום, סביר להניח שגם במקרה הזה הוא פשוט הגיע לזמן הקצוב לתפוגה. פשוט עוברים לשלב הבא כדי לבדוק אם לוקח למופע הרבה זמן להיסגר.
נכנסים לדף VM instances במסוף Google Cloud .
נכנסים לדף VM instances.מוודאים שליד השם של המכונה
dev-instanceמופיע ריבוע אפור, שמציין שהיא הופסקה. תהליך הכיבוי עשוי להימשך עד 30 שניות.- אם נראה שהפעולה לא מסתיימת, אפשר ללחוץ על רענון בחלק העליון של הדף.
הפעלת המופע
- נכנסים לדף Cloud Run functions במסוף Google Cloud .
כניסה לדף Cloud Run functions. - לוחצים על הפונקציה שנקראת
startInstancePubSub. - יוצגו כמה כרטיסיות: כללי, טריגר, מקור, הרשאות ובדיקה. לוחצים על הכרטיסייה בדיקה.
בקטע אירוע הפעלה מזינים את הערכים הבאים:
{"data":"eyJ6b25lIjoidXMtd2VzdDEtYiIsICJsYWJlbCI6ImVudj1kZXYifQo="}- שוב, זו המחרוזת בקידוד Base64 עבור
{"zone":"us-west1-b", "label":"env=dev"}
- שוב, זו המחרוזת בקידוד Base64 עבור
לוחצים על הלחצן בדיקת הפונקציה.
בסיום ההרצה, אמור להופיע הערך
Successfully started instance dev-instanceמתחת לOutput.נכנסים לדף VM instances במסוף Google Cloud .
נכנסים לדף VM instances.מוודאים שליד השם של המכונה
dev-instanceמופיע סימן וי ירוק, שמציין שהיא פועלת. תהליך ההפעלה עשוי להימשך עד 30 שניות.
gcloud
עצירת המכונה
קוראים לפונקציה כדי לעצור את המופע.
gcloud functions call stopInstancePubSub \ --data '{"data":"eyJ6b25lIjoidXMtd2VzdDEtYiIsICJsYWJlbCI6ImVudj1kZXYifQo="}'זו המחרוזת בקידוד Base64 של
{"zone":"us-west1-b", "label":"env=dev"}אם רוצים לקודד מחרוזת משלכם, אפשר להשתמש בכל כלי. דוגמה לשימוש בכלי שורת הפקודה
base64:echo '{"zone":"us-west1-b", "label":"env=dev"}' | base64eyJ6b25lIjoidXMtd2VzdDEtYiIsICJsYWJlbCI6ImVudj1kZXYifQo=
בסיום הפונקציה אמור להופיע:
result: Successfully stopped instance dev-instance
התהליך עשוי להימשך עד 60 שניות.
אם במקום זאת מופיעה השגיאה:
error: 'Error: function failed to load.`
פשוט מחכים כ-10 שניות עד שהפונקציה תסיים את הפריסה ומנסים שוב.
אם במקום זאת מופיעה השגיאה:
error: `Error: function execution attempt timed out.`
עוברים לשלב הבא כדי לבדוק אם למופע פשוט לוקח הרבה זמן להיסגר.
אם לא מתקבלת תוצאה, סביר להניח שהפונקציה פשוט הגיעה לזמן הקצוב לתפוגה. עוברים לשלב הבא כדי לבדוק אם למופע פשוט לוקח הרבה זמן להיסגר.
בודקים שהסטטוס של המופע הוא
TERMINATED. תהליך הכיבוי עשוי להימשך עד 30 שניות.gcloud compute instances describe dev-instance \ --zone us-west1-b \ | grep statusstatus: TERMINATED
הפעלת המופע
קוראים לפונקציה כדי להפעיל את המופע.
gcloud functions call startInstancePubSub \ --data '{"data":"eyJ6b25lIjoidXMtd2VzdDEtYiIsICJsYWJlbCI6ImVudj1kZXYifQo="}'- שוב, זו המחרוזת בקידוד base64 של
{"zone":"us-west1-b", "label":"env=dev"}
בסיום הפונקציה אמור להופיע:
result: Successfully started instance dev-instance
- שוב, זו המחרוזת בקידוד base64 של
בודקים שהסטטוס של המופע הוא
RUNNING. תהליך ההפעלה עשוי להימשך עד 30 שניות.gcloud compute instances describe dev-instance \ --zone us-west1-b \ | grep statusstatus: RUNNING
הגדרת משימות Cloud Scheduler לקריאה ל-Pub/Sub
יצירת המשרות
המסוף
יוצרים את משימת ההתחלה.
- נכנסים לדף Cloud Scheduler במסוף Google Cloud .
כניסה לדף Cloud Scheduler. - לוחצים על Create job (יצירת משימה).
- בשדה אזור, בוחרים באפשרות
us-east1. - מגדירים את Name לערך
startup-dev-instances. - בקטע תדירות, מזינים
0 9 * * 1-5.- הפעולה הזו תתבצע כל יום שני עד שישי בשעה 9:00.
- בשדה אזור זמן, בוחרים מדינה ואזור זמן. בדוגמה הזו נשתמש ב-
United Statesוב-Los Angeles. - לוחצים על Continue.
- בשדה Target type (סוג היעד), בוחרים באפשרות
Pub/Sub. - בוחרים באפשרות
start-instance-eventבתפריט הנפתח של הנושא. - בשדה הודעה, מזינים את הפרטים הבאים:
{"zone":"us-west1-b","label":"env=dev"} - לוחצים על יצירה.
יוצרים את עבודת העצירה.
- צריך להיות בדף Cloud Scheduler במסוף Google Cloud .
- לוחצים על Create job (יצירת משימה).
- בשדה אזור, בוחרים באפשרות
us-east1. - מגדירים את Name לערך
shutdown-dev-instances. - בקטע תדירות, מזינים
0 17 * * 1-5.- הפעולה הזו תתבצע כל יום שני עד שישי בשעה 17:00.
- בשדה אזור זמן, בוחרים מדינה ואזור זמן. בדוגמה הזו נשתמש ב-
United Statesוב-Los Angeles. - לוחצים על Continue.
- בשדה Target type (סוג היעד), בוחרים באפשרות
Pub/Sub. - בוחרים באפשרות
stop-instance-eventבתפריט הנפתח של הנושא. - בשדה הודעה, מזינים את הפרטים הבאים:
{"zone":"us-west1-b","label":"env=dev"} - לוחצים על יצירה.
gcloud
יוצרים את משימת ההתחלה.
gcloud scheduler jobs create pubsub startup-dev-instances \
--schedule '0 9 * * 1-5' \
--topic start-instance-event \
--message-body '{"zone":"us-west1-b", "label":"env=dev"}' \
--time-zone 'America/Los_Angeles' \
--location us-east1
יוצרים את עבודת העצירה.
gcloud scheduler jobs create pubsub shutdown-dev-instances \
--schedule '0 17 * * 1-5' \
--topic stop-instance-event \
--message-body '{"zone":"us-west1-b", "label":"env=dev"}' \
--time-zone 'America/Los_Angeles' \
--location us-east1
(אופציונלי) אימות של פעולת המשימות
המסוף
עצירת המכונה
- נכנסים לדף Cloud Scheduler במסוף Google Cloud .
כניסה לדף Cloud Scheduler. - בצד שמאל של הדף, בשורה של המשימה
shutdown-dev-instances, לוחצים על הלחצן Run now (הפעלה עכשיו). - נכנסים לדף VM instances במסוף Google Cloud .
נכנסים לדף VM instances. - מוודאים שליד השם של המכונה
dev-instanceמופיע ריבוע אפור, שמציין שהיא הופסקה. יכול להיות שיחלפו עד 30 שניות עד שהמחשב יכבה.
הפעלת המופע
- נכנסים לדף Cloud Scheduler במסוף Google Cloud .
כניסה לדף Cloud Scheduler. - לצד העבודה שנקראת
startup-dev-instances, לוחצים על הלחצן Run now (הפעלה עכשיו) בצד שמאל של הדף. - נכנסים לדף VM instances במסוף Google Cloud .
נכנסים לדף VM instances. - מוודאים שליד השם של המכונה
dev-instanceמופיע סימן וי ירוק, שמציין שהיא פועלת. יכול להיות שיחלפו עד 30 שניות עד שהמכשיר יסיים את ההפעלה.
gcloud
עצירת המכונה
מריצים את משימת מתזמן המשימות כדי לעצור את המופע.
gcloud scheduler jobs run shutdown-dev-instances --location="us-east1"
בודקים שהסטטוס של המופע הוא
TERMINATED. יכול להיות שיחלפו עד 30 שניות עד שהמחשב יכבה.gcloud compute instances describe dev-instance \ --zone us-west1-b \ | grep statusstatus: TERMINATED
הפעלת המופע
מריצים את עבודת המתזמן כדי להפעיל את המופע.
gcloud scheduler jobs run startup-dev-instances --location="us-east1"
בודקים שהסטטוס של המופע הוא
RUNNING. תהליך ההפעלה עשוי להימשך עד 30 שניות.gcloud compute instances describe dev-instance \ --zone us-west1-b \ | grep statusstatus: RUNNING
הסרת המשאבים
אחרי שמסיימים את המדריך, אפשר למחוק את המשאבים שנוצרו, כדי שהם יפסיקו להשתמש במכסה ולצבור חיובים. בסעיפים הבאים מוסבר איך למחוק או להשבית את המשאבים האלו.
מחיקת המשימות ב-Cloud Scheduler
נכנסים לדף Cloud Scheduler במסוף Google Cloud .
לוחצים על תיבות הסימון לצד המשרות.
לוחצים על הלחצן מחיקה בחלק העליון של הדף ומאשרים את המחיקה.
מחיקת הנושאים ב-Pub/Sub
נכנסים לדף Pub/Sub במסוף Google Cloud .
לוחצים על תיבות הסימון לצד הנושאים.
לוחצים על מחיקה בחלק העליון של הדף ומאשרים את המחיקה.
מחיקת הפונקציות שנפרסו באמצעות פונקציות Cloud Run
נכנסים לדף Cloud Run functions במסוף Google Cloud .
לוחצים על תיבות הסימון לצד הפונקציות.
לוחצים על הלחצן מחיקה בחלק העליון של הדף ומאשרים את המחיקה.
מחיקת מכונה של Compute Engine
כדי למחוק מכונה של Compute Engine:
- נכנסים לדף VM instances במסוף Google Cloud .
- מסמנים את התיבה שלצד המופע שרוצים למחוק.
- כדי למחוק את המכונה, לוחצים על More actions ואז על Delete ופועלים לפי ההוראות.
מחיקת הפרויקט
הדרך הקלה ביותר לבטל את החיוב היא למחוק את הפרויקט שיצרתם בשביל המדריך הזה.
כדי למחוק את הפרויקט:
- במסוף Google Cloud , נכנסים לדף Manage resources.
- ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete.
- כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.
המאמרים הבאים
- כדאי להעמיק את הקריאה ולהכיר דוגמאות לארכיטקטורות, תרשימים ושיטות מומלצות בנושאי Google Cloud. כל אלה זמינים במרכז הארכיטקטורה של Cloud.