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

סקריפט לטעינה בזמן ההפעלה הוא קובץ שמבצע משימות במהלך תהליך ההפעלה של מכונה וירטואלית (VM). סקריפטים להפעלה יכולים לחול על כל המכונות הווירטואליות בפרויקט או על מכונה וירטואלית אחת. סקריפטים לטעינה בזמן ההפעלה שצוינו במטא-נתונים ברמת ה-VM מבטלים סקריפטים לטעינה בזמן ההפעלה שצוינו במטא-נתונים ברמת הפרויקט, וסקריפטים לטעינה בזמן ההפעלה מופעלים רק כשיש רשת זמינה. במאמר הזה מוסבר איך להשתמש בסקריפטים להפעלה במכונות וירטואליות של Linux. מידע על הוספת סקריפט לטעינה בזמן ההפעלה ברמת הפרויקט זמין במאמר gcloud compute project-info add-metadata.

בסקריפטים להפעלה של Linux, אפשר להשתמש בקובץ bash או בקובץ שאינו bash. כדי להשתמש בקובץ שאינו bash, צריך לציין את המפענח על ידי הוספת #! לחלק העליון של הקובץ. לדוגמה, כדי להשתמש בסקריפט לטעינה בזמן ההפעלה של Python 3, מוסיפים #! /usr/bin/python3 לחלק העליון של הקובץ.

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

  1. העתקת הסקריפט לטעינה בזמן ההפעלה אל ה-VM

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

  3. הסקריפט לטעינה בזמן ההפעלה מופעל כמשתמש root כשהמכונה הווירטואלית מופעלת

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

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

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

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

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

מפתחות מטא-נתונים לסקריפטים להפעלה ב-Linux

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

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

מפתח מטא-נתונים השתמש עבור
startup-script העברת סקריפט לטעינה בזמן ההפעלה של Bash או סקריפט אחר שמאוחסן באופן מקומי או שנוסף ישירות, וגודלו עד 256KB
startup-script-url העברת סקריפט bash או סקריפט אחר לטעינה בזמן ההפעלה שמאוחסן ב-Cloud Storage וגודלו גדול מ-256KB. המחרוזת שאתם מזינים כאן משמשת כמו שהיא להרצת gcloud storage. אם המחרוזת startup-script-url מכילה רווחים, אל תחליפו את הרווחים ב-%20 ואל תוסיפו מירכאות כפולות ("") למחרוזת startup-script-url.

סדר הביצוע של סקריפטים להפעלה ב-Linux

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

מפתח מטא-נתונים סדר הביצוע
startup-script בפעם הראשונה בכל אתחול אחרי האתחול הראשוני
startup-script-url שנייה במהלך כל אתחול אחרי האתחול הראשוני

העברה ישירה של סקריפט לטעינה בזמן ההפעלה של Linux

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

המסוף

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

  1. נכנסים לדף Create an instance במסוף Cloud de Confiance .

    כניסה לדף Create an instance

  2. כדי להשתמש במערכת הפעלה Linux:

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

    2. לוחצים על Change.

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

  3. כדי להוסיף ישירות סקריפט לטעינה בזמן ההפעלה של Linux:

    1. בתפריט הניווט, לוחצים על מתקדם.

    2. בקטע Automation, מזינים את הערך הבא בשדה סקריפט לטעינה בזמן ההפעלה:

      #! /bin/bash
      apt update
      apt -y install apache2
      cat <<EOF > /var/www/html/index.html
      <html><body><p>Linux startup script added directly.</p></body></html>
      EOF
      
  4. אופציונלי: מציינים אפשרויות הגדרה אחרות. מידע נוסף מופיע במאמר אפשרויות הגדרה במהלך יצירת מכונה.

  5. כדי ליצור את המכונה ולהפעיל אותה, לוחצים על Create.

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

  1. נכנסים לדף VM instances במסוף Cloud de Confiance .

    כניסה לדף VM instances

  2. לוחצים על שם המופע.

  3. לוחצים על Edit.

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

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

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

gcloud

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

כדי להעביר את התוכן של סקריפט לטעינה בזמן ההפעלה ישירות למכונה וירטואלית כשיוצרים אותה, משתמשים בפקודה gcloud compute instances create הבאה.

