ייצוא תמונה בהתאמה אישית ל-Cloud Storage

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

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

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

יצירה ושימוש חוזר בתמונות בהתאמה אישית.
איור 1. דוגמאות ליצירה ולשימוש חוזר בתמונות בהתאמה אישית

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

  • קוראים את הדף תמונות.
  • אם בפרויקט שממנו רוצים לייצא את התמונה מוגדרת מדיניות של תמונות מהימנות, צריך להוסיף את projects/compute-image-import ואת projects/compute-image-tools לרשימת המפרסמים המורשים.
  • כדי לדעת איך לעמוד בדרישות לפני ייצוא תמונות, אפשר לעיין במאמר דרישות מוקדמות לייבוא ולייצוא של תמונות VM.
  • אם עדיין לא עשיתם את זה, תצטרכו להגדיר אימות. אימות הוא תהליך שבו מאמתים את הזהות שלכם כדי לקבל גישה לממשקי 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 .

מגבלות

ההגבלות הבאות חלות על תהליך ייצוא התמונות.

מגבלות כלליות

אי אפשר לייצא תמונות ציבוריות שסופקו על ידי Google. אפשר לייצא רק תמונות שיצרתם או ייבאתם בעבר.

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

נוצרת קטגוריה של Cloud Storage בשם ${PROJECT}-daisy-bkt-${REGION} בשביל משאבים זמניים שנוצרו במהלך תהליך הייצוא באותו אזור או במספר אזורים כמו קטגוריית היעד. כדי לנהל את מחזור החיים של המשאבים האלה, אפשר לעיין במאמר בנושא ניהול מחזור החיים של אובייקטים.

תהליך הייצוא משתמש ב-Cloud Build כדי לייצא תמונה. סשן של Cloud Build נמשך עד 24 שעות. אם התמונה גדולה מאוד וייצוא שלה יימשך יותר מ-24 שעות, אפשר לייצא אותה באופן ידני.

מגבלות של VPC Service Controls

בפרויקטים שמוגנים באמצעות VPC Service Controls, אפשר להשתמש באחת מהשיטות הבאות:

  • מייצאים מאותו פרויקט שבו נמצאת התמונה. הערה: צריך להוסיף כלל ליציאה לפרויקט compute-image-import (מספר 71462206840). כדי לפעול לפי העיקרון של מתן ההרשאות המינימליות, מומלץ לאפשר רק את השירות artifactregistry.googleapis.com עם השיטות הבאות: artifactregistry.repositories.downloadArtifacts,‏ artifactregistry.tags.get,‏ artifactregistry.tags.list ו-artifactregistry.versions.get.

  • מייצאים את התמונה באופן ידני.

ייצוא תמונה באמצעות פקודה אחת

ייצוא תמונה ל-Cloud Storage

אפשר לייצא את התמונות באמצעות Google Cloud המסוף, Google Cloud CLI או REST.

המסוף

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

    כניסה לדף Images

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

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

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

  5. לוחצים על עיון כדי לבחור את המיקום ב-Cloud Storage שאליו רוצים לייצא את התמונה.

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

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

  8. אחרי שבוחרים Cloud Storage ומזינים שם קובץ לתמונה, לוחצים על Select.

  9. בדף ייצוא תמונה, לוחצים על ייצוא. אחרי שבוחרים באפשרות ייצוא, במסוף Google Cloud מוצג היסטוריית ייצוא התמונות, שבו אפשר לראות את תהליך ייצוא התמונות. כדי לראות פרטים נוספים על תהליך ייצוא התמונה, לוחצים על Cloud Build ID כדי לעבור לדף Image export details, שבו אפשר לראות ולהוריד את יומן ייצוא התמונה.

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

    לאחסון

gcloud

הדרך המומלצת לייצא תמונה ל-Cloud Storage היא באמצעות הפקודה gcloud compute images export. בפקודה הזו נעשה שימוש ב-Daisy כדי לשרשר את השלבים הרבים שנדרשים לייצוא תמונה.

הפקודה gcloud compute images export מניחה שכבר יצרתם תמונה – למשל, באמצעות הפקודה gcloud compute images create.

מריצים את הפקודה הבאה ב-Google Cloud CLI:

gcloud compute images export \
    --destination-uri DESTINATION_URI \
    --image IMAGE_NAME

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

  • DESTINATION_URI: ה-URI של יעד Cloud Storage לקובץ התמונה המיוצא.
  • IMAGE_NAME: השם של תמונת הדיסק לייצוא.

כברירת מחדל, התמונות מיוצאות בפורמט Compute Engine, שהוא קובץ disk.raw שדחוס ב-tar ו-gzip. כדי לייצא תמונות בפורמטים אחרים שנתמכים בכלי QEMU disk image, אפשר להשתמש בדגל --export-format. הפורמטים התקפים כוללים vmdk,‏ vhdx,‏ vpc,‏ vdi ו-qcow2.

דוגמה

לדוגמה, הפקודה הבאה מייצאת תמונה בשם my-image מ-my-project לקטגוריה ב-Cloud Storage בשם my-bucket. כברירת מחדל, התמונה מיוצאת כקובץ disk.raw file ונדחסת לפורמט הקובץ tar.gz.

gcloud compute images export \
    --destination-uri gs://my-bucket/my-image.tar.gz \
    --image my-image \
    --project my-project

למידע על סימונים, אפשר לעיין במאמרי העזרה בנושא gcloud compute images export.

REST

שליחת בקשת POST ל-Cloud Build API.

POST https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/builds
{
  "timeout": "7200s",
  "steps":[
    {
      "args":[
        "-timeout=7000s",
        "-source_image=SOURCE_IMAGE",
        "-client_id=api",
        "-format=IMAGE_FORMAT",
        "-destination_uri=DESTINATION_URI"
      ],
      "name":"gcr.io/compute-image-tools/gce_vm_image_export:release",
      "env":[
        "BUILD_ID=$BUILD_ID"
      ]
    }
  ],
  "tags":[
    "gce-daisy",
    "gce-daisy-image-export"
  ]
}

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

  • PROJECT_ID: מזהה הפרויקט שמכיל את התמונה שרוצים לייצא.
  • SOURCE_IMAGE: השם של התמונה לייצוא.
  • IMAGE_FORMAT: הפורמט של התמונה המיוצאת. פורמטים תקינים כוללים vmdk,‏ vhdx,‏ vpc,‏ vdi ו-qcow2.
  • DESTINATION_URI: מיקום ה-URI ב-Cloud Storage שאליו רוצים לייצא את קובץ התמונה. לדוגמה, gs://my-bucket/my-exported-image.vmdk.

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

דוגמה לתשובה

הדוגמה הבאה לתגובה דומה לפלט שמוחזר:

{
"name": "operations/build/myproject-12345/operation-1578608233418",
"metadata": {
 "@type": "type.googleapis.com/google.devtools.cloudbuild.v1.BuildOperationMetadata",
 "build": {
  "id": "3a2055bc-ccbd-4101-9434-d376b88b8940",
  "status": "QUEUED",
  "createTime": "2019-10-02T18:59:13.393492020Z",
  "steps": [
   {
    "name": "gcr.io/compute-image-tools/gce_vm_image_export:release",
    "env": [
     "BUILD_ID=3a2055bc-ccbd-4101-9434-d376b88b8940"
    ],
    "args": [
     "-timeout=7056s",
     "-source_image=my-image",
     "-client_id=api",
     "-format=vmdk",
     "-destination_uri=gs://my-bucket/my-exported-image.vmdk"
    ]
   }
  ],
  "timeout": "7200s",
  "projectId": "myproject-12345",
  "logsBucket": "gs://123456.cloudbuild-logs.googleusercontent.com",
  "options": {
   "logging": "LEGACY"
  },
  "logUrl": "https://console.cloud.google.com/cloud-build/builds/3a2055bc-ccbd-4101-9434-d376b88b8940?project=123456"
 }
 }

יש כמה דרכים לעקוב אחרי הבנייה:

  • מריצים בקשת projects.builds.get באמצעות build-id שהוחזר.
  • בודקים את היומנים שמתארחים בכתובת logUrl שסופקה.

ייצוא תמונה מפרויקט באמצעות חשבון שירות מותאם אישית של Compute Engine

במהלך ייצוא תמונה, נוצרת מכונה וירטואלית (VM) זמנית בפרויקט. צריך לאמת את כלי ייצוא התמונות במכונה הווירטואלית הזמנית הזו.

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

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

אפשר לייצא את התמונות באמצעות Google Cloud CLI או REST.

gcloud

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

    לפחות, צריך להקצות לחשבון השירות שצוין ב-Compute Engine את התפקידים הבאים:

    • roles/compute.storageAdmin
    • roles/storage.objectAdmin
    • roles/storage.admin

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

  2. משתמשים בפקודה gcloud compute images export כדי לייצא את התמונה.

    gcloud compute images export \
        --destination-uri DESTINATION_URI \
        --image IMAGE_NAME \
        --compute-service-account SERVICE_ACCOUNT_EMAIL

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

    • DESTINATION_URI: ה-URI של יעד Cloud Storage לקובץ התמונה המיוצא.
    • IMAGE_NAME: השם של תמונת הדיסק לייצוא.
    • SERVICE_ACCOUNT_EMAIL: כתובת האימייל שמשויכת לחשבון השירות של Compute Engine שנוצר בשלב הקודם.

דוגמה

לדוגמה, הפקודה הבאה מייצאת תמונה בשם my-image מ-my-project לקטגוריה של Cloud Storage בשם my-bucket באמצעות חשבון שירות עם כתובת האימייל image-export-service-account@proj-12345.iam.gserviceaccount.com. כברירת מחדל, התמונה מיוצאת כקובץ disk.raw ונדחסת לפורמט הקובץ tar.gz.

gcloud compute images export \
    --destination-uri gs://my-bucket/my-image.tar.gz \
    --image my-image \
    --project my-project \
    --compute-service-account image-export-service-account@proj-12345.iam.gserviceaccount.com
    

למידע על סימונים, אפשר לעיין במאמרי העזרה בנושא gcloud compute images export.

REST

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

    לפחות, צריך להקצות לחשבון השירות שצוין ב-Compute Engine את התפקידים הבאים:

    • roles/compute.storageAdmin
    • roles/storage.objectAdmin
    • roles/storage.admin

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

  2. ב-API, יוצרים בקשת POST ל-Cloud Build API.

    POST https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/builds
    {
      "timeout": "7200s",
      "steps":[
        {
          "args":[
            "-timeout=7000s",
            "-source_image=SOURCE_IMAGE",
            "-client_id=api",
            "-format=IMAGE_FORMAT",
            "-destination_uri=DESTINATION_URI",
            "-compute_service_account=SERVICE_ACCOUNT_EMAIL"
          ],
          "name":"gcr.io/compute-image-tools/gce_vm_image_export:release",
          "env":[
            "BUILD_ID=$BUILD_ID"
          ]
        }
      ],
      "tags":[
        "gce-daisy",
        "gce-daisy-image-export"
      ]
    }
    

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

    • PROJECT_ID: מזהה הפרויקט שמכיל את התמונה שרוצים לייצא.
    • SOURCE_IMAGE: השם של התמונה לייצוא.
    • IMAGE_FORMAT: הפורמט של התמונה המיוצאת. הפורמטים התקפים כוללים vmdk,‏ vhdx,‏ vpc,‏ vdi ו-qcow2.
    • DESTINATION_URI: מיקום ה-URI ב-Cloud Storage שאליו רוצים לייצא את קובץ התמונה. לדוגמה, gs://my-bucket/my-exported-image.vmdk.
    • SERVICE_ACCOUNT_EMAIL: כתובת האימייל שמשויכת לחשבון השירות של Compute Engine שנוצר בשלב הקודם.

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

ייצוא תמונה באמצעות VPC משותף

לפני שמייצאים תמונה שמשתמשת ב-VPC משותף, צריך להוסיף את התפקיד compute.networkUser לחשבון השירות של Cloud Build בפרויקט שממנו מייצאים תמונות. חשבון השירות שמשמש את Cloud Build תלוי בשאלה אם השתמשתם ב-Cloud Build בפרויקט לפני מאי 2024. אם כן, חשבון השירות של Cloud Build מדור קודם ישמש לבנייה עתידית. אחרת, נעשה שימוש בחשבון השירות שמוגדר כברירת מחדל של Compute Engine.

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

אפשר לייצא את התמונה באמצעות Google Cloud CLI או REST.

gcloud

משתמשים בפקודה gcloud compute images export כדי לייצא את התמונה.

gcloud compute images export \
    --image IMAGE_NAME \
    --destination-uri DESTINATION_URI \
    --project PROJECT_ID \
    --network NETWORK \
    --subnet SUBNET \
    --zone ZONE

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

  • IMAGE_NAME: השם של התמונה לייצוא.
  • DESTINATION_URI: מיקום ה-URI ב-Cloud Storage שאליו רוצים לייצא את קובץ התמונה.
  • PROJECT_ID: מזהה הפרויקט שבו נמצאת התמונה.
  • NETWORK: הנתיב המלא אל רשת VPC משותפת. לדוגמה: projects/HOST_PROJECT_ID/global/networks/VPC_NETWORK_NAME.
  • SUBNET: אופציונלי. הנתיב המלא לרשת משנה של VPC משותף. לדוגמה: projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME.

    הגדרת המצב הזה תלויה במצב רשת ה-VPC.

    • אם רשת ה-VPC משתמשת במצב מדור קודם, אל תציינו רשת משנה.
    • אם רשת ה-VPC פועלת במצב אוטומטי, אפשר לא לציין את תת-הרשת.
    • אם רשת ה-VPC משתמשת במצב מותאם אישית, צריך לציין את השדה הזה.
  • ZONE: אופציונלי. האזור שבו רוצים להשתמש לייצוא. האזור הזה חייב להיות זהה לאזור של רשת המשנה. לדוגמה, אם SUBNET נמצא באזור us-west1, אזור הייצוא חייב להיות אחד מהאפשרויות הבאות: us-west1-a, ‏ us-west1-b או us-west1-c.

    אם ציינתם SUBNET, אתם צריכים לציין גם את האזור.

לדוגמה, הפקודה הבאה מייצאת תמונה בשם example-image מ-my-project לקטגוריה ב-Cloud Storage בשם my-bucket. בדוגמה הזו, רשת הענן הווירטואלי הפרטי (my-shared-vp) משתמשת ברשת משנה בהתאמה אישית (my-custom-subnet). כברירת מחדל, התמונה מיוצאת כקובץ disk.raw והיא דחוסה בפורמט הקובץ tar.gz.

פקודה לדוגמה

gcloud compute images export \
    --image example-image \
    --destination-uri gs://my-bucket/my-image.tar.gz \
    --project my-project \
    --network projects/my-vpc-project/global/networks/my-shared-vpc \
    --subnet projects/my-vpc-project/regions/us-west1/subnetworks/my-custom-subnet \
    --zone us-west1-c
 

REST

  1. מוסיפים את התמונה ל-Cloud Storage.

  2. ב-API, יוצרים בקשת POST ל-Cloud Build API.

    POST https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/builds
    {
      "timeout": "7200s",
      "steps":[
        {
          "args":[
            "-timeout=7000s",
            "-source_image=SOURCE_IMAGE",
            "-client_id=api",
            "-format=IMAGE_FORMAT",
            "-destination_uri=DESTINATION_URI",
            "-network=NETWORK",
            "-subnet=SUBNET",
            "-zone=ZONE"
          ],
          "name":"gcr.io/compute-image-tools/gce_vm_image_export:release",
          "env":[
            "BUILD_ID=$BUILD_ID"
          ]
        }
      ],
      "tags":[
        "gce-daisy",
        "gce-daisy-image-export"
      ]
    }
    

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

    • PROJECT_ID: מזהה הפרויקט שמכיל את התמונה שרוצים לייצא.
    • SOURCE_IMAGE: השם של התמונה לייצוא.
    • IMAGE_FORMAT: הפורמט של התמונה המיוצאת. הפורמטים התקפים כוללים vmdk,‏ vhdx,‏ vpc,‏ vdi ו-qcow2.
    • DESTINATION_URI: מיקום ה-URI ב-Cloud Storage שאליו רוצים לייצא את קובץ התמונה. לדוגמה, gs://my-bucket/my-exported-image.vmdk.
    • NETWORK: הנתיב המלא לרשת VPC משותפת. לדוגמה: projects/HOST_PROJECT_ID/global/networks/VPC_NETWORK_NAME.
    • SUBNET: הנתיב המלא אל רשת משנה משותפת של VPC. לדוגמה: projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME.

      הגדרת המצב הזה תלויה במצב של רשת ה-VPC.

      • אם רשת ה-VPC משתמשת במצב מדור קודם, אל תציינו רשת משנה.
      • אם רשת ה-VPC פועלת במצב אוטומטי, אפשר לא לציין את רשת המשנה.
      • אם רשת ה-VPC משתמשת במצב מותאם אישית, צריך לציין את השדה הזה.
    • ZONE: האזור שבו רוצים להשתמש לייצוא. האזור הזה חייב להיות זהה לאזור של רשת המשנה. לדוגמה, אם SUBNET נמצא באזור us-west1, אזור הייצוא חייב להיות אחד מהאפשרויות הבאות: us-west1-a, ‏ us-west1-b או us-west1-c.

      ברוב המקרים, ציון אזור הוא אופציונלי. אם מציינים את SUBNET, צריך לציין את אזור הזמן.

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

יצירה וייצוא של תמונה באופן ידני

אם הפקודות gcloud compute images create ו-gcloud compute images export לא מתאימות לצרכים שלכם, אתם יכולים ליצור ולייצא תמונה באופן ידני ממכונה של Compute Engine. התהליך הזה כולל שלבים נפרדים ליצירת תמונה ואז לייצוא שלה.

בדוגמה הבאה, שימו לב שהדיסק שנוצר נקרא image-disk.

כדי ליצור ולייצא תמונה:

  1. אופציונלי: עוצרים את המופע שאליו מצורף הדיסק לפני שיוצרים את ה-snapshot. הפסקת המכונה מבטיחה את תקינות התוכן בדיסק בתמונת המצב.

  2. יוצרים קובץ snapshot של הדיסק. נותנים לתמונת המצב את השם image-snapshot.

    gcloud compute disks snapshot DISK_NAME \
        --snapshot-names image-snapshot

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

  3. כדי ליצור דיסק חדש בשם image-disk באמצעות ה-snapshot image-snapshot, מריצים את הפקודה הבאה:

    gcloud compute disks create image-disk \
        --source-snapshot image-snapshot
  4. יוצרים דיסק זמני בשם temporary-disk כדי לאחסן את הקובץ tar, ומציינים את SIZE של הדיסק כך שיהיה גדול ב-50% לפחות מדיסק התמונה.

    אחר כך אפשר לנתק את הדיסק ולמחוק אותו.

    gcloud compute disks create temporary-disk \
        --size SIZE

    SIZE הוא הגודל, בגיגה-בייט או בטרה-בייט, של הדיסק הזמני. לדוגמה, מציינים 100GB כדי ליצור דיסק בנפח 100 גיגה-בייט.

  5. יוצרים מכונה ומפעילים את ההיקף storage-rw במכונה. בנוסף, צריך לצרף את image-disk ואת temporary-disk למופע כדיסקים משניים עם מאפייני device-name ספציפיים. מחליפים את VM_NAME בשם המכונה שרוצים ליצור.

    gcloud compute instances create VM_NAME \
        --scopes storage-rw \
        --disk name=image-disk,device-name=image-disk \
        --disk name=temporary-disk,device-name=temporary-disk

    שימו לב שאתם מעבירים היקפי הרשאות של חשבון שירות כדי שתוכלו להעלות את הקובץ ל-Cloud Storage בשלבים הבאים.

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

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

    gcloud compute ssh VM_NAME
  7. מפרמטים את הדיסק הזמני ומעלים אותו. פירמוט הדיסק מוחק את התוכן של הדיסק הזמני.

    sudo mkdir /mnt/tmp
    sudo mkfs.ext4 -F /dev/disk/by-id/google-temporary-disk
    sudo mount -o discard,defaults /dev/disk/by-id/google-temporary-disk /mnt/tmp
  8. אופציונלי: מעלים את דיסק התמונה ומבצעים שינויים נוספים לפני שיוצרים את הקובץ tar. לדוגמה, יכול להיות שתרצו למחוק קבצים קיימים מהספרייה /home אם אתם לא רוצים שהם יהיו חלק מהתמונה. מבצעים Mount למחיצות בדיסק שרוצים לשנות, משנים את הקבצים בדיסק שרוצים לשנות, ואז מבטלים את ה-Mount של הדיסק כשמסיימים.

    1. יוצרים ספרייה שאליה אפשר לטעון את הדיסק או המחיצה.

      sudo mkdir /mnt/image-disk
    2. משתמשים בפקודה ls כדי לקבוע איזה דיסק או מחיצת דיסק צריך לטעון.

      ls /dev/disk/by-id/

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

      google-image-disk
      google-image-disk-part1
      
    3. מפעילים את הכונן או המחיצה. אם בדיסק יש טבלת מחיצות, צריך לטעון את המחיצות הנפרדות של הדיסק. לדוגמה, mount google-image-disk-part1.

      sudo mount /dev/disk/by-id/google-image-disk-part1 /mnt/image-disk

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

      sudo mount /dev/disk/by-id/google-image-disk /mnt/image-disk
    4. משנים את הקבצים בספרייה /mnt/image-disk כדי להגדיר את הקבצים בדיסק. לדוגמה, אפשר להסיר את הקובץ /mnt/image-disk/home/[USER]/.ssh/authorized_keys כדי למנוע שיתוף של מפתחות ה-SSH.

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

      sudo umount /mnt/image-disk/
  9. יוצרים קובץ tar של התמונה.

    אחרי שמסיימים להתאים אישית את הקבצים בדיסק התמונה, יוצרים קובץ דיסק raw בדיסק הזמני. השם של תמונת הדיסק הגולמית חייב להיות disk.raw:

     sudo dd if=/dev/disk/by-id/google-image-disk of=/mnt/tmp/disk.raw bs=4096

    לאחר מכן יוצרים את קובץ tar.gz:

    cd /mnt/tmp

    sudo tar czvf myimage.tar.gz disk.raw

    הפקודה הזו יוצרת תמונה של המופע במיקום הבא:

    /mnt/tmp/myimage.tar.gz

  10. מעלים את התמונה ל-Cloud Storage.

    כדי להעלות את הקובץ tar ל-Cloud Storage, משתמשים ב-Google Cloud CLI שמותקן מראש במופע.

    1. יוצרים מאגר באמצעות ה-CLI של gcloud.

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

      me@example-instance:~$ 
      gcloud storage buckets create gs://BUCKET_NAME
    2. מעתיקים את הקובץ לקטגוריה החדשה. מחליפים את BUCKET_NAME בשם הקטגוריה שאליה רוצים להעתיק את הקובץ.

      me@example-instance:~$ 
      gcloud storage cp /mnt/tmp/myimage.tar.gz gs://BUCKET_NAME

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

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