תזמון הפעלה או השבתה של מופע Cloud SQL

אתם יכולים להשתמש ב-Cloud Scheduler כדי להפעיל ולהשבית מכונות של Cloud SQL לפי לוח זמנים קבוע. לדוגמה, יכול להיות שתרצו שהמופעים יפעלו רק בשעות מסוימות.

במדריך הזה נדגים איך להפעיל ולהשבית באופן אוטומטי מכונה של Cloud SQL ל-SQL Server באמצעות יצירת ארכיטקטורה מבוססת-אירועים באמצעות מוצרי Google Cloud .

מטרות

במדריך הזה תיצרו משימות של Cloud Scheduler שתזמנו מכונות Cloud SQL עם תווית משאב env=dev להפעלה בשעות ספציפיות. תקבעו מועד רק למופע אחד. עם זאת, אפשר להשתמש בארכיטקטורה שמתוארת במדריך הזה כדי להפסיק ולהפעיל כמה מופעים שבהם תווית המשאב היא env=dev.

כדי להשיג את המטרה הזו, מבצעים את השלבים הבאים:

  1. יוצרים מכונה של Cloud SQL ל-SQL Server ומקצים לה תווית משאב ספציפית (env=dev).
  2. יוצרים שני נושאים ב-Pub/Sub שישמשו כמקורות אירועים לטריגרים של Eventarc וכמתווכי הודעות.
  3. יצירה ופריסה של שתי פונקציות Cloud Run מבוססות-אירועים שמופעלות באמצעות נושאי Pub/Sub. כשהפונקציות מופעלות, הן מחפשות מופעים של Cloud SQL בפרויקט שתואמים לתווית שצוינה במטען הייעודי (payload) של הודעת Pub/Sub ‏(env=dev).
  4. יוצרים ומפעילים שני טריגרים של Eventarc. אירועים בנושא Pub/Sub מנותבים לפונקציות שלכם כבקשות HTTP, והתוכן של הודעת האירוע מועבר כנתוני קלט לפונקציות.
  5. יוצרים שתי משימות cron ב-Cloud Scheduler כדי לפרסם הודעה שמכילה את תווית היעד בנושאי Pub/Sub במועדים ספציפיים. קובעים שהמכונות יופעלו בשעה 9:00 ויושבתו בשעה 17:00, בימים שני עד שישי.

התרשים הבא מציג סקירה כללית של הארכיטקטורה מבוססת-האירועים:

הפעלה והשבתה של מכונות Cloud SQL לפי לוח זמנים
הפעלה והפסקה של מכונות Cloud SQL לפי לוח זמנים (לחצו על התרשים כדי להגדיל).

עלויות

במסמך הזה משתמשים ברכיבים הבאים של Google Cloud, והשימוש בהם כרוך בתשלום:

כדי להעריך את ההוצאות בהתאם לתחזית השימוש שלכם, אתם יכולים להיעזר במחשבון העלויות.

משתמשים חדשים של Google Cloud ? יכול להיות שאתם זכאים לתקופת ניסיון בחינם.

כשמסיימים את המשימות שמתוארות במסמך הזה אפשר למחוק את המשאבים שיצרתם כדי להימנע מחיובים נוספים. מידע נוסף זמין בקטע הסרת המשאבים.

לפני שמתחילים

