אתם יכולים להשתמש ב-Cloud Scheduler כדי להפעיל ולהשבית מכונות של Cloud SQL לפי לוח זמנים קבוע. לדוגמה, יכול להיות שתרצו שהמופעים יפעלו רק בשעות מסוימות.
במדריך הזה נדגים איך להפעיל ולהשבית באופן אוטומטי מכונה של Cloud SQL ל-SQL Server באמצעות יצירת ארכיטקטורה מבוססת-אירועים באמצעות מוצרי Google Cloud .
מטרות
במדריך הזה תיצרו משימות של Cloud Scheduler שתזמנו מכונות Cloud SQL עם תווית משאב env=dev להפעלה בשעות ספציפיות. תקבעו מועד רק למופע אחד. עם זאת, אפשר להשתמש בארכיטקטורה שמתוארת במדריך הזה כדי להפסיק ולהפעיל כמה מופעים שבהם תווית המשאב היא env=dev.
כדי להשיג את המטרה הזו, מבצעים את השלבים הבאים:
- יוצרים מכונה של Cloud SQL ל-SQL Server ומקצים לה תווית משאב ספציפית (
env=dev). - יוצרים שני נושאים ב-Pub/Sub שישמשו כמקורות אירועים לטריגרים של Eventarc וכמתווכי הודעות.
- יצירה ופריסה של שתי פונקציות Cloud Run מבוססות-אירועים שמופעלות באמצעות נושאי Pub/Sub. כשהפונקציות מופעלות, הן מחפשות מופעים של Cloud SQL בפרויקט שתואמים לתווית שצוינה במטען הייעודי (payload) של הודעת Pub/Sub (
env=dev). - יוצרים ומפעילים שני טריגרים של Eventarc. אירועים בנושא Pub/Sub מנותבים לפונקציות שלכם כבקשות HTTP, והתוכן של הודעת האירוע מועבר כנתוני קלט לפונקציות.
- יוצרים שתי משימות cron ב-Cloud Scheduler כדי לפרסם הודעה שמכילה את תווית היעד בנושאי Pub/Sub במועדים ספציפיים. קובעים שהמכונות יופעלו בשעה 9:00 ויושבתו בשעה 17:00, בימים שני עד שישי.
התרשים הבא מציג סקירה כללית של הארכיטקטורה מבוססת-האירועים:
עלויות
במסמך הזה משתמשים ברכיבים הבאים של Google Cloud, והשימוש בהם כרוך בתשלום:
-
Cloud Run functions
Cloud Run functions operate as Cloud Run services and are billed accordingly.
- Cloud Scheduler
- Cloud SQL for SQL Server
-
Eventarc
Cloud Run uses Eventarc for event delivery. Pricing for Eventarc is not included in the Cloud Run pricing.
- Pub/Sub
כדי להעריך את ההוצאות בהתאם לתחזית השימוש שלכם, אתם יכולים להיעזר במחשבון העלויות.
כשמסיימים את המשימות שמתוארות במסמך הזה אפשר למחוק את המשאבים שיצרתם כדי להימנע מחיובים נוספים. מידע נוסף זמין בקטע הסרת המשאבים.
לפני שמתחילים
יכול להיות שהגבלות אבטחה שהוגדרו בארגון שלכם ימנעו מכם להשלים את השלבים הבאים. מידע לפתרון בעיות זמין במאמר פיתוח אפליקציות בסביבה Google Cloud מוגבלת.
- נכנסים לחשבון Google Cloud . אם אתם משתמשים חדשים ב- Google Cloud, צרו חשבון כדי שתוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
-
התקינו את ה-CLI של Google Cloud.
-
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:
gcloud init -
יוצרים או בוחרים Google Cloud פרויקט.
תפקידים שנדרשים כדי לבחור או ליצור פרויקט
- Select a project: כדי לבחור פרויקט לא צריך תפקיד IAM ספציפי – אפשר לבחור כל פרויקט שקיבלתם בו תפקיד.
-
יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד Project Creator (יצירת פרויקטים) (
roles/resourcemanager.projectCreator), שכולל את ההרשאהresourcemanager.projects.create. איך מקצים תפקידים
-
יוצרים Google Cloud פרויקט:
gcloud projects create PROJECT_ID
מחליפים את
PROJECT_IDבשם של פרויקט Google Cloud שיוצרים. -
בוחרים את הפרויקט שיצרתם: Google Cloud
gcloud config set project PROJECT_ID
מחליפים את
PROJECT_IDבשם הפרויקט ב- Google Cloud .
-
אם משתמשים בפרויקט קיים, מוודאים שיש את ההרשאות הנדרשות כדי להשלים את ההדרכה. אם משתמשים בפרויקט חדש, לא צריך לוודא כי כבר יש את ההרשאות הנדרשות.
מפעילים את ממשקי Cloud Build, Cloud Functions, Cloud Pub/Sub, Cloud Run Admin, Cloud Scheduler, Cloud SQL Admin ו-Eventarc API:
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, נדרשת ההרשאה
serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד 'בעלים' (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד 'אדמין בממשק Service Usage' (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידיםgcloud services enable cloudbuild.googleapis.com
cloudfunctions.googleapis.com pubsub.googleapis.com run.googleapis.com cloudscheduler.googleapis.com sqladmin.googleapis.com eventarc.googleapis.com -
מגדירים את האימות:
-
מוודאים שיש לכם את תפקיד ה-IAM Create Service Accounts (
roles/iam.serviceAccountCreator) ואת תפקיד ה-IAM Project Admin (roles/resourcemanager.projectIamAdmin). איך מקצים תפקידים -
יוצרים את חשבון השירות:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
מחליפים את הערך
SERVICE_ACCOUNT_NAMEבשם שרוצים לתת לחשבון השירות. -
נותנים לחשבון השירות תפקידים. מריצים את הפקודה הבאה לכל אחד מהתפקידים הבאים ב-IAM:
roles/cloudbuild.builds.builder, roles/cloudsql.editor, roles/run.invoker:gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=ROLE
מחליפים את מה שכתוב בשדות הבאים:
SERVICE_ACCOUNT_NAME: השם של חשבון השירותPROJECT_ID: מזהה הפרויקט שבו יצרתם את חשבון השירותROLE: התפקיד שאתם רוצים לתת
-
מוודאים שיש לכם את תפקיד ה-IAM Create Service Accounts (
-
התקינו את ה-CLI של Google Cloud.
-
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:
gcloud init -
יוצרים או בוחרים Google Cloud פרויקט.
תפקידים שנדרשים כדי לבחור או ליצור פרויקט
- Select a project: כדי לבחור פרויקט לא צריך תפקיד IAM ספציפי – אפשר לבחור כל פרויקט שקיבלתם בו תפקיד.
-
יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד Project Creator (יצירת פרויקטים) (
roles/resourcemanager.projectCreator), שכולל את ההרשאהresourcemanager.projects.create. איך מקצים תפקידים
-
יוצרים Google Cloud פרויקט:
gcloud projects create PROJECT_ID
מחליפים את
PROJECT_IDבשם של פרויקט Google Cloud שיוצרים. -
בוחרים את הפרויקט שיצרתם: Google Cloud
gcloud config set project PROJECT_ID
מחליפים את
PROJECT_IDבשם הפרויקט ב- Google Cloud .
-
אם משתמשים בפרויקט קיים, מוודאים שיש את ההרשאות הנדרשות כדי להשלים את ההדרכה. אם משתמשים בפרויקט חדש, לא צריך לוודא כי כבר יש את ההרשאות הנדרשות.
מפעילים את ממשקי Cloud Build, Cloud Functions, Cloud Pub/Sub, Cloud Run Admin, Cloud Scheduler, Cloud SQL Admin ו-Eventarc API:
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, נדרשת ההרשאה
serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד 'בעלים' (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד 'אדמין בממשק Service Usage' (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידיםgcloud services enable cloudbuild.googleapis.com
cloudfunctions.googleapis.com pubsub.googleapis.com run.googleapis.com cloudscheduler.googleapis.com sqladmin.googleapis.com eventarc.googleapis.com -
מגדירים את האימות:
-
מוודאים שיש לכם את תפקיד ה-IAM Create Service Accounts (
roles/iam.serviceAccountCreator) ואת תפקיד ה-IAM Project Admin (roles/resourcemanager.projectIamAdmin). איך מקצים תפקידים -
יוצרים את חשבון השירות:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
מחליפים את הערך
SERVICE_ACCOUNT_NAMEבשם שרוצים לתת לחשבון השירות. -
נותנים לחשבון השירות תפקידים. מריצים את הפקודה הבאה לכל אחד מהתפקידים הבאים ב-IAM:
roles/cloudbuild.builds.builder, roles/cloudsql.editor, roles/run.invoker:gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=ROLE
מחליפים את מה שכתוב בשדות הבאים:
SERVICE_ACCOUNT_NAME: השם של חשבון השירותPROJECT_ID: מזהה הפרויקט שבו יצרתם את חשבון השירותROLE: התפקיד שאתם רוצים לתת
-
מוודאים שיש לכם את תפקיד ה-IAM Create Service Accounts (
יצירת מכונה של Cloud SQL
כדי ליצור מכונה של Cloud SQL ל-SQL Server עם תווית המשאב env=dev, משתמשים בפקודה gcloud beta sql instances create:
gcloud beta sql instances create dev-instance \ --database-version=SQLSERVER_2019_EXPRESS \ --region=us-west1 \ --tier=db-custom-2-3840 \ --root-password=YourStrongPassword123! \ --labels=env=dev
יכול להיות שיחלפו כמה דקות עד שהמופע ייווצר. מידע נוסף מופיע במאמר יצירת מופעים.
יצירת נושאים ב-Pub/Sub
כדי ליצור את שני הנושאים ב-Pub/Sub שמשמשים כמקורות אירועים לטריגרים של Eventarc, משתמשים בפקודה gcloud pubsub topics create:
gcloud pubsub topics create start-instance-event gcloud pubsub topics create stop-instance-event
מידע נוסף מופיע במאמר יצירת נושא.
יצירה ופריסה של פונקציות Cloud Run
יצירה ופריסה של שתי פונקציות Cloud Run (Node.js) שמופעלות על ידי Eventarc דרך נושאי Pub/Sub. כשמופעלות הפונקציות, הן מחפשות מופעים של Cloud SQL בפרויקט שתואמים לתווית שצוינה במטען הייעודי (payload) של הודעת Pub/Sub (env=dev):
- פונקציית ההתחלה מעדכנת את
activationPolicyשל המופע ל-ALWAYS, וכך מפעילה את המופע. - פונקציית העצירה מעדכנת את
activationPolicyל-NEVER, מה שגורם לכיבוי של המופע.
מידע נוסף זמין במאמרים כתיבה של פונקציות Cloud Run וטריגרים של פונקציות Cloud Run.
יצירת הפונקציות
יצירה של פונקציות Cloud Run מבוססות-אירועים שמבטלות באופן אוטומטי את ה-unmarshal של אירועים שתואמים למפרט CloudEvents. המפרט הזה, שהוא תקן בתעשייה, מתאר נתוני אירועים בצורה משותפת.
בקוד המקור צריך להגדיר נקודת כניסה לפונקציה, כלומר הקוד שמופעל כש-Cloud Run מפעיל את הפונקציה. מציינים את נקודת הכניסה הזו כשפורסים את הפונקציה.
מורידים את הקוד.
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
אפשרות נוספת היא להוריד את הדוגמה כקובץ ZIP ולחלץ אותה.
עוברים לספרייה הנכונה.
cd nodejs-docs-samples/functions/scheduleinstance/
פריסת הפונקציות מבוססות-האירועים
כדי לפרוס את הפונקציות ב-Cloud Run, משתמשים בפקודה gcloud run deploy.
פורסים את הפונקציה שמפעילה את מופע Cloud SQL:
gcloud run deploy startinstance \ --source . \ --function startInstanceEvent \ --base-image nodejs24 \ --region=us-west1 \ --build-service-account=projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \ --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
אם מוצגת בקשה ליצור מאגר באזור שצוין, מקלידים
y.בהנחיה
Allow unauthenticated invocations, מקלידיםn.פורסים את הפונקציה שמשביתה את המופע של Cloud SQL:
gcloud run deploy stopinstance \ --source . \ --function stopInstanceEvent \ --base-image nodejs24 \ --region=us-west1 \ --build-service-account=projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \ --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
אם מוצגת בקשה ליצור מאגר באזור שצוין, מקלידים
y.בהנחיה
Allow unauthenticated invocations, מקלידיםn.
כשהפריסה מסתיימת, Google Cloud CLI מציג כתובת URL שבה השירות פועל.
יצירת טריגרים של Eventarc
כדי ליצור טריגרים של Eventarc שמנתבים אירועים מ-Pub/Sub, משתמשים בפקודה gcloud eventarc triggers create. כל הודעה שמתפרסמת בנושא Pub/Sub מפעילה את הפונקציה המתאימה, והתוכן של ההודעה מועבר כנתוני קלט.
יוצרים טריגר שמפעיל את המכונה של Cloud SQL:
gcloud eventarc triggers create start-instance-trigger \ --location=us-west1 \ --destination-run-service=startinstance \ --destination-run-region=us-west1 \ --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \ --transport-topic=start-instance-event \ --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
יוצרים טריגר שמפסיק את המכונה של Cloud SQL:
gcloud eventarc triggers create stop-instance-trigger \ --location=us-west1 \ --destination-run-service=stopinstance \ --destination-run-region=us-west1 \ --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \ --transport-topic=stop-instance-event \ --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
יכול להיות שיחלפו עד 2 דקות עד שהטריגר החדש יהפוך לפעיל.
אופציונלי: מוודאים שהפונקציות פועלות
כדי לוודא שהפונקציות פועלות, אפשר לפרסם הודעות ישירות בנושאי Pub/Sub. יכול להיות שיחלפו כמה דקות עד שהמכונה של Cloud SQL תתעדכן.
כדי לעצור מכונות עם התווית
env=dev, משתמשים בפקודהgcloud pubsub topics publishכדי לפרסם הודעה בנושא העצירה:gcloud pubsub topics publish stop-instance-event --message='{"label":"env=dev"}'
כדי לוודא שהמופע הופסק, בודקים את מדיניות ההפעלה שלו באמצעות הפקודה
gcloud sql instances describe:gcloud sql instances describe dev-instance --format="value(settings.activationPolicy)"
הפלט צריך להיות
NEVER.כדי להפעיל מכונות עם התווית
env=dev, מפרסמים הודעה בנושא start:gcloud pubsub topics publish start-instance-event --message='{"label":"env=dev"}'
כדי לוודא שהמופע הופעל, בודקים את מדיניות ההפעלה שלו:
gcloud sql instances describe dev-instance --format="value(settings.activationPolicy)"
הפלט צריך להיות
ALWAYS.
יצירת המשימות ב-Cloud Scheduler
יוצרים משימות ב-Cloud Scheduler שמפרסמות הודעות בנושאי Pub/Sub לפי לוח זמנים קבוע.
כדי ליצור עבודה שפועלת בשעה 9:00, בימים שני עד שישי, ומתחילה את המכונות, משתמשים בפקודה
gcloud scheduler jobs create:gcloud scheduler jobs create pubsub startup-dev-instances \ --schedule '0 9 * * 1-5' \ --topic start-instance-event \ --message-body '{"label":"env=dev"}' \ --time-zone 'America/Los_Angeles' \ --location us-east1
צריך ליצור עבודה שתפעל בשעה 17:00, בימים שני עד שישי, ותפסיק את המופעים:
gcloud scheduler jobs create pubsub shutdown-dev-instances \ --schedule '0 17 * * 1-5' \ --topic stop-instance-event \ --message-body '{"label":"env=dev"}' \ --time-zone 'America/Los_Angeles' \ --location us-east1
בגלל הגדרות ראשוניות מסוימות, יכול להיות שיחלפו כמה דקות עד שהעבודה הראשונה שנוצרה בפרויקט תפעל.
אופציונלי: מוודאים שהעבודות פועלות
אתם יכולים להריץ את המשימות של Cloud Scheduler באופן ידני כדי לוודא שהן מפעילות בהצלחה את פונקציות ההתחלה וההפסקה. יכול להיות שיעברו כמה דקות עד שהמכונה ב-Cloud SQL תתעדכן.
כדי להריץ את העבודה ולעצור את המכונה של Cloud SQL, משתמשים בפקודה
gcloud scheduler jobs run:gcloud scheduler jobs run shutdown-dev-instances --location="us-east1"
מוודאים שמדיניות ההפעלה של
dev-instanceהיאNEVER:gcloud sql instances describe dev-instance --format="value(settings.activationPolicy)"
מריצים את העבודה כדי להפעיל את המופע:
gcloud scheduler jobs run startup-dev-instances --location="us-east1"
מוודאים שמדיניות ההפעלה של
dev-instanceהיאALWAYS:gcloud sql instances describe dev-instance --format="value(settings.activationPolicy)"
הסרת המשאבים
כדי להימנע מחיובים על המשאבים שבהם השתמשתם במדריך הזה, צריך למחוק אותם.
- מחיקת המשימות ב-Cloud Scheduler:
gcloud scheduler jobs delete startup-dev-instances --location=us-east1 --quiet gcloud scheduler jobs delete shutdown-dev-instances --location=us-east1 --quiet
- מחיקת הטריגרים של Eventarc:
gcloud eventarc triggers delete start-instance-trigger --location=us-west1 --quiet gcloud eventarc triggers delete stop-instance-trigger --location=us-west1 --quiet
- מוחקים את שירותי Cloud Run:
gcloud run services delete startinstance --region=us-west1 --quiet gcloud run services delete stopinstance --region=us-west1 --quiet
- מחיקת הנושאים ב-Pub/Sub:
gcloud pubsub topics delete start-instance-event gcloud pubsub topics delete stop-instance-event
- מחיקת המכונה של Cloud SQL:
gcloud sql instances delete dev-instance --quiet
- אפשר גם למחוק את הפרויקט Google Cloud כדי להימנע מחיובים. אם מוחקים את הפרויקט ב- Google Cloud , החיוב על כל המשאבים שנעשה בהם שימוש באותו פרויקט יופסק.
כדי למחוק Google Cloud פרויקט:
gcloud projects delete PROJECT_ID
המאמרים הבאים
- כדאי להעמיק את הקריאה ולהכיר דוגמאות לארכיטקטורות, תרשימים ושיטות מומלצות בנושאי Google Cloud. כל אלה זמינים במרכז הארכיטקטורה של Cloud.