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

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

סקריפטים להפעלה ב-Windows צריכים להיות סקריפטים של Command shell ‏ (.cmd), PowerShell ‏ (.ps1) או קובץ אצווה (.bat), וצריכה להיות להם סיומת הקובץ המתאימה.

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

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

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

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

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

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

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

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

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

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

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

מפתח מטא-נתונים השתמש עבור
sysprep-specialize-script-ps1 העברה של סקריפט PowerShell לא חתום שמאוחסן באופן מקומי או שנוסף ישירות, בגודל של עד 256KB
sysprep-specialize-script-cmd העברת סקריפט מעטפת שמאוחסן באופן מקומי או שנוסף ישירות ובגודל של עד 256KB
sysprep-specialize-script-bat העברת סקריפט של קובץ אצווה שמאוחסן באופן מקומי או שנוסף ישירות, וגודלו עד 256KB
sysprep-specialize-script-url העברת קובץ אצווה, מעטפת פקודות, סקריפט חתום או לא חתום של PowerShell או קובץ הפעלה שמאוחסן ב-Cloud Storage וגודלו גדול מ-256KB
windows-startup-script-ps1 העברה של סקריפט PowerShell לא חתום שמאוחסן באופן מקומי או שנוסף ישירות, בגודל של עד 256KB
windows-startup-script-cmd העברת סקריפט מעטפת שמאוחסן באופן מקומי או שנוסף ישירות ובגודל של עד 256KB
windows-startup-script-bat העברת סקריפט של קובץ אצווה שמאוחסן באופן מקומי או שנוסף ישירות, וגודלו עד 256KB
windows-startup-script-url העברת קובץ אצווה, מעטפת פקודות, סקריפט חתום או לא חתום של PowerShell או קובץ הפעלה שמאוחסן ב-Cloud Storage וגודלו גדול מ-256KB

מידע נוסף על סדר ההפעלה של סוגים שונים של סקריפטים להפעלה מופיע במאגר GoogleCloudPlatform/compute-image-windows ב-GitHub.

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

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

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

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

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

המסוף

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

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

    כניסה לדף Create an instance

  2. בקטע Boot disk (דיסק אתחול), לוחצים על Change (שינוי) ופועלים לפי השלבים הבאים:

    1. בכרטיסייה תמונות ציבוריות, בוחרים מערכת הפעלה של Windows Server.
    2. לוחצים על בחירה.
  3. מרחיבים את הקטע אפשרויות מתקדמות ומבצעים את הפעולות הבאות:

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

      • מפתח: הערך הוא windows-startup-script-ps1.

        סקריפטים להפעלה מועברים אל המכונה הווירטואלית באמצעות מפתחות מטא-נתונים שמתחילים ב-windows-startup-script, ומופעלים בכל אתחול אחרי האתחול הראשוני של המכונה הווירטואלית.

      • ערך: מוסיפים את הסקריפט הבא:

        # Installing IIS
        Import-Module servermanager
        Install-WindowsFeature Web-Server -IncludeAllSubFeature
        
        # Ensure the directory exists
        if (-not (Test-Path("C:\inetpub\wwwroot"))) {New-Item "C:\inetpub\wwwroot" -Type Directory}
        
        # Write the expanded string out to the file, overwriting the file if it already exists.
        "<html><body><p>Windows startup script added directly.</p></body></html>" | Out-File -FilePath C:\inetpub\wwwroot\index.html -Encoding ascii -Force
        
  4. לוחצים על יצירה.

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

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

    כניסה לדף VM instances

  2. לוחצים על השם של המכונה הווירטואלית.

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

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

    • key: windows-startup-script-ps1
    • value: התוכן של הסקריפט לטעינה בזמן ההפעלה

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

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

‫gcloud (Bash)

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

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

gcloud compute instances create VM_NAME \
  --image-project=windows-cloud \
  --image-family=windows-2019-core \
  --metadata=windows-startup-script-ps1='Import-Module servermanager
  Install-WindowsFeature Web-Server -IncludeAllSubFeature
  "<html><body><p>Windows startup script added directly.</p></body></html>" > C:\inetpub\wwwroot\index.html'

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

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

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