יכול להיות שהגבלות אבטחה שהוגדרו בארגון שלכם ימנעו מכם להשלים את השלבים הבאים. מידע לפתרון בעיות זמין במאמר פיתוח אפליקציות בסביבה Google Cloud מוגבלת.

  1. נכנסים לחשבון Google Cloud . אם אתם משתמשים חדשים ב- Google Cloud, צרו חשבון כדי שתוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
  2. התקינו את ה-CLI של Google Cloud.

  3. אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.

  4. כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:

    gcloud init
  5. יוצרים או בוחרים 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 .

  6. אם משתמשים בפרויקט קיים, מוודאים שיש את ההרשאות הנדרשות כדי להשלים את ההדרכה. אם משתמשים בפרויקט חדש, לא צריך לוודא כי כבר יש את ההרשאות הנדרשות.

  7. מוודאים שהחיוב מופעל בפרויקט Google Cloud .

  8. מפעילים את ממשקי 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
  9. מגדירים את האימות:

    1. מוודאים שיש לכם את תפקיד ה-IAM ‏Create Service Accounts ‏(roles/iam.serviceAccountCreator) ואת תפקיד ה-IAM ‏Project Admin ‏(roles/resourcemanager.projectIamAdmin). איך מקצים תפקידים
    2. יוצרים את חשבון השירות:

      gcloud iam service-accounts create SERVICE_ACCOUNT_NAME

      מחליפים את הערך SERVICE_ACCOUNT_NAME בשם שרוצים לתת לחשבון השירות.

    3. נותנים לחשבון השירות תפקידים. מריצים את הפקודה הבאה לכל אחד מהתפקידים הבאים ב-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: התפקיד שאתם רוצים לתת
  10. התקינו את ה-CLI של Google Cloud.

  11. אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.

  12. כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:

    gcloud init
  13. יוצרים או בוחרים 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 .

  14. אם משתמשים בפרויקט קיים, מוודאים שיש את ההרשאות הנדרשות כדי להשלים את ההדרכה. אם משתמשים בפרויקט חדש, לא צריך לוודא כי כבר יש את ההרשאות הנדרשות.

  15. מוודאים שהחיוב מופעל בפרויקט Google Cloud .

  16. מפעילים את ממשקי 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
  17. מגדירים את האימות:

    1. מוודאים שיש לכם את תפקיד ה-IAM ‏Create Service Accounts ‏(roles/iam.serviceAccountCreator) ואת תפקיד ה-IAM ‏Project Admin ‏(roles/resourcemanager.projectIamAdmin). איך מקצים תפקידים
    2. יוצרים את חשבון השירות:

      gcloud iam service-accounts create SERVICE_ACCOUNT_NAME

      מחליפים את הערך SERVICE_ACCOUNT_NAME בשם שרוצים לתת לחשבון השירות.

    3. נותנים לחשבון השירות תפקידים. מריצים את הפקודה הבאה לכל אחד מהתפקידים הבאים ב-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: התפקיד שאתם רוצים לתת

יצירת מכונה של 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 מפעיל את הפונקציה. מציינים את נקודת הכניסה הזו כשפורסים את הפונקציה.

  1. מורידים את הקוד.

    git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git

    אפשרות נוספת היא להוריד את הדוגמה כקובץ ZIP ולחלץ אותה.

  2. עוברים לספרייה הנכונה.

    cd nodejs-docs-samples/functions/scheduleinstance/

פריסת הפונקציות מבוססות-האירועים

כדי לפרוס את הפונקציות ב-Cloud Run, משתמשים בפקודה gcloud run deploy.

  1. פורסים את הפונקציה שמפעילה את מופע 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
  2. אם מוצגת בקשה ליצור מאגר באזור שצוין, מקלידים y.

  3. בהנחיה Allow unauthenticated invocations, מקלידים n.

  4. פורסים את הפונקציה שמשביתה את המופע של 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
  5. אם מוצגת בקשה ליצור מאגר באזור שצוין, מקלידים y.

  6. בהנחיה Allow unauthenticated invocations, מקלידים n.

כשהפריסה מסתיימת, Google Cloud CLI מציג כתובת URL שבה השירות פועל.

יצירת טריגרים של Eventarc

