סקריפט לטעינה בזמן ההפעלה הוא קובץ שמבצע משימות במהלך תהליך ההפעלה של מכונה וירטואלית (VM). אפשר להחיל סקריפטים לטעינה בזמן ההפעלה על כל המכונות הווירטואליות בפרויקט או על מכונה וירטואלית אחת. סקריפטים לטעינה בזמן ההפעלה שצוינו במטא-נתונים ברמת ה-VM מבטלים סקריפטים לטעינה בזמן ההפעלה שצוינו במטא-נתונים ברמת הפרויקט, וסקריפטים לטעינה בזמן ההפעלה פועלים רק כשיש רשת זמינה. במאמר הזה מוסבר איך להשתמש בסקריפטים להפעלה במכונות וירטואליות של Linux. מידע על הוספת סקריפט לטעינה בזמן ההפעלה ברמת הפרויקט זמין במאמר gcloud compute project-info add-metadata.
בסקריפטים לטעינה בזמן ההפעלה של Linux, אפשר להשתמש בקובץ Bash או בקובץ שאינו Bash. כדי להשתמש בקובץ שאינו bash, צריך להגדיר את המפענח על ידי הוספת #! לחלק העליון של הקובץ. לדוגמה, כדי להשתמש בסקריפט לטעינה בזמן ההפעלה של Python 3, מוסיפים #! /usr/bin/python3 לחלק העליון של הקובץ.
אם מציינים סקריפט לטעינה בזמן ההפעלה באמצעות אחת מהפרוצדורות שמתוארות במסמך הזה, מערכת Compute Engine מבצעת את הפעולות הבאות:
העתקת הסקריפט לטעינה בזמן ההפעלה אל ה-VM
הגדרת הרשאות הרצה בסקריפט לטעינה בזמן ההפעלה
הסקריפט לטעינה בזמן ההפעלה מופעל כמשתמש
rootכשהמכונה הווירטואלית מופעלת
מידע על המשימות השונות שקשורות לסקריפטים לטעינה בזמן ההפעלה ועל המקרים שבהם צריך לבצע כל אחת מהן מופיע בסקירה הכללית.
דרישות מוקדמות
כדי להריץ סקריפטים שמאוחסנים במטא-נתונים במכונה וירטואלית, צריך להתקין את סביבת האורח ולהפעיל אותה.
- סביבת האורח כוללת את סוכן האורח (לדוגמה, google-guest-agent ב-Linux) שקורא את תוכן הסקריפט או את כתובת ה-URL ממטא-נתונים של המכונה ומפעיל את הביצוע.
- כל התמונות הציבוריות של Compute Engine מגיעות עם סביבת האורח שכבר מותקנת.
- אם יוצרים אימג' מותאם אישית, צריך להתקין ידנית את סביבת האורח של Google כדי לוודא שהסקריפטים ממטא-נתונים וממאפיינים אחרים של Google Cloud פועלים בצורה תקינה.
לפני שמתחילים
- כדאי לקרוא את הסקירה הכללית על סקריפטים לטעינה בזמן ההפעלה.
- מידע על שרת המטא-נתונים
-
אם עדיין לא עשיתם את זה, תצטרכו להגדיר אימות.
אימות הוא תהליך שבו מאמתים את הזהות שלכם כדי לקבל גישה לממשקי API ולשירותים של Google Cloud . כדי להריץ קוד או דוגמאות מסביבת פיתוח מקומית, אפשר לבצע אימות ל-Compute Engine באחת מהדרכים הבאות:
צריך לבחור את הכרטיסייה הרלוונטית לאופן שבו תכננתם להשתמש בדוגמאות בדף הזה:
המסוף
כשמשתמשים במסוף Google Cloud כדי לגשת לשירותים Google Cloud ולממשקי ה-API, לא צריך להגדיר אימות.
gcloud
-
התקינו את ה-CLI של Google Cloud. אחר כך, מאתחלים את ה-CLI של Google Cloud באמצעות הפקודה הבאה:
gcloud initאם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
- הגדרת אזור ותחום כברירת מחדל
REST
כדי להשתמש בסביבת פיתוח מקומית בדוגמאות של API בארכיטקטורת REST שבדף הזה, צריך להשתמש בפרטי הכניסה שאתם נותנים ל-CLI של gcloud.
התקינו את ה-CLI של Google Cloud.
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
מידע נוסף מופיע במאמר אימות לשימוש ב-REST במסמכי האימות של 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 ישירות למכונה וירטואלית חדשה
נכנסים לדף Create an instance במסוף Google Cloud .
כדי להשתמש במערכת הפעלה Linux:
בתפריט הניווט, לוחצים על מערכת הפעלה ואחסון.
לוחצים על Change.
בחלונית דיסק אתחול שמופיעה, בוחרים מערכת הפעלה של Linux.
כדי להוסיף ישירות סקריפט לטעינה בזמן ההפעלה של Linux:
בתפריט הניווט, לוחצים על מתקדם.
בקטע 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
אופציונלי: מציינים אפשרויות הגדרה אחרות. מידע נוסף מופיע במאמר אפשרויות הגדרה במהלך יצירת מכונה.
כדי ליצור את המכונה ולהפעיל אותה, לוחצים על Create.
העברת סקריפט לטעינה בזמן ההפעלה של Linux ישירות למכונה וירטואלית קיימת
נכנסים לדף VM instances במסוף Google Cloud .
לוחצים על השם של המכונה.
לוחצים על Edit.
בקטע אוטומציה, מוסיפים את התוכן של הסקריפט לטעינה בזמן ההפעלה.
אימות סקריפט לטעינה בזמן ההפעלה
אחרי שהמופע מופעל, אפשר לראות את כתובת ה-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 ישירות למכונה וירטואלית קיימת
מקבלים את הערך
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: שם המכונה הווירטואלית.
מעבירים את הסקריפט לטעינה בזמן ההפעלה באמצעות הערך
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שהתקבל באמצעות ה-methodinstances.get.
אימות הסקריפט לטעינה בזמן ההפעלה
אחרי שהמכונה הווירטואלית מופעלת, אפשר להציג את כתובת ה-IP החיצונית בדפדפן אינטרנט כדי לוודא שסקריפט לטעינה בזמן ההפעלה יצר את האתר. יכול להיות שתצטרכו להמתין כדקה עד שסקריפט לטעינה בזמן ההפעלה לדוגמה יסתיים.
העברת סקריפט לטעינה בזמן ההפעלה של Linux מקובץ מקומי
אפשר לאחסן סקריפט לטעינה בזמן ההפעלה בקובץ מקומי בתחנת העבודה ולהעביר את הקובץ המקומי כמטא-נתונים למכונה וירטואלית כשיוצרים אותה. אי אפשר להשתמש בקבצים שמאוחסנים במכונות וירטואליות כסקריפטים לטעינה בזמן ההפעלה.
לפני שמעבירים סקריפט לטעינה בזמן ההפעלה של Linux מקובץ מקומי למכונה וירטואלית, צריך לבצע את הפעולות הבאות:
יוצרים קובץ מקומי לאחסון הסקריפט לטעינה בזמן ההפעלה.
שימו לב לנתיב היחסי מ-CLI של gcloud לסקריפט ההפעלה.
מוסיפים לקובץ את הסקריפט הבא לטעינה בזמן ההפעלה:
#! /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, צריך לבצע את הפעולות הבאות:
יוצרים קובץ לאחסון הסקריפט לטעינה בזמן ההפעלה. בדוגמה הזו נעשה שימוש בקובץ bash (
.sh).מוסיפים את הטקסט הבא לקובץ ה-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
השלכות על האבטחה
כברירת מחדל, לבעלי הפרויקט ולעורכי הפרויקט יש גישה לקבצים ב-Cloud Storage באותו פרויקט, אלא אם יש אמצעי בקרה מפורשים על הגישה שמונעים זאת.
אם הקטגוריה או האובייקט ב-Cloud Storage פחות מאובטחים מהמטא-נתונים, קיים סיכון להרחבת הרשאות אם הסקריפט להפעלה ישתנה וה-VM יופעל מחדש. הסיבה לכך היא שאחרי שהמכונה הווירטואלית מופעלת מחדש, סקריפט לטעינה בזמן ההפעלה פועל כ-
rootואז יכול להשתמש בהרשאות של חשבון השירות המצורף כדי לגשת למשאבים אחרים.
מגבלות
המסוף
העברת סקריפט לטעינה בזמן ההפעלה שמאוחסן ב-Cloud Storage למכונה וירטואלית חדשה
נכנסים לדף Create an instance במסוף Google Cloud .
כדי להשתמש במערכת הפעלה של Linux:
בתפריט הניווט, לוחצים על מערכת הפעלה ואחסון.
בקטע מערכת הפעלה ואחסון, לוחצים על שינוי. לאחר מכן, בוחרים מערכת הפעלה של Linux.
כדי לאפשר למופע לגשת לקטגוריה של Cloud Storage שמכילה את סקריפט לטעינה בזמן ההפעלה של Linux:
בתפריט הניווט, לוחצים על אבטחה.
ברשימה Service account, בוחרים חשבון שירות שיש לו את תפקיד ה-IAM Storage Object Viewer (
roles/storage.objectViewer) בקטגוריה של Cloud Storage.
כדי להוסיף סקריפט לטעינה בזמן ההפעלה של Linux באמצעות ציון קובץ ב-Cloud Storage:
בתפריט הניווט, לוחצים על מתקדם.
בקטע Metadata (מטא נתונים), לוחצים על Add item (הוספת פריט). יופיעו השדות מפתח וערך.
בשדה Key (מפתח), מזינים
startup-script-url.בשדה Value, מזינים את המיקום של קובץ הסקריפט לטעינה בזמן ההפעלה ב-Cloud Storage באחד מהפורמטים הבאים:
- Authenticated URL:
https://storage.googleapis.com/BUCKET/FILE gcloud storage URI:
gs://BUCKET/FILEמחליפים את מה שכתוב בשדות הבאים:
BUCKET: השם של דלי ה-Storage שמכיל את קובץ סקריפט לטעינה בזמן ההפעלה
FILE: השם של קובץ סקריפט לטעינה בזמן ההפעלה
- Authenticated URL:
אופציונלי: מציינים אפשרויות הגדרה אחרות. מידע נוסף מופיע במאמר אפשרויות הגדרה במהלך יצירת מכונה.
כדי ליצור את המכונה ולהפעיל אותה, לוחצים על Create.
העברת סקריפט לטעינה בזמן ההפעלה שמאוחסן ב-Cloud Storage למכונה וירטואלית קיימת
נכנסים לדף VM instances במסוף Google Cloud .
לוחצים על השם של המכונה.
לוחצים על Edit.
בקטע מטא-נתונים, מוסיפים את הערכים הבאים:
מקרא:
startup-script-urlערך: המיקום של קובץ הסקריפט לטעינה בזמן ההפעלה ב-Cloud Storage, באחד מהפורמטים הבאים:
- Authenticated URL:
https://storage.googleapis.com/BUCKET/FILE - gcloud storage URI:
gs://BUCKET/FILE
- Authenticated URL:
אימות סקריפט לטעינה בזמן ההפעלה
כדי לוודא שסקריפט לטעינה בזמן ההפעלה יצר את האתר, פותחים את כתובת ה-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
- Authenticated URL:
העברת סקריפט לטעינה בזמן ההפעלה שמאוחסן ב-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
- Authenticated URL:
אימות סקריפט לטעינה בזמן ההפעלה
כדי לוודא שסקריפט לטעינה בזמן ההפעלה יצר את האתר, פותחים את כתובת ה-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
- Authenticated URL:
העברת סקריפט לטעינה בזמן ההפעלה שמאוחסן ב-Cloud Storage למכונה וירטואלית קיימת
משיגים את הערך
metadata.fingerprintשל המכונה הווירטואלית באמצעות ה-methodinstances.get:GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME
מחליפים את מה שכתוב בשדות הבאים:
PROJECT_ID: מזהה הפרויקט
ZONE: האזור של המכונה הווירטואלית
VM_NAME: השם של ה-VM
מעבירים את הסקריפט לטעינה בזמן ההפעלה באמצעות הערך
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שמתקבל באמצעות ה-methodinstances.get.CLOUD_STORAGE_URL: ערך המטא-נתונים. מגדירים את המיקום של קובץ הסקריפט לטעינה בזמן ההפעלה ב-Cloud Storage באמצעות אחד מהפורמטים הבאים:
- Authenticated URL:
https://storage.googleapis.com/BUCKET/FILE - gcloud storage URI:
gs://BUCKET/FILE
- Authenticated URL:
אימות סקריפט לטעינה בזמן ההפעלה
כדי לוודא שסקריפט לטעינה בזמן ההפעלה יצר את האתר, מציגים את כתובת ה-IP החיצונית בדפדפן אינטרנט. יכול להיות שתצטרכו לחכות כדקה עד שסקריפט לטעינה בזמן ההפעלה לדוגמה יסיים את הפעולה.
גישה למטא-נתונים מסקריפט לטעינה בזמן ההפעלה ב-Linux
בסקריפט לטעינה בזמן ההפעלה אפשר לגשת לערכי מטא-נתונים. לדוגמה, אפשר להשתמש באותו סקריפט לכמה מכונות וירטואליות, ולהגדיר פרמטרים לכל סקריפט בנפרד על ידי העברת ערכים שונים של מטא-נתונים לכל מכונה וירטואלית.
כדי לגשת לערך של מטא-נתונים בהתאמה אישית מסקריפט לטעינה בזמן ההפעלה, מבצעים את הפעולות הבאות:
יוצרים סקריפט לטעינה בזמן ההפעלה ששולח שאילתה לגבי הערך של מפתח מטא-נתונים. לדוגמה, סקריפט לטעינה בזמן ההפעלה הבא של קובץ 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
כדי להגדיר את הערך של מפתח המטא-נתונים
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: הנתיב היחסי לקובץ של סקריפט ההפעלה
מידע נוסף על ציון צמד מפתח/ערך של מטא-נתונים זמין במאמר הגדרת מטא-נתונים מותאמים אישית.
בתחנת העבודה המקומית, פותחים את כתובת ה-IP החיצונית בדפדפן אינטרנט כדי לוודא שסקריפט לטעינה בזמן ההפעלה מפיק את הערך של
foo. יכול להיות שתצטרכו לחכות כדקה עד שסקריפט לטעינה בזמן ההפעלה לדוגמה יסיים את הפעולה.
הפעלה מחדש של סקריפט לטעינה בזמן ההפעלה של Linux
כדי להריץ מחדש סקריפט לטעינה בזמן ההפעלה:
מריצים את הפקודה הבאה:
sudo google_metadata_script_runner startup
הצגת הפלט של סקריפט לטעינה בזמן ההפעלה של Linux
כדי לראות את הפלט של סקריפט לטעינה בזמן ההפעלה ב-Linux, אפשר לבצע אחת מהפעולות הבאות:
מתחברים למופע ומריצים את הפקודה הבאה:
sudo journalctl -u google-startup-scripts.serviceצפייה בפלט דרך יציאה טורית 1 במסוף Google Cloud ובדיקה אם יש אירועי
google_metadata_script_runner.