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

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

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

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

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

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

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

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

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

מפתח מטא-נתונים שימוש ב
startup-script העברת סקריפט לטעינה בזמן ההפעלה ב-Bash או שלא ב-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 במסוף Google Cloud .

    כניסה לדף 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 במסוף Google Cloud .

    כניסה לדף 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: האזור של ה-VM

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

אחרי שהמכונה הווירטואלית מופעלת, פותחים את כתובת ה-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.

    • ‫VM_NAME: שם המכונה הווירטואלית.

  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.

    • ‫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: האזור של ה-VM

  • ‫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 במסוף Google Cloud .

    כניסה לדף Create an instance

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

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

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

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

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

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

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

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

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

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

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

      • Authenticated URL: https://storage.googleapis.com/BUCKET/FILE
      • gcloud storage URI: gs://BUCKET/FILE

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

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

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

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

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

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

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

    כניסה לדף VM instances

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

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

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

    • מקרא: startup-script-url

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

      • Authenticated URL: https://storage.googleapis.com/BUCKET/FILE
      • gcloud storage URI: gs://BUCKET/FILE

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

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

gcloud

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

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

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 באחד מהפורמטים הבאים:

    • Authenticated URL: https://storage.googleapis.com/BUCKET/FILE
    • gcloud storage URI: 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 באחד מהפורמטים הבאים:

    • Authenticated URL: https://storage.googleapis.com/BUCKET/FILE
    • gcloud storage URI: 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 באחד מהפורמטים הבאים:

    • Authenticated URL: https://storage.googleapis.com/BUCKET/FILE
    • gcloud storage URI: gs://BUCKET/FILE

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

  1. משיגים את הערך metadata.fingerprint של המכונה הווירטואלית באמצעות ה-method‏ 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 באמצעות אחד מהפורמטים הבאים:

      • Authenticated URL: https://storage.googleapis.com/BUCKET/FILE
      • gcloud storage URI: 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, אפשר לבצע אחת מהפעולות הבאות:

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