gcloud compute instances add-metadata VM_NAME \
  --image-project=windows-cloud \
  --image-family=windows-2019-core \
  --metadata=windows-startup-script-ps1='Import-Module servermanager
  Install-WindowsFeature Web-Server -IncludeAllSubFeature
  "<html><body><p>Windows startup script added directly.</p></body></html>" > C:\inetpub\wwwroot\index.html'

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

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

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

‫gcloud (שורת הפקודה)

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

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

gcloud compute instances create VM_NAME ^
  --image-project=windows-cloud ^
  --image-family=windows-2019-core ^
  --metadata=windows-startup-script-ps1='Import-Module servermanager
  Install-WindowsFeature Web-Server -IncludeAllSubFeature
  "<html><body><p>Windows startup script added directly.</p></body></html>" > C:\inetpub\wwwroot\index.html'

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

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

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

gcloud compute instances add-metadata VM_NAME ^
  --image-project=windows-cloud ^
  --image-family=windows-2019-core ^
  --metadata=windows-startup-script-ps1='Import-Module servermanager
  Install-WindowsFeature Web-Server -IncludeAllSubFeature
  "<html><body><p>Windows startup script added directly.</p></body></html>" > C:\inetpub\wwwroot\index.html'

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

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

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

‫gcloud (PowerShell)

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

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

gcloud compute instances create VM_NAME `
  --image-project=windows-cloud `
  --image-family=windows-2019-core `
  --metadata=windows-startup-script-ps1='Import-Module servermanager
  Install-WindowsFeature Web-Server -IncludeAllSubFeature
  "<html><body><p>Windows startup script added directly.</p></body></html>" > C:\inetpub\wwwroot\index.html'

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

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

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

gcloud compute instances add-metadata VM_NAME `
  --image-project=windows-cloud `
  --image-family=windows-2019-core `
  --metadata=windows-startup-script-ps1='Import-Module servermanager
  Install-WindowsFeature Web-Server -IncludeAllSubFeature
  "<html><body><p>Windows startup script added directly.</p></body></html>" > C:\inetpub\wwwroot\index.html'

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

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

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

REST

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

מעבירים את התוכן של סקריפט לטעינה בזמן ההפעלה ישירות למכונה וירטואלית של Windows Server כשיוצרים אותה באמצעות השיטה 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": "windows-startup-script-ps1",
        "value": "Import-Module servermanager\nInstall-WindowsFeature Web-Server -IncludeAllSubFeature\necho '<html><body><p>Windows startup script added directly.</p></body></html>' > C:\\inetpub\\wwwroot\\index.html"
      }
    ]
  },
  ...
}

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

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

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

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

  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": "windows-startup-script-ps1",
         "value": "Import-Module servermanager\nInstall-WindowsFeature Web-Server -IncludeAllSubFeature\necho '<html><body><p>Windows startup script added directly.</p></body></html>' > C:\\inetpub\\wwwroot\\index.html"
       }
     ],
     ...
    }
    

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

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

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

    • VM_NAME: שם ה-VM.

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

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

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

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

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

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

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

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

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

    # Installing IIS
    Import-Module servermanager
    Install-WindowsFeature Web-Server -IncludeAllSubFeature
    
    # Ensure the directory exists
    if (-not (Test-Path("C:\inetpub\wwwroot"))) {New-Item "C:\inetpub\wwwroot" -Type Directory}
    
    # Write the expanded string out to the file, overwriting the file if it already exists.
    "<html><body><p>Windows startup script passed from a file on your local workstation.</p></body></html>" | Out-File -FilePath C:\inetpub\wwwroot\index.html -Encoding ascii -Force
    

‫gcloud (Bash)

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

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

gcloud compute instances create VM_NAME \
  --image-project=windows-cloud \
  --image-family=windows-2019-core \
  --metadata-from-file=windows-startup-script-ps1=FILE_PATH

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

  • VM_NAME: השם של ה-VM
  • FILE_PATH: הנתיב היחסי לקובץ של סקריפט ההפעלה
העברת סקריפט לטעינה בזמן ההפעלה של Windows מקובץ מקומי למכונה וירטואלית קיימת

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

gcloud compute instances add-metadata VM_NAME \
  --metadata-from-file=windows-startup-script-ps1=FILE_PATH

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

  • VM_NAME: השם של ה-VM
  • FILE_PATH: הנתיב היחסי לקובץ של סקריפט ההפעלה
