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

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

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

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

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

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

מגבלות והגבלות

המגבלות הבאות חלות על תהליך הייצוא של קובצי אימג'.

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

אי אפשר לייצא תמונות ציבוריות שסופקו על ידי 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. בדף פרטי התמונה, לוחצים על Export כדי לפתוח את הדף Export Image.

  4. בדף Export image, בוחרים את הפורמט של קובץ התמונה ב-Export format.

  5. לוחצים על Browse ובוחרים את המיקום ב-Cloud Storage שאליו רוצים לייצא את קובץ האימג'.

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

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

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

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

  10. נכנסים לדף Storage כדי לגשת לתמונה שיוצאה.

    לאחסון

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, אפשר להשתמש בדגל --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-import/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 של ייצוא קובץ אימג' של VM.

דוגמה לתשובה

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

{
"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-import/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"
 }
 }

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

  • מריצים בקשת 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.. כברירת מחדל, התמונה מיוצאת כקובץ 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.
    

למידע על דגלים, עיינו במאמרי העזרה של 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-import/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 של ייצוא קובץ אימג' של VM.

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

לפני שאתם מייצאים קובץ אימג' שמשתמש ב-VPC משותף, אתם צריכים להוסיף את התפקיד compute.networkUser לחשבון השירות של Cloud Build בפרויקט שממנו אתם מייצאים קובצי אימג'. חשבון השירות שמשמש ל-Cloud Build תלוי בשאלה אם השתמשתם ב-Cloud Build בפרויקט לפני מאי 2024. אם כן, חשבון השירות הקודם של Cloud Build משמש ל-builds עתידיים. אחרת, המערכת משתמשת בחשבון השירות שמוגדר כברירת מחדל ב-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-import/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 של ייצוא קובץ אימג' של VM.

יצירה וייצוא של קובץ אימג' באופן ידני

אם הפקודות 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-snapshot כדי ליצור דיסק חדש בשם image-disk באמצעות הפקודה הבאה:

    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 כדי ליצור דיסק בנפח 100GB.

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

    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. מגדירים את הדיסק או המחיצה. אם לדיסק יש טבלת מחיצות, צריך לטעון את המחיצות הנפרדות של הדיסק. לדוגמה, טעינת google-image-disk-part1.

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

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

    אחרי שמסיימים להתאים אישית את הקבצים בדיסק של קובץ האימג', יוצרים קובץ דיסק גולמי בדיסק הזמני. השם של קובץ האימג' הגולמי של הדיסק חייב להיות 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 .

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