הרצת סקריפטים של כיבוי

אתם יכולים ליצור ולהריץ סקריפטים של כיבוי שמבצעים פקודות רגע לפני שמופסק או מופעל מחדש מופע של מכונה וירטואלית (VM). האפשרות הזו שימושית אם אתם מסתמכים על סקריפטים אוטומטיים כדי להפעיל ולכבות מכונות וירטואליות, ומאפשרת למכונות הווירטואליות לנקות את עצמן או לבצע משימות, כמו ייצוא יומנים או סנכרון עם מערכות אחרות.

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

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

גם במשימות של כיבוי וגם במשימות של הפעלה מחדש, המכונות הווירטואליות תמיד מריצות סקריפטים של כיבוי באופן הבא:

  • במכונות וירטואליות של Linux, באמצעות המשתמש root.
  • במכונות וירטואליות של Windows, באמצעות חשבון System.

דרישות מוקדמות

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

  • סביבת האורח כוללת את סוכן האורח (לדוגמה, google-guest-agent ב-Linux) שקורא את תוכן הסקריפט או כתובת ה-URL ממטא-נתונים של המכונה ומתחיל את הביצוע.
  • כל התמונות הציבוריות של Compute Engine מגיעות עם סביבת האורח שכבר מותקנת בהן.
  • אם יוצרים אימג' מותאם אישית, צריך להתקין ידנית את סביבת האורח של Google כדי לוודא שהסקריפטים ממטא-נתונים וממאפיינים אחרים של Cloud de Confiance by S3NS פועלים בצורה תקינה.

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

ההרשאות שנדרשות למשימה הזו

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

  • כל ההרשאות שנדרשות כדי ליצור מכונה
  • compute.instances.setMetadata במופע

מפרטים

בקטעים הבאים מפורטים המפרטים של סקריפטים להשבתה.

מגבלות

יש כמה מגבלות שחשוב לזכור כשמשתמשים בסקריפטים להשבתה:

  • ‫Compute Engine מפעיל סקריפטים של כיבוי רק על בסיס 'כמיטב יכולתנו'. במקרים נדירים, מערכת Compute Engine לא יכולה להבטיח שהסקריפט של כיבוי המכונה יושלם.
  • ב-Windows, מדיניות הקבוצה המקומית משמשת להפעלת סקריפט הכיבוי.
    • חבילת ההתקנה מגדירה את ההגדרה של מדיניות הקבוצה המקומית Computer Configuration/Windows Setting/Scripts (Startup/Shutdown) להפעלת הסקריפט עם כיבוי המערכת.

הפעלת סקריפט כיבוי

סקריפטים של כיבוי מופעלים כשהמופע נסגר אחרי שאחד מהאירועים הבאים קורה:

  • אתם מבצעים את הפעולות הבאות:

  • מכונה של Compute Engine מופסקת כחלק מפעולת הפסקה או מחיקה מתוכנתת.

  • מערכת Compute Engine מפסיקה את הפעילות של מכונה וירטואלית (VM) מסוג Spot או של מכונה זמנית כחלק מתהליך ההפקעה.

סקריפט ההשבתה יכול להיות מכל סוג קובץ. אם יש סקריפט כיבוי במכונה, מערכת Compute Engine מבצעת את הפעולות הבאות:

  1. הפקודה מעתיקה את הסקריפט לקובץ מקומי במופע.
  2. מגדיר הרשאות בקובץ כדי שהסקריפט יהיה ניתן להרצה.
  3. הקובץ מופעל כשהמופע מושבת.

לדוגמה, אפשר לספק סקריפט Python במקום סקריפט bash. חשוב לזכור: Compute Engine מריץ את הסקריפט בדיוק כמו שהוא, בלי קשר לסוג הסקריפט.

כדי להריץ סקריפט שהוא לא bash, מוסיפים שורת shebang בחלק העליון של הקובץ כדי שהמערכת תדע באיזה מפענח להשתמש. לדוגמה, בסקריפט Python, אפשר להוסיף שורת shebang כמו:

#!/usr/bin/python

זמן הפעלת סקריפט הכיבוי

סקריפטים להשבתה מתחילים לפעול כש-Compute Engine מגדיר את מצב המופע ל-STOPPING. הסקריפטים צריכים להסתיים לפני שהמופע מפסיק לפעול באופן מלא, כלומר לפני שהסטטוס שלו משתנה לTERMINATED. הזמן שנדרש למופע כדי להגיע למצב TERMINATED משתנה בהתאם לסוג המופע.

אם הסקריפטים נמשכים יותר זמן מהזמן שנדרש להפסקת המכונה,‏ Compute Engine מפסיק את הסקריפטים בכוח, מה שעלול לגרום לאובדן נתונים או למשימות לא שלמות. כדי למנוע את זה, צריך להפסיק את המופע מתוך מערכת ההפעלה של האורח. בגישה הזו, מצב המופע נשאר STOPPING עד שסקריפטים להשבתה מסיימים לפעול.

שימוש בסקריפט מקומי לכיבוי

סקריפט מקומי לכיבוי הוא סקריפט שקיים במחשב המקומי. מעבירים סקריפט מקומי לכיבוי כמחרוזת או כקובץ ל-Compute Engine.

סקריפטים להשבתה יכולים לבצע כמה פעולות שצריך, אבל אם מעבירים את הקובץ באופן מקומי, הסקריפט לא יכול לחרוג ממגבלת האורך של ערך המטא-נתונים, שהיא 256KB. כדי להשתמש בסקריפט שאורכו חורג מהמגבלה, צריך לאחסן את הקובץ ב-Cloud Storage. מידע נוסף זמין במאמר בנושא שימוש בסקריפט כיבוי מ-Cloud Storage.

הוספת קובץ סקריפט לכיבוי

אפשר להעביר קובץ סקריפט מקומי לכיבוי רק באמצעות כלי שורת הפקודה gcloud.

gcloud

כדי להעביר קובץ סקריפט מקומי לכיבוי, מציינים את הדגל --metadata-from-file ואחריו זוג מפתח ומטא-נתונים, shutdown-script=PATH/TO/FILE, כאשר PATH/TO/FILE הוא נתיב יחסי לסקריפט הכיבוי. לדוגמה:

gcloud compute instances create example-instance \
    --metadata-from-file shutdown-script=examples/scripts/install.sh

Terraform

כדי לציין סקריפט כיבוי ישירות, משתמשים במשאב google_compute_instance עם הנתיב לסקריפט הכיבוי במטא-נתונים.

resource "google_compute_instance" "shutdown_content_from_file" {
  name         = "instance-name-shutdown-content-from-file"
  machine_type = "f1-micro"
  zone         = "us-central1-c"
  metadata = {
    # Shuts down Apache server
    shutdown-script = file("${path.module}/shutdown-script.sh")
  }
  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-11"
    }
  }
  network_interface {
    # A default network is created for all Google Cloud projects
    network = "default"
    access_config {
    }
  }
}

כדי ללמוד איך להחיל הגדרות ב-Terraform או להסיר אותן, ראו פקודות בסיסיות ב-Terraform.

אספקת תוכן סקריפט כיבוי ישירות

אפשר גם להעביר ישירות את התוכן של סקריפט הכיבוי.

המסוף

במסוף, מציינים סקריפט כיבוי ישירות באמצעות מפתח המטא-נתונים shutdown-script: Cloud de Confiance

  1. נכנסים לדף Create an instance.

    כניסה לדף Create an instance

  2. מציינים את פרטי המכונה הווירטואלית.

  3. מרחיבים את הקטע אפשרויות מתקדמות.

  4. מרחיבים את האפשרות ניהול ומבצעים את הפעולות הבאות:

    1. בקטע מטא נתונים, לוחצים על הוספת פריט.
    2. בשדה מפתח, מזינים shutdown-script כמפתח המטא-נתונים.
    3. בשדה ערך, מוסיפים את התוכן של סקריפט ההשבתה.
  5. ממשיכים בתהליך יצירת מכונת ה-VM.