כדי ליצור טריגרים של Eventarc שמנתבים אירועים מ-Pub/Sub, משתמשים בפקודה gcloud eventarc triggers create. כל הודעה שמתפרסמת בנושא Pub/Sub מפעילה את הפונקציה המתאימה, והתוכן של ההודעה מועבר כנתוני קלט.

  1. יוצרים טריגר שמפעיל את המכונה של 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
  2. יוצרים טריגר שמפסיק את המכונה של 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 תתעדכן.

  1. כדי לעצור מכונות עם התווית env=dev, משתמשים בפקודה gcloud pubsub topics publish כדי לפרסם הודעה בנושא העצירה:

    gcloud pubsub topics publish stop-instance-event --message='{"label":"env=dev"}'
  2. כדי לוודא שהמופע הופסק, בודקים את מדיניות ההפעלה שלו באמצעות הפקודה gcloud sql instances describe:

    gcloud sql instances describe dev-instance --format="value(settings.activationPolicy)"

    הפלט צריך להיות NEVER.

  3. כדי להפעיל מכונות עם התווית env=dev, מפרסמים הודעה בנושא start:

    gcloud pubsub topics publish start-instance-event --message='{"label":"env=dev"}'
  4. כדי לוודא שהמופע הופעל, בודקים את מדיניות ההפעלה שלו:

    gcloud sql instances describe dev-instance --format="value(settings.activationPolicy)"

    הפלט צריך להיות ALWAYS.

יצירת המשימות ב-Cloud Scheduler

יוצרים משימות ב-Cloud Scheduler שמפרסמות הודעות בנושאי Pub/Sub לפי לוח זמנים קבוע.

  1. כדי ליצור עבודה שפועלת בשעה 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
  2. צריך ליצור עבודה שתפעל בשעה 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 תתעדכן.

  1. כדי להריץ את העבודה ולעצור את המכונה של Cloud SQL, משתמשים בפקודה gcloud scheduler jobs run:

    gcloud scheduler jobs run shutdown-dev-instances --location="us-east1"
  2. מוודאים שמדיניות ההפעלה של dev-instance היא NEVER:

    gcloud sql instances describe dev-instance --format="value(settings.activationPolicy)"
  3. מריצים את העבודה כדי להפעיל את המופע:

    gcloud scheduler jobs run startup-dev-instances --location="us-east1"
  4. מוודאים שמדיניות ההפעלה של dev-instance היא ALWAYS:

    gcloud sql instances describe dev-instance --format="value(settings.activationPolicy)"

הסרת המשאבים

כדי להימנע מחיובים על המשאבים שבהם השתמשתם במדריך הזה, צריך למחוק אותם.

  1. מחיקת המשימות ב-Cloud Scheduler:
    gcloud scheduler jobs delete startup-dev-instances --location=us-east1 --quiet
    gcloud scheduler jobs delete shutdown-dev-instances --location=us-east1 --quiet
  2. מחיקת הטריגרים של Eventarc:
    gcloud eventarc triggers delete start-instance-trigger --location=us-west1 --quiet
    gcloud eventarc triggers delete stop-instance-trigger --location=us-west1 --quiet
  3. מוחקים את שירותי Cloud Run:
    gcloud run services delete startinstance --region=us-west1 --quiet
    gcloud run services delete stopinstance --region=us-west1 --quiet
  4. מחיקת הנושאים ב-Pub/Sub:
    gcloud pubsub topics delete start-instance-event
    gcloud pubsub topics delete stop-instance-event
  5. מחיקת המכונה של Cloud SQL:
    gcloud sql instances delete dev-instance --quiet
  6. אפשר גם למחוק את הפרויקט Google Cloud כדי להימנע מחיובים. אם מוחקים את הפרויקט ב- Google Cloud , החיוב על כל המשאבים שנעשה בהם שימוש באותו פרויקט יופסק.

    כדי למחוק Google Cloud פרויקט:

    gcloud projects delete PROJECT_ID

המאמרים הבאים

  • כדאי להעמיק את הקריאה ולהכיר דוגמאות לארכיטקטורות, תרשימים ושיטות מומלצות בנושאי Google Cloud. כל אלה זמינים במרכז הארכיטקטורה של Cloud.