gcloud compute instances create VM_NAME \
  --image-project=debian-cloud \
  --image-family=debian-10 \
  --metadata=startup-script='#! /bin/bash
  apt update
  apt -y install apache2
  cat <<EOF > /var/www/html/index.html
  <html><body><p>Linux startup script added directly.</p></body></html>
  EOF'

מחליפים את VM_NAME בשם המכונה הווירטואלית.

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

כדי להוסיף את הסקריפט לטעינה בזמן ההפעלה ישירות למכונה וירטואלית קיימת, משתמשים בפקודה gcloud compute instances add-metadata הבאה:

gcloud compute instances add-metadata VM_NAME \
    --zone=ZONE \
    --metadata=startup-script='#! /bin/bash
    apt update
    apt -y install apache2
    cat <<EOF > /var/www/html/index.html
    <html><body><p>Linux startup script added directly.</p></body></html>
    EOF'

מחליפים את מה שכתוב בשדות הבאים:

  • VM_NAME: השם של ה-VM

  • ZONE: האזור של המכונה הווירטואלית

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

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

REST

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

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

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances

{
  ...
  "networkInterfaces": [
    {
      "accessConfigs": [
        {
          "type": "ONE_TO_ONE_NAT"
        }
      ]
    }
  ],
  "metadata": {
    "items": [
      {
        "key": "startup-script",
        "value": "#! /bin/bash\napt update\napt -y install apache2\ncat <<EOF > /var/www/html/index.html\n<html><body><p>Linux startup script added directly.</p></body></html>\nEOF"
      }
    ]
  },
  ...
}

מחליפים את מה שכתוב בשדות הבאים:

  • PROJECT_ID: מזהה הפרויקט שבו נמצאת מכונת ה-VM.

  • ZONE: האזור שבו רוצים ליצור את המכונה הווירטואלית.

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

  1. כדי לקבל את הערך metadata.fingerprint של מכונת ה-VM, משתמשים בשיטה instances.get:

    GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME
    

    מחליפים את מה שכתוב בשדות הבאים:

    • PROJECT_ID: מזהה הפרויקט שבו נמצאת מכונת ה-VM.

    • ZONE: האזור של המכונה הווירטואלית.

    • VM_NAME: שם ה-VM.

  2. מעבירים את הסקריפט לטעינה בזמן ההפעלה באמצעות הערך fingerprint, יחד עם מפתח המטא-נתונים והערך של הסקריפט לטעינה בזמן ההפעלה, בקריאה לשיטה instances.setMetadata:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/setMetadata
    
    {
      "fingerprint": FINGERPRINT,
      "items": [
        {
          "key": "startup-script",
          "value": "#! /bin/bash\napt update\napt -y install apache2\ncat <<EOF > /var/www/html/index.html\n<html><body><p>Linux startup script added directly.</p></body></html>\nEOF"
        }
      ],
      ...
    }
    

    מחליפים את מה שכתוב בשדות הבאים:

    • PROJECT_ID: מזהה הפרויקט שבו נמצאת מכונת ה-VM.

    • ZONE: האזור של המכונה הווירטואלית.

    • VM_NAME: שם ה-VM.

    • FINGERPRINT: הערך metadata.fingerprint שהתקבל באמצעות ה-method instances.get.

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

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

העברת סקריפט לטעינה בזמן ההפעלה של Linux מקובץ מקומי

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

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

  1. יוצרים קובץ מקומי לאחסון הסקריפט לטעינה בזמן ההפעלה.

  2. שימו לב לנתיב היחסי מ-CLI של gcloud לסקריפט ההפעלה.

  3. מוסיפים לקובץ את הסקריפט הבא לטעינה בזמן ההפעלה:

    #! /bin/bash
    apt update
    apt -y install apache2
    cat <<EOF > /var/www/html/index.html
    <html><body><p>Linux startup script from a local file.</p></body></html>
    EOF
    

gcloud

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

כדי ליצור מכונה וירטואלית ולהעביר את התוכן של קובץ מקומי לשימוש כסקריפט לטעינה בזמן ההפעלה, משתמשים בפקודה gcloud compute instances create עם הדגל --metadata-from-file.

gcloud compute instances create VM_NAME \
  --image-project=debian-cloud \
  --image-family=debian-10 \
  --metadata-from-file=startup-script=FILE_PATH

מחליפים את מה שכתוב בשדות הבאים:

  • VM_NAME: השם של ה-VM

  • FILE_PATH: הנתיב היחסי לקובץ של סקריפט ההפעלה

העברת סקריפט לטעינה בזמן ההפעלה של Linux מקובץ מקומי למכונה וירטואלית קיימת

כדי להעביר סקריפט לטעינה בזמן ההפעלה ל-VM קיים מקובץ מקומי, משתמשים בgcloud compute instances add-metadata הפקודה הבאה:

gcloud compute instances add-metadata VM_NAME \
  --zone=ZONE \
  --metadata-from-file startup-script=FILE_PATH

מחליפים את מה שכתוב בשדות הבאים:

  • VM_NAME: השם של ה-VM

  • ZONE: האזור של המכונה הווירטואלית

  • FILE_PATH: הנתיב היחסי לקובץ של סקריפט ההפעלה

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

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

העברת סקריפט לטעינה בזמן ההפעלה של Linux מ-Cloud Storage

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

לפני שמוסיפים סקריפט לטעינה בזמן ההפעלה מקטגוריה של Cloud Storage, צריך לבצע את הפעולות הבאות:

  1. יוצרים קובץ לאחסון הסקריפט לטעינה בזמן ההפעלה. בדוגמה הזו נעשה שימוש בקובץ bash ‏ (.sh).

  2. מוסיפים את הטקסט הבא לקובץ bash, שמתקין את Apache ויוצר דף אינטרנט פשוט:

    #! /bin/bash
    apt update
    apt -y install apache2
    cat <<EOF > /var/www/html/index.html
    <html><body><p>Linux startup script from Cloud Storage.</p></body></html>
    EOF
    
  3. יצירת קטגוריה של Cloud Storage

  4. הוספת הקובץ לקטגוריה של Cloud Storage.

השלכות על האבטחה

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

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

מגבלות

המסוף

העברת סקריפט לטעינה בזמן ההפעלה שמאוחסן ב-Cloud Storage למכונה וירטואלית חדשה

  1. נכנסים לדף Create an instance במסוף Cloud de Confiance .

    כניסה לדף Create an instance

  2. כדי להשתמש במערכת הפעלה Linux:

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

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

  3. כדי לאפשר למופע לגשת לקטגוריה של Cloud Storage שמכילה את סקריפט לטעינה בזמן ההפעלה של Linux:

    1. בתפריט הניווט, לוחצים על אבטחה.

    2. ברשימה Service account בוחרים חשבון שירות שיש לו את התפקיד Storage Object Viewer (roles/storage.objectViewer) ב-IAM בקטגוריה של Cloud Storage.

  4. כדי להוסיף סקריפט לטעינה בזמן ההפעלה של Linux על ידי ציון קובץ ב-Cloud Storage:

    1. בתפריט הניווט, לוחצים על מתקדם.

    2. בקטע Metadata (מטא נתונים), לוחצים על Add item (הוספת פריט). יופיעו השדות מפתח וערך.

    3. בשדה מפתח, מזינים startup-script-url.

    4. בשדה Value מזינים את המיקום של קובץ הסקריפט לטעינה בזמן ההפעלה ב-Cloud Storage באחד מהפורמטים הבאים:

      • כתובת URL מאומתת: https://storage.googleapis.com/BUCKET/FILE
      • URI של gcloud storage: gs://BUCKET/FILE

        מחליפים את מה שכתוב בשדות הבאים:

      • BUCKET: השם של דלי ה-Cloud Storage שמכיל את קובץ סקריפט לטעינה בזמן ההפעלה

      • FILE: השם של קובץ הסקריפט לטעינה בזמן ההפעלה

  5. אופציונלי: מציינים אפשרויות הגדרה אחרות. מידע נוסף מופיע במאמר אפשרויות הגדרה במהלך יצירת מכונה.

  6. כדי ליצור את המכונה ולהפעיל אותה, לוחצים על Create.

העברת סקריפט לטעינה בזמן ההפעלה שמאוחסן ב-Cloud Storage למכונה וירטואלית קיימת

  1. נכנסים לדף VM instances במסוף Cloud de Confiance .

    כניסה לדף VM instances

  2. לוחצים על שם המופע.

  3. לוחצים על Edit.

  4. בקטע מטא-נתונים, מוסיפים את הערכים הבאים:

    • מקרא: startup-script-url

    • ערך: המיקום ב-Cloud Storage של קובץ סקריפט לטעינה בזמן ההפעלה, באחד מהפורמטים הבאים:

      • כתובת URL מאומתת: https://storage.googleapis.com/BUCKET/FILE
      • URI של gcloud storage: gs://BUCKET/FILE

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

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

gcloud

העברת סקריפט לטעינה בזמן ההפעלה שמאוחסן ב-Cloud Storage למכונה וירטואלית חדשה

מעבירים סקריפט לטעינה בזמן ההפעלה שמאוחסן ב-Cloud Storage למכונה וירטואלית כשיוצרים אותה באמצעות gcloud compute instances createהפקודה הבאה. כדי שהמכונה הווירטואלית תוכל לגשת ל-Cloud Storage, צריך להשתמש בערך storage-ro עבור האפשרות --scope.

gcloud compute instances create VM_NAME \
  --image-project=debian-cloud \
  --image-family=debian-10 \
  --scopes=storage-ro \
  --metadata=startup-script-url=CLOUD_STORAGE_URL

מחליפים את מה שכתוב בשדות הבאים:

  • VM_NAME: שם ה-VM.

  • CLOUD_STORAGE_URL: ערך המטא-נתונים. מגדירים את המיקום של קובץ הסקריפט לטעינה בזמן ההפעלה ב-Cloud Storage באמצעות אחד מהפורמטים הבאים:

    • כתובת URL מאומתת: https://storage.googleapis.com/BUCKET/FILE
    • URI של gcloud storage: gs://BUCKET/FILE

העברת סקריפט לטעינה בזמן ההפעלה שמאוחסן ב-Cloud Storage למכונה וירטואלית קיימת

כדי להעביר סקריפט לטעינה בזמן ההפעלה שמאוחסן ב-Cloud Storage למכונה וירטואלית קיימת, משתמשים בפקודה gcloud compute instances add-metadata הבאה:

gcloud compute instances add-metadata VM_NAME \
    --zone=ZONE \
    --metadata startup-script-url=CLOUD_STORAGE_URL

מחליפים את מה שכתוב בשדות הבאים:

  • VM_NAME: שם ה-VM.

  • ZONE: האזור של המכונה הווירטואלית.

  • CLOUD_STORAGE_URL: ערך המטא-נתונים. מגדירים את המיקום של קובץ הסקריפט לטעינה בזמן ההפעלה ב-Cloud Storage באמצעות אחד מהפורמטים הבאים:

    • כתובת URL מאומתת: https://storage.googleapis.com/BUCKET/FILE
    • URI של gcloud storage: gs://BUCKET/FILE

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

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

REST

העברת סקריפט לטעינה בזמן ההפעלה שמאוחסן ב-Cloud Storage למכונה וירטואלית חדשה

מעבירים סקריפט לטעינה בזמן ההפעלה שמאוחסן ב-Cloud Storage למכונה וירטואלית כשיוצרים אותה באמצעות השיטה instances.insert הבאה. בשדה scopes מוסיפים https://www.googleapis.com/auth/devstorage.read_only כדי שהמכונה הווירטואלית תוכל לגשת ל-Cloud Storage.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances

{
  ...
  "networkInterfaces": [
    {
      "accessConfigs": [
        {
          "type": "ONE_TO_ONE_NAT"
        }
      ]
    }
  ],
  "serviceAccounts": [
    {
      "email": "default",
      "scopes": [
        "https://www.googleapis.com/auth/devstorage.read_only"
      ]
    }
  ],
  "metadata": {
    "items": [
      {
        "key": "startup-script-url",
        "value": "CLOUD_STORAGE_URL"
      }
    ]
  },
  ...
}

מחליפים את מה שכתוב בשדות הבאים:

  • PROJECT_ID: מזהה הפרויקט.

  • ZONE: האזור שבו רוצים ליצור את המכונה הווירטואלית.

  • CLOUD_STORAGE_URL: ערך המטא-נתונים. מגדירים את המיקום של קובץ הסקריפט לטעינה בזמן ההפעלה ב-Cloud Storage באמצעות אחד מהפורמטים הבאים:

    • כתובת URL מאומתת: https://storage.googleapis.com/BUCKET/FILE
    • URI של gcloud storage: gs://BUCKET/FILE

העברת סקריפט לטעינה בזמן ההפעלה שמאוחסן ב-Cloud Storage למכונה וירטואלית קיימת

  1. כדי לקבל את הערך metadata.fingerprint של מכונת ה-VM, משתמשים בשיטה instances.get:

    GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME
    

    מחליפים את מה שכתוב בשדות הבאים:

    • PROJECT_ID: מזהה הפרויקט

    • ZONE: האזור של המכונה הווירטואלית

    • VM_NAME: השם של ה-VM

  2. מעבירים את הסקריפט לטעינה בזמן ההפעלה באמצעות הערך fingerprint, יחד עם מפתח המטא-נתונים והערך של הסקריפט לטעינה בזמן ההפעלה, בקריאה לשיטה instances.setMetadata:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/setMetadata
    
    {
      "fingerprint": FINGERPRINT,
      "items": [
        {
            "key": "startup-script-url",
            "value": "CLOUD_STORAGE_URL"
        }
      ],
      ...
    }
    

    מחליפים את מה שכתוב בשדות הבאים:

    • PROJECT_ID: מזהה הפרויקט.

    • ZONE: האזור של המכונה הווירטואלית.

    • VM_NAME: שם ה-VM.

    • FINGERPRINT: הערך metadata.fingerprint שהתקבל באמצעות ה-method instances.get.

    • CLOUD_STORAGE_URL: ערך המטא-נתונים. מגדירים את המיקום של קובץ הסקריפט לטעינה בזמן ההפעלה ב-Cloud Storage באמצעות אחד מהפורמטים הבאים:

      • כתובת URL מאומתת: https://storage.googleapis.com/BUCKET/FILE
      • URI של gcloud storage: gs://BUCKET/FILE

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

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

גישה למטא-נתונים מסקריפט לטעינה בזמן ההפעלה ב-Linux

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

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

  1. יוצרים סקריפט לטעינה בזמן ההפעלה שמבצע שאילתה לגבי הערך של מפתח מטא-נתונים. לדוגמה, סקריפט לטעינה בזמן ההפעלה הבא של קובץ bash‏ (.sh) שולח שאילתה לגבי הערך של מפתח המטא-נתונים foo.

    #! /bin/bash
    METADATA_VALUE=$(curl http://metadata.google.internal/computeMetadata/v1/instance/attributes/foo -H "Metadata-Flavor: Google")
    apt update
    apt -y install apache2
    cat <<EOF > /var/www/html/index.html
    <html><body><p>Accessing metadata value of foo: $METADATA_VALUE</p></body></html>
    EOF
    
  2. כדי להגדיר את הערך של מפתח המטא-נתונים foo כשיוצרים מכונה וירטואלית, משתמשים בפקודה הבאה gcloud compute instances create. בדוגמה הזו, סקריפט לטעינה בזמן ההפעלה מועבר למכונה הווירטואלית מקובץ מקומי.

    gcloud

    gcloud compute instances create VM_NAME \
      --image-project=debian-cloud \
      --image-family=debian-10 \
      --metadata-from-file=startup-script=FILE_PATH \
      --metadata=foo=bar
    

    מחליפים את מה שכתוב בשדות הבאים:

    • VM_NAME: השם של ה-VM

    • FILE_PATH: הנתיב היחסי לקובץ של סקריפט ההפעלה

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

  3. בתחנת העבודה המקומית, מציגים את כתובת ה-IP החיצונית בדפדפן אינטרנט כדי לוודא שסקריפט לטעינה בזמן ההפעלה מוציא את הערך של foo. יכול להיות שתצטרכו לחכות בערך דקה עד שסקריפט לטעינה בזמן ההפעלה לדוגמה יסיים את הפעולה.

הפעלה מחדש של סקריפט לטעינה בזמן ההפעלה של Linux

כדי להפעיל מחדש סקריפט לטעינה בזמן ההפעלה:

  1. התחברות ל-VM.

  2. הרצת הפקודה הבאה:

    sudo google_metadata_script_runner startup

צפייה בפלט של סקריפט לטעינה בזמן ההפעלה של Linux

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

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