יצירת מכונה עם דיסקים נוספים שאינם דיסקים לאתחול

במאמר הזה מוסבר איך ליצור דיסקים נוספים שאינם דיסקי אתחול ולצרף אותם למכונה של Compute Engine כשיוצרים את המכונה.

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

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

  • אם עדיין לא עשיתם את זה, תצטרכו להגדיר אימות. אימות הוא התהליך שבו מאמתים את הזהות שלכם כדי לקבל גישה לממשקי API ולשירותים של Google Cloud . כדי להריץ קוד או דוגמאות מסביבת פיתוח מקומית, אפשר לבצע אימות ל-Compute Engine באחת מהדרכים האלה:

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

    המסוף

    כשמשתמשים במסוף Google Cloud כדי לגשת לשירותים ולממשקי ה-API של Google Cloud , לא צריך להגדיר אימות.

    gcloud

    1. התקינו את ה-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 .

התפקידים הנדרשים

כדי לקבל את ההרשאות שנדרשות ליצירת מכונה עם דיסקים נוספים שהם לא דיסקים לאתחול, צריך לבקש מהאדמין להקצות לכם ב-IAM את התפקיד אדמין מכונות של Compute ‏ (v1) (roles/compute.instanceAdmin.v1) בפרויקט. כדי לקרוא הסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.

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

ההרשאות הנדרשות

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

  • ‫compute.instances.create בפרויקט
  • כדי ליצור דיסק למכונה: ‫compute.disks.create בפרויקט
  • כדי ליצור דיסק מתמונה: ‫compute.images.useReadOnly בתמונת המקור
  • כדי ליצור דיסק מקובץ snapshot רגיל או מקובץ snapshot של ארכיון: ‫compute.snapshots.useReadOnly בקובץ ה-snapshot של המקור
  • כדי ליצור דיסק מקובץ snapshot מואץ: ‫compute.instantSnapshots.useReadOnly בקובץ ה-snapshot המואץ של המקור
  • כדי ליצור דיסק מדיסק קיים: ‫compute.disks.useReadOnly בדיסק המקור

יכול להיות שתקבלו את ההרשאות האלה באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש אחרים.

מגבלות

המספר, הגודל הכולל וסוג הדיסקים שאפשר לצרף למכונה תלויים בסוג המכונה.

לדוגמה, מכונות C4 לא תומכות ב-Persistent Disk. בנוסף, הגודל הכולל של כל הדיסקים שמחוברים למכונה מסוג c4-standard-2 לא יכול להיות יותר מ-257TiB, אבל במכונה מסוג c4-standard-192 המגבלה היא 512TiB.

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

סוגי מכונות לשימוש כללי
סוגי מכונות מותאמות לצריכת מעבד גבוהה (compute-optimized)
סוגי מכונות עם זיכרון אופטימלי (memory-optimized)
סוגי מכונות
עם אופטימיזציה למאיצים
סוגי מכונות עם אופטימיזציה לאחסון

מגבלות על גודל הדיסק ושמות של קובצי עזר

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

כשיוצרים דיסק באמצעות Google Cloud CLI,‏ REST או ספריות הלקוח של Cloud ל-Compute Engine, מציינים את סוג הדיסק שרוצים ליצור באמצעות הערך המתאים בעמודה Reference name בטבלה הבאה.

סוג הדיסק שם קובץ העזר גודל מינימלי גודל מקסימלי ברירת מחדל של גודל
Hyperdisk Balanced hyperdisk-balanced ‫4 GiB 64 TiB1 100 GiB
Hyperdisk Balanced High Availability hyperdisk-balanced-high-availability ‫4 GiB 64 TiB 100 GiB
Hyperdisk Extreme hyperdisk-extreme 64 GiB 64 TiB ‫1 TiB
Hyperdisk Throughput hyperdisk-throughput ‫2 TiB ‫32 TiB ‫2 TiB
Hyperdisk ML hyperdisk-ml ‫4 GiB 64 TiB ‫100 GiB
דיסק אחסון מתמיד מאוזן pd-balanced אזורי: 10GiB
בכמה אזורים: 10GiB
64 TiB 100 GiB
דיסק מתמיד שמבוסס על ביצועים (SSD) pd-ssd אזורי: 10GiB
בכמה אזורים: 10GiB
64 TiB 100 GiB
דיסק מתמיד סטנדרטי pd-standard אזורי: 10 GiB
בכמה אזורים: 200 GiB
‫64 TiB 500 GiB
דיסק אחסון מתמיד (persistent disk) מסוג Extreme pd-extreme 500 GiB 64 TiB ‫1 TiB
1 גרסת טרום-השקה (Preview): ב-C4 אפשר להשתמש בדיסק בגודל מקסימלי של 128 TiB. כדי לקבל גישה לתכונה הזו, צריך לפנות לכתובת hyperdisk-questions@google.com.

יצירת מכונה עם דיסקים חדשים נוספים שהם לא דיסקים לאתחול

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

המסוף

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

    כניסה לדף Create an instance

    אם מוצגת בקשה, בוחרים את הפרויקט ולוחצים על Continue.

    הדף Create an instance מופיע ובו החלונית Machine configuration.

  2. בחלונית Machine configuration:

    1. בשדה Name, מציינים שם למכונה. מידע נוסף זמין במאמר מוסכמות למתן שמות למשאבים.
    2. בשדה Region, מציינים את האזור שבו רוצים ליצור את המכונה.
    3. אופציונלי: בשדה Zone, בוחרים אזור למכונה הזו.

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

    4. בוחרים את משפחת המכונות של המכונה. במסוף Google Cloud יוצגו סדרות המכונות שזמינות למשפחת המכונות שבחרתם. אלה האפשרויות הזמינות למשפחת המכונות:

      • לשימוש כללי
      • אופטימיזציה של המחשוב
      • מותאמת לצריכת זיכרון גבוהה (memory-optimized)
      • אופטימיזציה של נפח האחסון
      • אופטימיזציה של הרשת
      • מעבדים גרפיים
      • יחידות TPU

    5. בעמודה Series, בוחרים את סדרת המכונות של המכונה.

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

    6. בקטע Machine type, בוחרים את סוג המכונה של המכונה הווירטואלית.

  3. בתפריט הניווט, לוחצים על מערכת הפעלה ואחסון. מופיעה החלונית Operating system and storage.

  4. כדי להגדיר את דיסק האתחול, לוחצים על Change. החלונית דיסק אתחול מופיעה ומוצגת בה הכרטיסייה Public images.

  5. מגדירים את מקור הנתונים של דיסק האתחול באחת מהדרכים הבאות:

    • כדי לבחור תמונה ציבורית כמקור הנתונים של דיסק האתחול, בכרטיסייה Public images מציינים את הפרטים הבאים:
      1. ברשימה Operating system בוחרים את סוג מערכת ההפעלה.
      2. ברשימה Version בוחרים את גרסת מערכת ההפעלה.
      3. ברשימה Boot disk type, בוחרים את סוג דיסק האתחול.
      4. בשדה Size (GB) מציינים את גודל דיסק האתחול.
    • כדי לבחור תמונה בהתאמה אישית כמקור הנתונים של דיסק האתחול, לוחצים על Custom images, ובכרטיסייה Custom images שמופיעה מציינים את הפרטים הבאים:
      1. כדי לבחור את פרויקט התמונה, לוחצים על Change ובוחרים את הפרויקט שמכיל את התמונה.
      2. ברשימה Image, בוחרים את קובץ האימג' שרוצים לייבא.
      3. ברשימה Boot disk type, בוחרים את סוג דיסק האתחול.
      4. בשדה Size (GB) מציינים את גודל דיסק האתחול.
    • כדי לבחור תמונת מצב רגילה כמקור הנתונים של דיסק האתחול, לוחצים על Snapshots ואז בכרטיסייה Snapshots שמופיעה מציינים את הפרטים הבאים:
      1. ברשימה Snapshot, בוחרים את קובץ ה-snapshot.
      2. ברשימה Boot disk type, בוחרים את סוג דיסק האתחול.
      3. בשדה Size (GB) מציינים את גודל דיסק האתחול.
    • כדי לבחור קובץ snapshot של ארכיון כמקור הנתונים של דיסק האתחול, לוחצים על Archive snapshots ואז, בכרטיסייה Archive snapshots שמופיעה, מציינים את הפרטים הבאים:
      1. ברשימה Archive snapshot, בוחרים את קובץ ה-snapshot של הארכיון.
      2. ברשימה Boot disk type, בוחרים את סוג דיסק האתחול.
      3. בשדה Size (GB) מציינים את גודל דיסק האתחול.
    • כדי לבחור דיסק קיים כדיסק האתחול, לוחצים על Existing disks. בכרטיסייה Existing disks שמופיעה, בוחרים דיסק קיים ברשימה Disk. באפשרות הזו, הדיסק הקיים משמש כדיסק האתחול ולא נוצר דיסק חדש.

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

  7. אופציונלי: כדי לראות אפשרויות הגדרה מתקדמות, מרחיבים את הקטע Show advanced configurations.

    • בשדה Mode, בוחרים את מצב צירוף הדיסק.
    • בשדה כלל מחיקה, בוחרים אם לשמור או למחוק את הדיסק כשמוחקים את המכונה.
    • כדי שיהיה קל יותר לזהות את הדיסק מתוך מערכת ההפעלה של האורח, מציינים שם מכשיר בהתאמה אישית. בכותרת שם המכשיר, בוחרים באפשרות שימוש בשם מכשיר בהתאמה אישית. בשדה Device name, מזינים מחרוזת שתשמש כקישור סימבולי לדיסק.

  8. כדי לאשר את האפשרויות של דיסק האתחול ולחזור לחלונית OS and storage, לוחצים על Select.

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

    1. בקטע Additional disks, לוחצים על Add new disk. מופיע החלונית Add new disk.

    2. בקטע Disk configuration, בשדה Name מציינים שם לדיסק שאינו לאתחול.

    3. אופציונלי: בשדה Description, מציינים תיאור לדיסק.

    4. בוחרים את מקור הנתונים לדיסק החדש:

      • כדי ליצור דיסק ריק ולא מעוצב, ברשימה Disk source type בוחרים באפשרות Blank disk.
      • כדי ליצור עותק של נתונים קיימים, בוחרים את סוג המקור של הדיסק שאינו לאתחול.
    5. ברשימה Disk type, בוחרים סוג לדיסק שאינו דיסק אתחול. סוג המכונה חייב לתמוך בסוג הדיסק.

    6. בשדה Size, מציינים את הגודל של הדיסק שהוא לא דיסק אתחול.

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

      • Hyperdisk Balanced. אפשר לשנות את הערכים של Size,‏ Provisioned IOPS ו-Provisioned Throughput של הדיסק.
      • Hyperdisk Extreme. אפשר לשנות את הערכים של Size ו-Provisioned IOPS של הדיסק.
      • Hyperdisk ML. אפשר לשנות את Size ו-Provisioned Throughput של הדיסק.
      • ‫Hyperdisk Throughput.אתם יכולים לשנות את הערכים של Size ו-הקצאת משאבים לפי התפוקה שנקבעה של הדיסק.
    8. אופציונלי: כדי לראות אפשרויות הגדרה מתקדמות, מרחיבים את הקטע Show advanced configurations.

      • בשדה Mode, בוחרים את מצב צירוף הדיסק.
      • בשדה כלל מחיקה, בוחרים אם לשמור או למחוק את הדיסק כשמוחקים את המכונה.
      • כדי שיהיה קל יותר לזהות את הדיסק מתוך מערכת ההפעלה של האורח, מציינים שם מכשיר בהתאמה אישית. בכותרת שם המכשיר, בוחרים באפשרות שימוש בשם מכשיר בהתאמה אישית. בשדה Device name, מזינים מחרוזת שתשמש כקישור סימבולי לדיסק.

    9. כדי לאשר את האפשרויות ולחזור לחלונית OS and storage, לוחצים על Save.

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

  10. אופציונלי: מציינים אפשרויות גיבוי ורפליקציה למכונה. בתפריט הניווט, לוחצים על הגנה על נתונים. בחלונית הגנה על נתונים שמופיעה, מציינים איך רוצים לגבות ולשכפל את הנתונים של המכונה:

    1. כדי לציין איך אתם רוצים לגבות את הנתונים, בוחרים אפשרות בקטע גיבוי הנתונים.
    2. כדי לציין איך אתם רוצים לשכפל את הנתונים:

      1. אם רוצים שדיסקים חדשים של המכונה ישוכפלו באופן סינכרוני באזור שני באמצעות סוגי דיסקים אזוריים, מסמנים את התיבה Regional disks.
      1. אם רוצים שהדיסקים של המכונה ישוכפלו באזור שני באמצעות רפליקציה אסינכרונית, מסמנים את התיבה Asynchronous replication.
    3. כדי להשתמש באפשרויות ההגנה על הנתונים שצוינו רק בדיסקים שהם לא דיסקי אתחול, מסמנים את התיבה Exclude boot disks.

  11. בתפריט הניווט, לוחצים על Networking. בחלונית Networking שמופיעה:

    1. עוברים לקטע Firewall.
    2. כדי לאפשר תעבורת נתונים מסוג HTTP או HTTPS למכונה, בוחרים באפשרות Allow HTTP traffic או Allow HTTPS traffic.

      ‫Compute Engine מוסיף תג רשת למכונה ויוצר את הכלל התואם של חומת האש לתעבורת נתונים נכנסת, שמאפשר את כל תעבורת הנתונים הנכנסת ב-tcp:80 (HTTP) או ב-tcp:443 (HTTPS). תג הרשת משייך את כלל חומת האש למכונה. מידע נוסף זמין במאמר סקירה כללית של כללי חומת האש במסמכי התיעוד של Cloud Next Generation Firewall.

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

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

gcloud

  1. מפעילים את Cloud Shell במסוף Google Cloud .

    הפעלת Cloud Shell

    בחלק התחתון של מסוף Google Cloud יתחיל סשן של Cloud Shell ותופיע הודעה של שורת הפקודה. Cloud Shell היא סביבת מעטפת שבה ה-CLI של Google Cloud מותקן ומוגדרים ערכים לפרויקט הקיים. הסשן יופעל תוך כמה שניות.

  2. מריצים את הפקודה gcloud compute instances create כדי ליצור מכונה עם דיסקים נוספים שאינם דיסקי אתחול.

    אפשר להוסיף עד 127 דיסקים שהם לא דיסקים לאתחול בזמן שיוצרים את המכונה. מציינים את הדגל --create-disk לכל דיסק שאינו דיסק אתחול שיוצרים.

    כדי ליצור דיסקים שאינם דיסקי אתחול מתמונה ציבורית או מתמונה ממאגר, מציינים את המאפיינים image או image-family ו-image-project עם הדגל --create-disk. כדי ליצור דיסק ריק, אל תכללו את המאפיינים האלה.

    אפשר גם לכלול ערכים למאפיינים הבאים:

    • גודל הדיסק: משתמשים במאפיין --size.
    • סוג הדיסק: משתמשים במאפיין --type.
    • דיסקים אזוריים: כוללים את המאפיין replica-zones.
    gcloud compute instances create INSTANCE_NAME \
        --zone=ZONE \
        --machine-type=MACHINE_TYPE \
        --image-project=BOOT_DISK_IMAGE_PROJECT \
        BOOT_DISK_IMAGE_FLAG \
        --create-disk name=DISK_NAME,device-name=DISK_DEVICE_NAME,size=SIZE_GB,type=DISK_TYPE,image=DISK_IMAGE,image-project=DISK_IMAGE_PROJECT,replica-zones=^:^ZONE:REMOTE_ZONE,boot=false
    

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

    • ‫INSTANCE_NAME: השם של המכונה החדשה.
    • ‫ZONE: האזור שבו יוצרים את המכונה.
    • ‫MACHINE_TYPE: סוג המכונה. לדוגמה, c3-standard-4.
    • ‫BOOT_DISK_IMAGE_PROJECT: הפרויקט שמכיל את קובץ האימג'. לדוגמה, ב-Debian,‏ debian-cloud. כדי למצוא את פרויקט התמונות של תמונות ציבוריות, עוברים לדף פרטי מערכת ההפעלה. בקטע GA versions של מערכת ההפעלה, פרויקט התמונה מופיע בעמודה Image project בכרטיסייה General information.
    • ‫BOOT_DISK_IMAGE_FLAG: מציינים אחת מהאפשרויות הבאות:

      • משתמשים בדגל --image IMAGE_NAME כדי לציין גרסה ספציפית של תמונה ציבורית או תמונה בהתאמה אישית. לדוגמה, --image debian-12-bookworm-v20241112.

      • משתמשים בדגל --image-family IMAGE_FAMILY_NAME כדי לציין משפחת תמונות. כך נוצר המכונה שמשתמשת בקובץ האימג' העדכני ביותר של מערכת ההפעלה במשפחת קובצי האימג', שלא הוצא משימוש. לדוגמה, אם מציינים את הערך --image-family debian-12, המערכת של Compute Engine משתמשת בגרסה האחרונה של קובץ האימג' של מערכת ההפעלה במשפחת קובצי האימג' של Debian 12 כשיוצרים את המכונה.

    • לדיסקים נוספים, מחליפים את הערכים הבאים:

      • ‫DISK_NAME: אופציונלי: השם של הדיסק שהוא לא דיסק אתחול.
      • ‫SIZE_GB: אופציונלי: הגודל של הדיסק שהוא לא דיסק אתחול.
      • ‫DISK_TYPE: סוג הדיסק. לדוגמה, hyperdisk-balanced. סוג המכונה חייב לתמוך בסוג הדיסק.
      • ‫DISK_DEVICE_NAME: אופציונלי: השם של הדיסק שמוצג למערכת ההפעלה של האורח אחרי שיוצרים את המכונה.
      • ‫DISK_IMAGE: אופציונלי: כדי ליצור דיסק מתמונה קיימת, מציינים אחת מהאפשרויות הבאות:
        • ‫image=DISK_IMAGE_NAME: שם קובץ האימג' שבו רוצים להשתמש כדי ליצור את הדיסק שהוא לא דיסק אתחול, למשל debian-12-bookworm-v20260210.
        • ‫image-family=DISK_IMAGE_FAMILY: משפחת תמונות שמשמשת ליצירת דיסק שהוא לא דיסק אתחול, לדוגמה debian-12.
      • ‫DISK_IMAGE_PROJECT: אופציונלי: כדי ליצור דיסק שלא משמש לאתחול מתמונה קיימת, מציינים את פרויקט התמונה שמכיל את התמונה.
      • ‫REMOTE_ZONE: אופציונלי: אם יוצרים דיסק אזורי, מציינים את האזור שאליו רוצים לשכפל את הדיסק, לדוגמה, us-central1-b.

      בדיסקים ריקים, אל תציינו את הפרמטרים image,‏ image-project או image-family.

      בדיסקים של אזור, אל תציינו את מאפיין הדיסק replica-zones.

Terraform

כדי ליצור את קוד Terraform, אפשר להשתמש ברכיב Equivalent code במסוף Google Cloud .
  1. נכנסים לדף VM instances במסוף Google Cloud .

    כניסה לדף VM Instances

  2. לוחצים על Create instance.
  3. מציינים את הפרמטרים הרצויים.
  4. בחלק העליון או התחתון של הדף, לוחצים על Equivalent code ואז על הכרטיסייה Terraform כדי לראות את הקוד של Terraform.

המשך

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Go במדריך למתחילים של Compute Engine באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של Compute Engine Go API.

כדי לבצע אימות ב-Compute Engine, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

import (
	"context"
	"fmt"
	"io"

	compute "cloud.google.com/go/compute/apiv1"
	computepb "cloud.google.com/go/compute/apiv1/computepb"
	"google.golang.org/protobuf/proto"
)

// createWithAdditionalDisk create a new VM instance with Debian 10 operating system and a 11 GB additional empty disk.
func createWithAdditionalDisk(w io.Writer, projectID, zone, instanceName string) error {
	// projectID := "your_project_id"
	// zone := "europe-central2-b"
	// instanceName := "your_instance_name"

	ctx := context.Background()
	instancesClient, err := compute.NewInstancesRESTClient(ctx)
	if err != nil {
		return fmt.Errorf("NewInstancesRESTClient: %w", err)
	}
	defer instancesClient.Close()

	imagesClient, err := compute.NewImagesRESTClient(ctx)
	if err != nil {
		return fmt.Errorf("NewImagesRESTClient: %w", err)
	}
	defer imagesClient.Close()

	// List of public operating system (OS) images: https://cloud.google.com/compute/docs/images/os-details.
	newestDebianReq := &computepb.GetFromFamilyImageRequest{
		Project: "debian-cloud",
		Family:  "debian-12",
	}
	newestDebian, err := imagesClient.GetFromFamily(ctx, newestDebianReq)
	if err != nil {
		return fmt.Errorf("unable to get image from family: %w", err)
	}

	req := &computepb.InsertInstanceRequest{
		Project: projectID,
		Zone:    zone,
		InstanceResource: &computepb.Instance{
			Name: proto.String(instanceName),
			Disks: []*computepb.AttachedDisk{
				{
					InitializeParams: &computepb.AttachedDiskInitializeParams{
						DiskSizeGb:  proto.Int64(10),
						SourceImage: newestDebian.SelfLink,
						DiskType:    proto.String(fmt.Sprintf("zones/%s/diskTypes/pd-standard", zone)),
					},
					AutoDelete: proto.Bool(true),
					Boot:       proto.Bool(true),
					Type:       proto.String(computepb.AttachedDisk_PERSISTENT.String()),
				},
				{
					InitializeParams: &computepb.AttachedDiskInitializeParams{
						DiskSizeGb: proto.Int64(11),
						DiskType:   proto.String(fmt.Sprintf("zones/%s/diskTypes/pd-standard", zone)),
					},
					AutoDelete: proto.Bool(true),
					Boot:       proto.Bool(false),
					Type:       proto.String(computepb.AttachedDisk_PERSISTENT.String()),
				},
			},
			MachineType: proto.String(fmt.Sprintf("zones/%s/machineTypes/n1-standard-1", zone)),
			NetworkInterfaces: []*computepb.NetworkInterface{
				{
					Name: proto.String("global/networks/default"),
				},
			},
		},
	}

	op, err := instancesClient.Insert(ctx, req)
	if err != nil {
		return fmt.Errorf("unable to create instance: %w", err)
	}

	if err = op.Wait(ctx); err != nil {
		return fmt.Errorf("unable to wait for the operation: %w", err)
	}

	fmt.Fprintf(w, "Instance created\n")

	return nil
}

Java

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Java במדריך למתחילים של Compute Engine באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של Compute Engine Java API.

כדי לבצע אימות ב-Compute Engine, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.


import com.google.api.gax.longrunning.OperationFuture;
import com.google.cloud.compute.v1.AttachedDisk;
import com.google.cloud.compute.v1.AttachedDisk.Type;
import com.google.cloud.compute.v1.AttachedDiskInitializeParams;
import com.google.cloud.compute.v1.Image;
import com.google.cloud.compute.v1.ImagesClient;
import com.google.cloud.compute.v1.InsertInstanceRequest;
import com.google.cloud.compute.v1.Instance;
import com.google.cloud.compute.v1.InstancesClient;
import com.google.cloud.compute.v1.NetworkInterface;
import com.google.cloud.compute.v1.Operation;
import java.io.IOException;
import java.util.Vector;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

public class CreateInstancesAdvanced {

  /**
   * Create an AttachedDisk object to be used in VM instance creation. Uses an image as the source
   * for the new disk.
   *
   * @param diskType the type of disk you want to create. This value uses the following format:
   * "zones/{zone}/diskTypes/(pd-standard|pd-ssd|pd-balanced|pd-extreme)". For example:
   * "zones/us-west3-b/diskTypes/pd-ssd"
   * @param diskSizeGb size of the new disk in gigabytes
   * @param boot boolean flag indicating whether this disk should be used as a boot disk of an
   * instance
   * @param sourceImage source image to use when creating this disk. You must have read access to
   * this disk. This can be one of the publicly available images or an image from one of your
   * projects. This value uses the following format:
   * "projects/{project_name}/global/images/{image_name}"
   * @return AttachedDisk object configured to be created using the specified image.
   */
  private static AttachedDisk diskFromImage(String diskType, int diskSizeGb, boolean boot,
      String sourceImage) {
    AttachedDisk disk =
        AttachedDisk.newBuilder()
            .setBoot(boot)
            // Remember to set auto_delete to True if you want the disk to be deleted when
            // you delete your VM instance.
            .setAutoDelete(true)
            .setType(Type.PERSISTENT.toString())
            .setInitializeParams(
                AttachedDiskInitializeParams.newBuilder()
                    .setSourceImage(sourceImage)
                    .setDiskSizeGb(diskSizeGb)
                    .setDiskType(diskType)
                    .build())
            .build();
    return disk;
  }


  /**
   * Create an AttachedDisk object to be used in VM instance creation. The created disk contains no
   * data and requires formatting before it can be used.
   *
   * @param diskType the type of disk you want to create. This value uses the following format:
   * "zones/{zone}/diskTypes/(pd-standard|pd-ssd|pd-balanced|pd-extreme)". For example:
   * "zones/us-west3-b/diskTypes/pd-ssd"
   * @param diskSizeGb size of the new disk in gigabytes
   * @return AttachedDisk object configured to be created as an empty disk.
   */
  private static AttachedDisk emptyDisk(String diskType, int diskSizeGb) {
    AttachedDisk disk =
        AttachedDisk.newBuilder()
            .setBoot(false)
            // Remember to set auto_delete to True if you want the disk to be deleted when
            // you delete your VM instance.
            .setAutoDelete(true)
            .setType(Type.PERSISTENT.toString())
            .setInitializeParams(
                AttachedDiskInitializeParams.newBuilder()
                    .setDiskSizeGb(diskSizeGb)
                    .setDiskType(diskType)
                    .build())
            .build();
    return disk;
  }

  /**
   * Send an instance creation request to the Compute Engine API and wait for it to complete.
   *
   * @param project project ID or project number of the Cloud project you want to use.
   * @param zone name of the zone to create the instance in. For example: "us-west3-b"
   * @param instanceName name of the new virtual machine (VM) instance.
   * @param disks a list of compute_v1.AttachedDisk objects describing the disks you want to attach
   * to your new instance.
   * @param machineType machine type of the VM being created. This value uses the following format:
   * "zones/{zone}/machineTypes/{type_name}".
   * For example: "zones/europe-west3-c/machineTypes/f1-micro"
   * @param network name of the network you want the new instance to use. For example:
   * "global/networks/default" represents the network named "default", which is created
   * automatically for each project.
   * @param subnetwork name of the subnetwork you want the new instance to use. This value uses the
   * following format: "regions/{region}/subnetworks/{subnetwork_name}"
   * @return Instance object.
   */
  private static Instance createWithDisks(String project, String zone, String instanceName,
      Vector<AttachedDisk> disks, String machineType, String network, String subnetwork)
      throws IOException, InterruptedException, ExecutionException, TimeoutException {
    try (InstancesClient instancesClient = InstancesClient.create()) {
      // Use the network interface provided in the networkName argument.
      NetworkInterface networkInterface;
      if (subnetwork != null) {
        networkInterface = NetworkInterface.newBuilder()
            .setName(network).setSubnetwork(subnetwork)
            .build();
      } else {
        networkInterface = NetworkInterface.newBuilder()
            .setName(network).build();
      }

      machineType = String.format("zones/%s/machineTypes/%s", zone, machineType);

      // Bind `instanceName`, `machineType`, `disk`, and `networkInterface` to an instance.
      Instance instanceResource =
          Instance.newBuilder()
              .setName(instanceName)
              .setMachineType(machineType)
              .addAllDisks(disks)
              .addNetworkInterfaces(networkInterface)
              .build();

      System.out.printf("Creating instance: %s at %s ", instanceName, zone);

      // Insert the instance in the specified project and zone.
      InsertInstanceRequest insertInstanceRequest = InsertInstanceRequest.newBuilder()
          .setProject(project)
          .setZone(zone)
          .setInstanceResource(instanceResource).build();

      OperationFuture<Operation, Operation> operation = instancesClient.insertAsync(
          insertInstanceRequest);

      // Wait for the operation to complete.
      Operation response = operation.get(3, TimeUnit.MINUTES);

      if (response.hasError()) {
        System.out.println("Instance creation failed ! ! " + response);
        return null;
      }
      System.out.println("Operation Status: " + response.getStatus());

      return instancesClient.get(project, zone, instanceName);
    }
  }

  /**
   * Create a new VM instance with Debian 13 operating system and a 11 GB additional empty disk.
   *
   * @param project project ID or project number of the Cloud project you want to use.
   * @param zone name of the zone to create the instance in. For example: "us-west3-b"
   * @param instanceName name of the new virtual machine (VM) instance.
   * @return Instance object.
   */
  public static Instance createWithAdditionalDisk(String project, String zone, String instanceName)
      throws IOException, InterruptedException, ExecutionException, TimeoutException {
    try (ImagesClient imagesClient = ImagesClient.create()) {
      // List of public operating system (OS) images: https://cloud.google.com/compute/docs/images/os-details
      Image image = imagesClient.getFromFamily("debian-cloud", "debian-13");
      String diskType = String.format("zones/%s/diskTypes/pd-standard", zone);
      Vector<AttachedDisk> disks = new Vector<>();
      disks.add(diskFromImage(diskType, 10, true, image.getSelfLink()));
      disks.add(emptyDisk(diskType, 11));
      return createWithDisks(project, zone, instanceName, disks, "n1-standard-1",
          "global/networks/default", null);
    }
  }

Node.js

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Node.js במדריך למתחילים של Compute Engine באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של Compute Engine Node.js API.

כדי לבצע אימות ב-Compute Engine, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

/**
 * TODO(developer): Uncomment and replace these variables before running the sample.
 */
// const projectId = 'YOUR_PROJECT_ID';
// const zone = 'europe-central2-b';
// const instanceName = 'YOUR_INSTANCE_NAME';

const compute = require('@google-cloud/compute');

// Create a new VM instance with Debian 10 operating system and a 11 GB additional empty disk.
async function createWithAdditionalDisk() {
  const instancesClient = new compute.InstancesClient();
  const imagesClient = new compute.ImagesClient();

  // List of public operating system (OS) images: https://cloud.google.com/compute/docs/images/os-details.
  const [newestDebian] = await imagesClient.getFromFamily({
    project: 'debian-cloud',
    family: 'debian-11',
  });

  const [response] = await instancesClient.insert({
    project: projectId,
    zone,
    instanceResource: {
      name: instanceName,
      disks: [
        {
          initializeParams: {
            diskSizeGb: '10',
            sourceImage: newestDebian.selfLink,
            diskType: `zones/${zone}/diskTypes/pd-standard`,
          },
          autoDelete: true,
          boot: true,
          type: 'PERSISTENT',
        },
        {
          initializeParams: {
            diskSizeGb: '11',
            diskType: `zones/${zone}/diskTypes/pd-standard`,
          },
          autoDelete: true,
          boot: false,
          type: 'PERSISTENT',
        },
      ],
      machineType: `zones/${zone}/machineTypes/n1-standard-1`,
      networkInterfaces: [
        {
          name: 'global/networks/default',
        },
      ],
    },
  });
  let operation = response.latestResponse;
  const operationsClient = new compute.ZoneOperationsClient();

  // Wait for the create operation to complete.
  while (operation.status !== 'DONE') {
    [operation] = await operationsClient.wait({
      operation: operation.name,
      project: projectId,
      zone: operation.zone.split('/').pop(),
    });
  }

  console.log('Instance created.');
}

createWithAdditionalDisk();

Python

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Python במדריך למתחילים של Compute Engine באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של Compute Engine Python API.

כדי לבצע אימות ב-Compute Engine, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

from __future__ import annotations

import re
import sys
from typing import Any
import warnings

from google.api_core.extended_operation import ExtendedOperation
from google.cloud import compute_v1


def get_image_from_family(project: str, family: str) -> compute_v1.Image:
    """
    Retrieve the newest image that is part of a given family in a project.

    Args:
        project: project ID or project number of the Cloud project you want to get image from.
        family: name of the image family you want to get image from.

    Returns:
        An Image object.
    """
    image_client = compute_v1.ImagesClient()
    # List of public operating system (OS) images: https://cloud.google.com/compute/docs/images/os-details
    newest_image = image_client.get_from_family(project=project, family=family)
    return newest_image


def disk_from_image(
    disk_type: str,
    disk_size_gb: int,
    boot: bool,
    source_image: str,
    auto_delete: bool = True,
) -> compute_v1.AttachedDisk:
    """
    Create an AttachedDisk object to be used in VM instance creation. Uses an image as the
    source for the new disk.

    Args:
         disk_type: the type of disk you want to create. This value uses the following format:
            "zones/{zone}/diskTypes/(pd-standard|pd-ssd|pd-balanced|pd-extreme)".
            For example: "zones/us-west3-b/diskTypes/pd-ssd"
        disk_size_gb: size of the new disk in gigabytes
        boot: boolean flag indicating whether this disk should be used as a boot disk of an instance
        source_image: source image to use when creating this disk. You must have read access to this disk. This can be one
            of the publicly available images or an image from one of your projects.
            This value uses the following format: "projects/{project_name}/global/images/{image_name}"
        auto_delete: boolean flag indicating whether this disk should be deleted with the VM that uses it

    Returns:
        AttachedDisk object configured to be created using the specified image.
    """
    boot_disk = compute_v1.AttachedDisk()
    initialize_params = compute_v1.AttachedDiskInitializeParams()
    initialize_params.source_image = source_image
    initialize_params.disk_size_gb = disk_size_gb
    initialize_params.disk_type = disk_type
    boot_disk.initialize_params = initialize_params
    # Remember to set auto_delete to True if you want the disk to be deleted when you delete
    # your VM instance.
    boot_disk.auto_delete = auto_delete
    boot_disk.boot = boot
    return boot_disk


def empty_disk(
    disk_type: str, disk_size_gb: int, boot: bool = False, auto_delete: bool = True
) -> compute_v1.AttachedDisk():
    """
    Create an AttachedDisk object to be used in VM instance creation. The created disk contains
    no data and requires formatting before it can be used.

    Args:
         disk_type: the type of disk you want to create. This value uses the following format:
            "zones/{zone}/diskTypes/(pd-standard|pd-ssd|pd-balanced|pd-extreme)".
            For example: "zones/us-west3-b/diskTypes/pd-ssd"
        disk_size_gb: size of the new disk in gigabytes
        boot: boolean flag indicating whether this disk should be used as a boot disk of an instance
        auto_delete: boolean flag indicating whether this disk should be deleted with the VM that uses it

    Returns:
        AttachedDisk object configured to be created as an empty disk.
    """
    disk = compute_v1.AttachedDisk()
    initialize_params = compute_v1.AttachedDiskInitializeParams()
    initialize_params.disk_type = disk_type
    initialize_params.disk_size_gb = disk_size_gb
    disk.initialize_params = initialize_params
    # Remember to set auto_delete to True if you want the disk to be deleted when you delete
    # your VM instance.
    disk.auto_delete = auto_delete
    disk.boot = boot
    return disk


def wait_for_extended_operation(
    operation: ExtendedOperation, verbose_name: str = "operation", timeout: int = 300
) -> Any:
    """
    Waits for the extended (long-running) operation to complete.

    If the operation is successful, it will return its result.
    If the operation ends with an error, an exception will be raised.
    If there were any warnings during the execution of the operation
    they will be printed to sys.stderr.

    Args:
        operation: a long-running operation you want to wait on.
        verbose_name: (optional) a more verbose name of the operation,
            used only during error and warning reporting.
        timeout: how long (in seconds) to wait for operation to finish.
            If None, wait indefinitely.

    Returns:
        Whatever the operation.result() returns.

    Raises:
        This method will raise the exception received from `operation.exception()`
        or RuntimeError if there is no exception set, but there is an `error_code`
        set for the `operation`.

        In case of an operation taking longer than `timeout` seconds to complete,
        a `concurrent.futures.TimeoutError` will be raised.
    """
    result = operation.result(timeout=timeout)

    if operation.error_code:
        print(
            f"Error during {verbose_name}: [Code: {operation.error_code}]: {operation.error_message}",
            file=sys.stderr,
            flush=True,
        )
        print(f"Operation ID: {operation.name}", file=sys.stderr, flush=True)
        raise operation.exception() or RuntimeError(operation.error_message)

    if operation.warnings:
        print(f"Warnings during {verbose_name}:\n", file=sys.stderr, flush=True)
        for warning in operation.warnings:
            print(f" - {warning.code}: {warning.message}", file=sys.stderr, flush=True)

    return result


def create_instance(
    project_id: str,
    zone: str,
    instance_name: str,
    disks: list[compute_v1.AttachedDisk],
    machine_type: str = "n1-standard-1",
    network_link: str = "global/networks/default",
    subnetwork_link: str = None,
    internal_ip: str = None,
    external_access: bool = False,
    external_ipv4: str = None,
    accelerators: list[compute_v1.AcceleratorConfig] = None,
    preemptible: bool = False,
    spot: bool = False,
    instance_termination_action: str = "STOP",
    custom_hostname: str = None,
    delete_protection: bool = False,
) -> compute_v1.Instance:
    """
    Send an instance creation request to the Compute Engine API and wait for it to complete.

    Args:
        project_id: project ID or project number of the Cloud project you want to use.
        zone: name of the zone to create the instance in. For example: "us-west3-b"
        instance_name: name of the new virtual machine (VM) instance.
        disks: a list of compute_v1.AttachedDisk objects describing the disks
            you want to attach to your new instance.
        machine_type: machine type of the VM being created. This value uses the
            following format: "zones/{zone}/machineTypes/{type_name}".
            For example: "zones/europe-west3-c/machineTypes/f1-micro"
        network_link: name of the network you want the new instance to use.
            For example: "global/networks/default" represents the network
            named "default", which is created automatically for each project.
        subnetwork_link: name of the subnetwork you want the new instance to use.
            This value uses the following format:
            "regions/{region}/subnetworks/{subnetwork_name}"
        internal_ip: internal IP address you want to assign to the new instance.
            By default, a free address from the pool of available internal IP addresses of
            used subnet will be used.
        external_access: boolean flag indicating if the instance should have an external IPv4
            address assigned.
        external_ipv4: external IPv4 address to be assigned to this instance. If you specify
            an external IP address, it must live in the same region as the zone of the instance.
            This setting requires `external_access` to be set to True to work.
        accelerators: a list of AcceleratorConfig objects describing the accelerators that will
            be attached to the new instance.
        preemptible: boolean value indicating if the new instance should be preemptible
            or not. Preemptible VMs have been deprecated and you should now use Spot VMs.
        spot: boolean value indicating if the new instance should be a Spot VM or not.
        instance_termination_action: What action should be taken once a Spot VM is terminated.
            Possible values: "STOP", "DELETE"
        custom_hostname: Custom hostname of the new VM instance.
            Custom hostnames must conform to RFC 1035 requirements for valid hostnames.
        delete_protection: boolean value indicating if the new virtual machine should be
            protected against deletion or not.
    Returns:
        Instance object.
    """
    instance_client = compute_v1.InstancesClient()

    # Use the network interface provided in the network_link argument.
    network_interface = compute_v1.NetworkInterface()
    network_interface.network = network_link
    if subnetwork_link:
        network_interface.subnetwork = subnetwork_link

    if internal_ip:
        network_interface.network_i_p = internal_ip

    if external_access:
        access = compute_v1.AccessConfig()
        access.type_ = compute_v1.AccessConfig.Type.ONE_TO_ONE_NAT.name
        access.name = "External NAT"
        access.network_tier = access.NetworkTier.PREMIUM.name
        if external_ipv4:
            access.nat_i_p = external_ipv4
        network_interface.access_configs = [access]

    # Collect information into the Instance object.
    instance = compute_v1.Instance()
    instance.network_interfaces = [network_interface]
    instance.name = instance_name
    instance.disks = disks
    if re.match(r"^zones/[a-z\d\-]+/machineTypes/[a-z\d\-]+$", machine_type):
        instance.machine_type = machine_type
    else:
        instance.machine_type = f"zones/{zone}/machineTypes/{machine_type}"

    instance.scheduling = compute_v1.Scheduling()
    if accelerators:
        instance.guest_accelerators = accelerators
        instance.scheduling.on_host_maintenance = (
            compute_v1.Scheduling.OnHostMaintenance.TERMINATE.name
        )

    if preemptible:
        # Set the preemptible setting
        warnings.warn(
            "Preemptible VMs are being replaced by Spot VMs.", DeprecationWarning
        )
        instance.scheduling = compute_v1.Scheduling()
        instance.scheduling.preemptible = True

    if spot:
        # Set the Spot VM setting
        instance.scheduling.provisioning_model = (
            compute_v1.Scheduling.ProvisioningModel.SPOT.name
        )
        instance.scheduling.instance_termination_action = instance_termination_action

    if custom_hostname is not None:
        # Set the custom hostname for the instance
        instance.hostname = custom_hostname

    if delete_protection:
        # Set the delete protection bit
        instance.deletion_protection = True

    # Prepare the request to insert an instance.
    request = compute_v1.InsertInstanceRequest()
    request.zone = zone
    request.project = project_id
    request.instance_resource = instance

    # Wait for the create operation to complete.
    print(f"Creating the {instance_name} instance in {zone}...")

    operation = instance_client.insert(request=request)

    wait_for_extended_operation(operation, "instance creation")

    print(f"Instance {instance_name} created.")
    return instance_client.get(project=project_id, zone=zone, instance=instance_name)


def create_with_additional_disk(
    project_id: str, zone: str, instance_name: str
) -> compute_v1.Instance:
    """
    Create a new VM instance with Debian 10 operating system on a 20 GB disk
    and a 25 GB additional empty disk.

    Args:
        project_id: project ID or project number of the Cloud project you want to use.
        zone: name of the zone to create the instance in. For example: "us-west3-b"
        instance_name: name of the new virtual machine (VM) instance.

    Returns:
        Instance object.
    """
    newest_debian = get_image_from_family(project="debian-cloud", family="debian-12")
    disk_type = f"zones/{zone}/diskTypes/pd-standard"
    disks = [
        disk_from_image(disk_type, 20, True, newest_debian.self_link),
        empty_disk(disk_type, 25),
    ]
    instance = create_instance(project_id, zone, instance_name, disks)
    return instance

REST

אפשר ליצור עד 127 דיסקים שהם לא דיסקים לאתחול כשיוצרים מכונה, באמצעות המאפיין initializeParams לכל דיסק נוסף. ליצור דיסקים נוספים עם קובץ אימג' ציבורי או פרטי. כדי להוסיף דיסק ריק, מגדירים את הרשומה initializeParams בלי ערך sourceImage. כדי ליצור דיסקים אזוריים במקום דיסקים מקומיים, צריך לכלול את מאפיין הדיסק replicaZones.

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

{
   "machineType":"zones/MACHINE_TYPE_ZONE/machineTypes/MACHINE_TYPE",
   "name":"VM_NAME",
   
   "disks":[
      {
         "initializeParams":{
            "sourceImage":"projects/IMAGE_PROJECT/global/images/IMAGE"
         },
         "boot":true
      },
      {
         "initializeParams":{
            "diskSizeGb":"SIZE_GB",
            "sourceImage":"projects/DISK_IMAGE_PROJECT/global/images/DISK_IMAGE",
            "diskType":"DISK_TYPE"
         }
      },
      {
         "initializeParams":{
            "diskSizeGb":"SIZE_GB",
            "diskType":"DISK_TYPE"
         },
      },
      {
         "boot": false,
         "deviceName":"DISK_NAME",
         "initializeParams": {
            "diskType": "DISK_TYPE",
            "replicaZones": [
               "projects/PROJECT_ID/zones/ZONE",
               "projects/PROJECT_ID/zones/REMOTE_ZONE"
            ]
         }
      }
   ],
   
   
   "networkInterfaces":[
      {
         "network":"global/networks/NETWORK_NAME"
      }
   ],
   
  
   "shieldedInstanceConfig":{
      "enableSecureBoot":"ENABLE_SECURE_BOOT"
   }
}

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

  • ‫PROJECT_ID: מזהה הפרויקט שבו יוצרים את המכונה הווירטואלית
  • ‫ZONE: האזור שבו יוצרים את המכונה הווירטואלית
  • ‫MACHINE_TYPE_ZONE: האזור שבו נמצא סוג המכונה שרוצים להשתמש בו בשביל המכונה הווירטואלית החדשה
  • ‫MACHINE_TYPE: סוג המכונה, מוגדר מראש או בהתאמה אישית, של המכונה הווירטואלית החדשה
  • ‫VM_NAME: השם של המכונה הווירטואלית החדשה
  • ‫IMAGE_PROJECT: הפרויקט שמכיל את קובץ האימג'
    . לדוגמה, אם מציינים את debian-12 בתור משפחת קובצי האימג', צריך לציין את debian-cloud בתור פרויקט קובץ האימג'.
  • ‫IMAGE: מציינים אחת מהאפשרויות הבאות:
    • ‫IMAGE: גרסה ספציפית של קובץ אימג' ציבורי

      לדוגמה, "sourceImage": "projects/debian-cloud/global/images/debian-12-bookworm-v20241112"

    • ‫IMAGE_FAMILY: משפחת קובצי אימג'

      כשמציינים משפחת קובצי אימג', המכונה הווירטואלית נוצרת מקובץ האימג' העדכני ביותר של מערכת ההפעלה, שלא הוצא משימוש. לדוגמה, אם מציינים את הערך "sourceImage": "projects/debian-cloud/global/images/family/debian-12", ‏Compute Engine יוצרת מכונה וירטואלית מהגרסה העדכנית של קובץ האימג' של מערכת ההפעלה במשפחת קובצי האימג' של Debian 12.

  • לדיסקים נוספים, מחליפים את הערכים הבאים:

    • ‫SIZE_GB: גודל הדיסק
    • DISK_IMAGE או
    • ‫DISK_IMAGE_FAMILY: מציינים את קובץ האימג' של המקור או את משפחת קובצי האימג' של הדיסק שאינו דיסק אתחול:
      • ‫DISK_IMAGE: שם קובץ האימג' שבו רוצים להשתמש כדיסק שאינו דיסק אתחול. לדוגמה, "sourceImage": "projects/DISK_IMAGE_PROJECT/global/images/DISK_IMAGE".
      • ‫DISK_IMAGE_FAMILY: משפחת תמונות לשימוש כדיסק שאינו דיסק אתחול. לדוגמה, "sourceImage": "projects/DISK_IMAGE_PROJECT/global/images/family/DISK_IMAGE_FAMILY".
    • ‫DISK_TYPE: כתובת URL מלאה או חלקית של type של סוג הדיסק. לדוגמה, https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/diskTypes/hyperdisk-balanced. סוג המכונה חייב לתמוך בסוג הדיסק.
    • ‫DISK_NAME: אופציונלי. שם הדיסק שמוצג למערכת ההפעלה של האורח אחרי שנוצרה המכונה הווירטואלית.
    • ‫REMOTE_ZONE: האזור שאליו רוצים לשכפל את הדיסק האזורי

    בדיסקים ריקים, אל תציינו את המאפיין sourceImage.

    בדיסקי אחסון מקומי, אל תציינו את המאפיין replicaZones.

  • ‫NETWORK_NAME: רשת ה-VPC שבה רוצים להשתמש בשביל ה-VM. אפשר לציין את הערך default כדי להשתמש ברשת ברירת המחדל.
  • ‫ENABLE_SECURE_BOOT: אופציונלי: אם בחרתם תמונה שתומכת בתכונות של מכונה וירטואלית מוגנת, כברירת מחדל Compute Engine מפעיל את מודול הפלטפורמה המהימנה הווירטואלית (vTPM) ואת מעקב התקינות. כברירת מחדל, Compute Engine לא מפעיל את Secure Boot.

    אם מציינים את הערך true בשדה enableSecureBoot, המערכת של Compute Engine יוצרת מכונה וירטואלית שבה מופעלות כל שלוש התכונות של מכונה וירטואלית מוגנת. אחרי ש-Compute Engine מפעיל את ה-VM, כדי לשנות את האפשרויות של המכונה הווירטואלית המוגנת צריך לעצור את ה-VM.

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