אימות סקריפט לטעינה בזמן ההפעלה

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

‫gcloud (שורת הפקודה)

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

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

gcloud compute instances create VM_NAME ^
  --image-project=windows-cloud ^
  --image-family=windows-2019-core ^
  --metadata-from-file=windows-startup-script-ps1=FILE_PATH

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

  • VM_NAME: השם של ה-VM
  • FILE_PATH: הנתיב היחסי לקובץ של סקריפט ההפעלה
העברת סקריפט לטעינה בזמן ההפעלה של Windows מקובץ מקומי למכונה וירטואלית קיימת

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

gcloud compute instances add-metadata VM_NAME ^
  --metadata-from-file=windows-startup-script-ps1=FILE_PATH

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

  • VM_NAME: השם של ה-VM
  • FILE_PATH: הנתיב היחסי לקובץ של סקריפט ההפעלה
אימות סקריפט לטעינה בזמן ההפעלה

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

‫gcloud (PowerShell)

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

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

gcloud compute instances create VM_NAME `
  --image-project=windows-cloud `
  --image-family=windows-2019-core `
  --metadata-from-file=windows-startup-script-ps1=FILE_PATH

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

  • VM_NAME: השם של ה-VM
  • FILE_PATH: הנתיב היחסי לקובץ של סקריפט ההפעלה
העברת סקריפט לטעינה בזמן ההפעלה של Windows מקובץ מקומי למכונה וירטואלית קיימת

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

gcloud compute instances add-metadata VM_NAME `
  --metadata-from-file=windows-startup-script-ps1=FILE_PATH

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

  • VM_NAME: השם של ה-VM
  • FILE_PATH: הנתיב היחסי לקובץ של סקריפט ההפעלה
אימות סקריפט לטעינה בזמן ההפעלה

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

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

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

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

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

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

    # Installing IIS
    Import-Module servermanager
    Install-WindowsFeature Web-Server -IncludeAllSubFeature
    
    # Ensure the directory exists
    if (-not (Test-Path("C:\inetpub\wwwroot"))) {New-Item "C:\inetpub\wwwroot" -Type Directory}
    
    # Write the expanded string out to the file, overwriting the file if it already exists.
    "<html><body><p>Windows startup script passed from Cloud Storage.</p></body></html>" | Out-File -FilePath C:\inetpub\wwwroot\index.html -Encoding ascii -Force
    
  3. יצירת קטגוריה של Cloud Storage

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

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

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

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

המסוף

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

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

    כניסה לדף Create an instance

  2. בקטע Boot disk (דיסק אתחול), בוחרים באפשרות Change (שינוי) ומבצעים את הפעולות הבאות:

    1. בכרטיסייה תמונות ציבוריות, בוחרים מערכת הפעלה של Windows Server.
    2. לוחצים על בחירה.
  3. בקטע Identity and API access (זהות וגישה ל-API), בוחרים חשבון שירות עם התפקיד Storage Object Viewer (צפייה באובייקטים ב-Storage).

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

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

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

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

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

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

        • BUCKET: השם של דלי ה-Cloud Storage שמכיל את קובץ סקריפט לטעינה בזמן ההפעלה
        • FILE: השם של קובץ הסקריפט לטעינה בזמן ההפעלה
  5. כדי ליצור את המכונה הווירטואלית (VM), לוחצים על האפשרות Create.

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

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

    כניסה לדף VM instances

  2. לוחצים על השם של המכונה הווירטואלית.

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

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

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

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

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

‫gcloud (Bash)

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

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

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

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

  • VM_NAME: שם ה-VM.
  • CLOUD_STORAGE_URL: ערכי המטא-נתונים. מגדירים את המיקום של קובץ סקריפט לטעינה בזמן ההפעלה באחד מהפורמטים הבאים:
    • כתובת 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 \
  --metadata=windows-startup-script-url=CLOUD_STORAGE_URL

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

  • VM_NAME: שם ה-VM.
  • CLOUD_STORAGE_URL: ערכי המטא-נתונים. מגדירים את המיקום של קובץ סקריפט לטעינה בזמן ההפעלה באחד מהפורמטים הבאים:
    • כתובת URL מאומתת: https://storage.googleapis.com/BUCKET/FILE
    • URI של gcloud storage: gs://BUCKET/FILE
אימות סקריפט לטעינה בזמן ההפעלה

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

‫gcloud (שורת הפקודה)

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

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

gcloud compute instances create VM_NAME ^
  --image-project=windows-cloud ^
  --image-family=windows-2019-core ^
  --scopes=storage-ro ^
  --metadata=windows-startup-script-url=CLOUD_STORAGE_URL

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

  • VM_NAME: שם ה-VM.
  • CLOUD_STORAGE_URL: ערכי המטא-נתונים. מגדירים את המיקום של קובץ סקריפט לטעינה בזמן ההפעלה באחד מהפורמטים הבאים:
    • כתובת 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 ^
  --metadata=windows-startup-script-url=CLOUD_STORAGE_URL

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

  • VM_NAME: שם ה-VM.
  • CLOUD_STORAGE_URL: ערכי המטא-נתונים. מגדירים את המיקום של קובץ סקריפט לטעינה בזמן ההפעלה באחד מהפורמטים הבאים:
    • כתובת URL מאומתת: https://storage.googleapis.com/BUCKET/FILE
    • URI של gcloud storage: gs://BUCKET/FILE
אימות סקריפט לטעינה בזמן ההפעלה

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

‫gcloud (PowerShell)

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

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

gcloud compute instances create VM_NAME `
  --image-project=windows-cloud `
  --image-family=windows-2019-core `
  --scopes=storage-ro `
  --metadata=windows-startup-script-url=CLOUD_STORAGE_URL

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

  • VM_NAME: שם ה-VM.
  • CLOUD_STORAGE_URL: ערכי המטא-נתונים. מגדירים את המיקום של קובץ סקריפט לטעינה בזמן ההפעלה באחד מהפורמטים הבאים:
    • כתובת 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 `
  --metadata=windows-startup-script-url=CLOUD_STORAGE_URL

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

  • VM_NAME: שם ה-VM.
  • CLOUD_STORAGE_URL: ערכי המטא-נתונים. מגדירים את המיקום של קובץ סקריפט לטעינה בזמן ההפעלה באחד מהפורמטים הבאים:
    • כתובת URL מאומתת: https://storage.googleapis.com/BUCKET/FILE
    • URI של gcloud storage: gs://BUCKET/FILE
אימות סקריפט לטעינה בזמן ההפעלה

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

REST

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

כדי להעביר סקריפט לטעינה בזמן ההפעלה שמאוחסן ב-Cloud Storage למכונה וירטואלית של Windows Server, משתמשים בשיטה הבאה 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": "windows-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: מזהה הפרויקט שבו נמצאת מכונת ה-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": "windows-startup-script-url",
            "value": "CLOUD_STORAGE_URL"
        }
      ],
      ...
    }
    

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

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

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

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

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

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

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

    $METADATA_VALUE = (Invoke-RestMethod -Headers @{'Metadata-Flavor' = 'Google'} -Uri "http://metadata.google.internal/computeMetadata/v1/instance/attributes/foo")
    
    # Installing IIS
    Import-Module servermanager
    Install-WindowsFeature Web-Server -IncludeAllSubFeature
    
    # Ensure the directory exists
    if (-not (Test-Path("C:\inetpub\wwwroot"))) {New-Item "C:\inetpub\wwwroot" -Type Directory}
    
    # Write the expanded string out to the file, overwriting the file if it already exists.
    "<html><body><p>Accessing metadata value of foo: $METADATA_VALUE</p></body></html>" | Out-File -FilePath C:\inetpub\wwwroot\index.html -Encoding ascii -Force
    
  2. כדי להגדיר את הערך של מפתח המטא-נתונים foo כשיוצרים מכונה וירטואלית, משתמשים בפקודה הבאה gcloud compute instances create. בדוגמה הזו, סקריפט לטעינה בזמן ההפעלה מועבר למכונה הווירטואלית מקובץ מקומי.

    gcloud

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

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

    • VM_NAME: השם של ה-VM

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

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

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

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

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

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

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

    C:\Program Files\Google\Compute Engine\metadata_scripts\run_startup_scripts.cmd
    

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

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

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