gcloud

באמצעות Google Cloud CLI, משתמשים בדגל --metadata כדי לספק את התוכן של סקריפט ההשבתה, ואז משתמשים בצמד המפתחות shutdown-script=CONTENTS, כאשר CONTENTS הוא התוכן של סקריפט ההשבתה.

gcloud compute instances create example-instance --metadata shutdown-script="#! /bin/bash
> # Shuts down Apache server
> /etc/init.d/apache2 stop"

Terraform

כדי לציין סקריפט כיבוי באופן ישיר, משתמשים במשאב google_compute_instance עם סקריפט הכיבוי במטא-נתונים.

resource "google_compute_instance" "default" {
  name         = "instance-name-shutdown-content-directly"
  machine_type = "f1-micro"
  zone         = "us-central1-c"
  metadata = {
    # Shuts down Apache server
    shutdown-script = "#! /bin/bash /etc/init.d/apache2 stop"
  }
  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-11"
    }
  }
  network_interface {
    # A default network is created for all Google Cloud projects
    network = "default"
    access_config {
    }
  }
}

כדי ללמוד איך להחיל הגדרות ב-Terraform או להסיר אותן, ראו פקודות בסיסיות ב-Terraform.

REST

ב-API, כשיוצרים מופע, צריך לספק סקריפט כיבוי כחלק ממאפיין המטא-נתונים בבקשה. משתמשים ב-shutdown-script כמפתח המטא-נתונים:

POST https://compute.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a/instances

{...
  "metadata": {
    "items": [
      {
       "key": "shutdown-script",
       "value": "#! /bin/bash\n\n# Shuts down Apache server\n/etc/init.d/apache2 stop"
      }
    ]
  }...
}

הוספת סקריפט כיבוי במופעי Windows

מריצים סקריפטים של כיבוי במופעי Windows באמצעות מפתחות המטא-נתונים הבאים שספציפיים ל-Windows. בוחרים אחד מהמקשים המיוחדים שמופיעים בהמשך. כל מפתח צריך להתאים לסוג הסקריפט שרוצים להריץ.

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

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

cmd סקריפטים להשבתה bat סקריפטים להשבתה ps1 סקריפטים להשבתה
windows-shutdown-script-cmd windows-shutdown-script-bat windows-shutdown-script-ps1

שימוש בסקריפט לכיבוי מ-Cloud Storage

אפשר לאחסן סקריפט לכיבוי ב-Cloud Storage ולהשתמש בו. פועלים לפי ההוראות במסמכי התיעוד בנושא סקריפטים לטעינה בזמן ההפעלה, אבל מחליפים את startup-script-url ב-shutdown-script-url.

במכונות Windows, מחליפים את windows-startup-script-url ב-windows-shutdown-script-url.

החלת סקריפט כיבוי על מופעים פעילים

כדי להוסיף סקריפט כיבוי למופע פעיל, פועלים לפי ההוראות במאמרי עזרה החלת סקריפט לטעינה בזמן ההפעלה על מופעים פעילים, אבל מחליפים את מפתחות המטא-נתונים באחד מהמפתחות הבאים:

  • shutdown-script: מזינים את התוכן של סקריפט ההשבתה ישירות באמצעות המפתח הזה. באמצעות Google Cloud CLI, אפשר לספק את הנתיב לקובץ סקריפט כיבוי באמצעות הדגל --metadata-from-file ומפתח המטא-נתונים shutdown-script.
  • shutdown-script-url: מציינים כתובת URL של Cloud Storage לקובץ של סקריפט ההשבתה באמצעות המפתח הזה.

הצגת הפלט של סקריפט כיבוי

Linux

כדי לראות את הפלט של סקריפט כיבוי של Linux, אפשר לבצע אחת מהפעולות הבאות:

Windows

אפשר להציג את הפלט מסקריפט של כיבוי Windows Server באמצעות אחת מהאפשרויות הבאות ולבדוק אם יש אירועי GCEMetadataScripts: