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

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

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

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

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

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

    המסוף

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

    gcloud

    1. התקינו את ה-CLI של Google Cloud ואז היכנסו ל-CLI של gcloud באמצעות הזהות המאוחדת שלכם. אחרי שנכנסתם לחשבון, אתחלו את ה-CLI של Google Cloud באמצעות הפקודה הבאה:

      gcloud init
  • הגדרת אזור ותחום כברירת מחדל
  • REST

    כדי להשתמש בסביבת פיתוח מקומית בדוגמאות של API בארכיטקטורת REST שבדף הזה, צריך להשתמש בפרטי הכניסה שאתם נותנים ל-CLI של gcloud.

      התקינו את ה-CLI של Google Cloud ואז היכנסו ל-CLI של gcloud באמצעות הזהות המאוחדת שלכם.

    מידע נוסף מופיע במאמר אימות לשימוש ב-REST במסמכי האימות של Cloud de Confiance .

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

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

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

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

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

  • compute.instances.create בפרויקט
  • כדי ליצור דיסק עבור המכונה: compute.disks.create בפרויקט
  • כדי ליצור דיסק מאימג': compute.images.useReadOnly באימג' המקור
  • כדי ליצור דיסק מ-snapshot רגיל או מקובץ snapshot של ארכיון: compute.snapshots.useReadOnly ב-snapshot המקור
  • כדי ליצור דיסק מקובץ snapshot מואץ, אם דיסק המקור של קובץ ה-snapshot המואץ הוא דיסק האתחול של מכונה שמצורף אליה חשבון שירות: iam.serviceAccounts.actAs בחשבון השירות של המכונה
  • כדי ליצור דיסק מקובץ snapshot מיידי: compute.instantSnapshots.useReadOnly בקובץ ה-snapshot המיידי של המקור
  • כדי ליצור דיסק מדיסק קיים: compute.disks.useReadOnly בדיסק המקור

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

מגבלות

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

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

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

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

מגבלות על גודל הדיסק ושמות הפניה

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

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

סוג הדיסק שם לצורך סימוכין גודל מינימלי גודל מקסימלי ברירת מחדל של גודל
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 אזורי: ‎10 GiB
אזורי: ‎10 GiB
‫64 TiB ‫100 GiB
דיסק אחסון מתמיד (persistent disk) שמבוסס על ביצועים (SSD) pd-ssd אזורי: ‎10 GiB
אזורי: ‎10 GiB
‫64 TiB ‫100 GiB
Standard Persistent Disk pd-standard אזורי: 10 GiB
אזורי: 200 GiB
‫64 TiB ‫500 GiB
אחסון מתמיד (persistent disk) קיצוני pd-extreme ‫500 GiB ‫64 TiB ‫1 TiB
‫1 תצוגה מקדימה: ב-C4 יש תמיכה בגודל דיסק מקסימלי של 128 TiB. כדי לקבל גישה לתכונה הזו, אפשר לפנות אל hyperdisk-questions@google.com.

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

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

המסוף

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

    כניסה לדף Create an instance

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

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

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

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

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

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

      • מטרה כללית
      • אופטימיזציה של מחשוב
      • מותאם לצריכת זיכרון גבוהה
      • אופטימיזציה של האחסון
      • GPUs
      • TPUs

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

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

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

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

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

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

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

      1. ברשימה Operating system בוחרים את סוג מערכת ההפעלה.
      2. ברשימה Version בוחרים את גרסת מערכת ההפעלה.
      3. ברשימה Boot disk type בוחרים את סוג דיסק האתחול.
      4. בשדה Size (GB) מציינים את גודל דיסק האתחול.
    • כדי לבחור תמונה מותאמת אישית כמקור הנתונים לדיסק האתחול, לוחצים על תמונות מותאמות אישית ואז, בכרטיסייה תמונות מותאמות אישית שמופיעה, מציינים את הפרטים הבאים:

      1. כדי לבחור את פרויקט התמונה, לוחצים על שינוי ואז בוחרים את הפרויקט שמכיל את התמונה.
      2. ברשימה Image, בוחרים את התמונה שרוצים לייבא.
      3. ברשימה Boot disk type בוחרים את סוג דיסק האתחול.
      4. בשדה Size (GB) מציינים את גודל דיסק האתחול.
    • כדי לבחור תמונת מצב רגילה כמקור הנתונים לדיסק האתחול, לוחצים על תמונות מצב ואז, בכרטיסייה תמונות מצב שמופיעה, מציינים את הפרטים הבאים:

      1. ברשימה Snapshot, בוחרים את התמונה.
      2. ברשימה Boot disk type בוחרים את סוג דיסק האתחול.
      3. בשדה Size (GB) מציינים את גודל דיסק האתחול.
    • כדי לבחור קובץ snapshot של ארכיון כמקור הנתונים לדיסק האתחול, לוחצים על קובצי snapshot של ארכיון ואז, בכרטיסייה קובצי snapshot של ארכיון שמופיעה, מציינים את הפרטים הבאים:

      1. ברשימה קובץ snapshot של ארכיון, בוחרים את קובץ ה-snapshot של הארכיון.
      2. ברשימה Boot disk type בוחרים את סוג דיסק האתחול.
      3. בשדה Size (GB) מציינים את גודל דיסק האתחול.
    • כדי לבחור דיסק קיים כדיסק האתחול, לוחצים על דיסקים קיימים. לאחר מכן, בכרטיסייה Existing disks שמופיעה, בוחרים נפח קיים של אחסון מתמיד אזורי או של Hyperdisk Balanced High Availability ברשימה Disk.

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

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

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

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

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

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

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

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

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

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

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

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

      • Hyperdisk Balanced. אפשר לשנות את הגודל של הדיסק, את ה-IOPS שהוקצה ואת התפוקה שהוקצתה.
      • Hyperdisk Extreme. אפשר לשנות את הגודל ואת ה-IOPS שהוקצו של הדיסק.
      • Hyperdisk ML. אפשר לשנות את הגודל ואת התפוקה שהוקצתה של הדיסק.
      • קצב העברת נתונים (Throughput) של Hyperdisk.אפשר לשנות את הגודל של הדיסק ואת קצב העברת הנתונים שהוקצה.
    8. אופציונלי: כדי לראות אפשרויות מתקדמות להגדרה, מרחיבים את הקטע הצגת הגדרות מתקדמות.

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

    9. כדי לאשר את האפשרויות ולחזור לחלונית מערכת הפעלה ואחסון, לוחצים על שמירה.

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

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

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

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

  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 de Confiance , מפעילים את Cloud Shell.

    הפעלת Cloud Shell

    בחלק התחתון של Cloud de Confiance המסוף יתחיל סשן של 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 במסוף Cloud de Confiance .
  1. נכנסים לדף VM instances במסוף Cloud de Confiance .

    כניסה לדף VM Instances

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

המשך

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

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

לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.

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. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.


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 11 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-11");
      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. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.

/**
 * 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. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.

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.

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: name של המכונה הווירטואלית החדשה
  • IMAGE_PROJECT: הפרויקט שמכיל את התמונה
    . לדוגמה, אם מציינים debian-10 כמשפחת התמונות, מציינים debian-cloud כפרויקט התמונות.
  • IMAGE: מציינים אחת מהאפשרויות הבאות:
    • IMAGE: גרסה ספציפית של תמונה ציבורית

      לדוגמה, "sourceImage": "projects/debian-cloud/global/images/debian-10-buster-v20200309"

    • IMAGE_FAMILY: משפחת תמונות

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

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

    • 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 מלאה או חלקית של הסוג של סוג הדיסק. לדוגמה, https://www.s3nsapis.fr/compute/v1/projects/PROJECT_ID/zones/ZONE/diskTypes/hyperdisk-balanced. סוג המכונה צריך לתמוך בסוג הדיסק.
    • DISK_NAME: אופציונלי. שם הדיסק שמוצג למערכת ההפעלה של האורח אחרי יצירת המכונה הווירטואלית.
    • REMOTE_ZONE: האזור שאליו רוצים לשכפל את הדיסק האזורי

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

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

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

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

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