מדיה להתקנה של אפליקציות ל-Windows מסופקת לעיתים קרובות כקובץ ISO, אבל Compute Engine לא מאפשר לחשוף קובץ ISO ככונן DVD וירטואלי למופע של מכונה וירטואלית.
כדי לגשת לתוכן של קובץ ISO במכונה וירטואלית אחת של Windows, אפשר לבצע אחת מהפעולות הבאות:
מעתיקים את קובץ ה-ISO למכונה הווירטואלית ומטמיעים אותו באופן מקומי. הגישה הזו מתאימה אם אתם צריכים לגשת לתוכן של קובץ ה-ISO רק במכונה וירטואלית אחת.
יוצרים דיסק אחסון מתמיד (persistent disk) מקובץ ה-ISO ומצרפים את הדיסק במצב קריאה-בלבד למכונה וירטואלית אחת או יותר. הגישה הזו מתאימה אם לכמה מכונות וירטואליות נדרשת גישה לתוכן של קובץ ה-ISO.
במאמר הזה נסביר איך ליצור Persistent Disk מקובץ ISO ולצרף את הדיסק במצב קריאה בלבד למכונה וירטואלית אחת או יותר.
לפני שמתחילים
-
אם עדיין לא עשיתם את זה, תצטרכו להגדיר אימות.
אימות הוא תהליך שבו מאמתים את הזהות שלכם כדי לקבל גישה לממשקי API ולשירותים של Cloud de Confiance by S3NS . כדי להריץ קוד או דוגמאות מסביבת פיתוח מקומית, אפשר לבצע אימות ל-Compute Engine באחת מהדרכים הבאות:
צריך לבחור את הכרטיסייה הרלוונטית לאופן שבו תכננתם להשתמש בדוגמאות בדף הזה:
המסוף
כשמשתמשים במסוף Cloud de Confiance כדי לגשת לשירותים ולממשקי ה-API, לא צריך להגדיר אימות. Cloud de Confiance by S3NS
gcloud
-
התקינו את ה-CLI של Google Cloud ואז היכנסו ל-CLI של gcloud באמצעות הזהות המאוחדת שלכם. אחרי שנכנסתם לחשבון, אתחלו את ה-CLI של Google Cloud באמצעות הפקודה הבאה:
gcloud init
-
- הגדרת אזור ותחום כברירת מחדל
הכנת קובץ ה-ISO
אם קובץ ה-ISO זמין לכולם דרך HTTP, לא צריך להוריד אותו קודם. כדי להשתמש בקובץ ISO מקומי, אפשר להעלות את קובץ ה-ISO ל-Cloud Storage.
כתובת URL מסוג HTTP
במסוף Cloud de Confiance , לוחצים על הלחצן Activate Cloud Shell
כדי לפתוח את Cloud Shell.
יוצרים משתנה סביבה לכתובת ה-URL להורדה. כתובת ה-URL יכולה להיות מסוג HTTP או HTTPS, אבל חייבת להיות אליה גישה אנונימית.
ISO_URL=https://example.com/big.iso
קובץ ISO מקומי
במסוף Cloud de Confiance , יוצרים קטגוריה של Cloud Storage.
-
ההעלאה יכולה להימשך כמה דקות או כמה שעות, בהתאם לגודל קובץ ה-ISO.
בדפדפן האחסון, עוברים לאובייקט שהועלה.
בדף Object details, מעתיקים את ה-URI של האובייקט. מזהה ה-URI מתחיל ב-
gs://.לוחצים על הלחצן Activate Cloud Shell
כדי לפתוח את Cloud Shell.
יוצרים משתנה סביבה לכתובת ה-URL להורדה. מחליפים את
URIבמזהה המשאבים האחיד (URI) שהעתקתם.ISO_URL=URI
יצירת דיסק שמכיל את התוכן של קובץ ה-ISO
כדי להעתיק את התוכן של קובץ ה-ISO לדיסק חדש, יוצרים מכונה וירטואלית זמנית ואז יוצרים תמונה מהדיסק:
ב-Cloud Shell, מציינים את השם שרוצים להקצות לדיסק החדש:
DISK_NAME=isoיוצרים דיסק חדש שאליו מעתיקים את התוכן של קובצי ה-ISO:
gcloud compute disks create $DISK_NAME \ --size=10GB \ --zone=$(gcloud config get-value compute/zone)
אם קובץ ה-ISO גדול מ-9 GB, צריך להשתמש בגודל דיסק גדול יותר.
יוצרים סקריפט לטעינה בזמן ההפעלה של המכונה הווירטואלית הזמנית. הסקריפט לטעינה בזמן ההפעלה מבצע את הפעולות הבאות:
- מפרמטים את הדיסק המשני באמצעות מערכת הקבצים NTFS.
- מורידים את קובץ ה-ISO מכתובת ה-URL של ה-HTTP או של Cloud Storage שציינתם.
- טוענים את קובץ ה-ISO ומעתיקים את התוכן שלו לדיסק המשני.
cat << "EOF" > startup.ps1 $DownloadDirectory = 'c:\download\' $ErrorActionPreference = 'Stop' $MetadataUrl = 'http://metadata.google.internal/computeMetadata/v1/instance' $DownloadUrl = (Invoke-RestMethod ` -Headers @{"Metadata-Flavor" = "Google"} ` -Uri "$MetadataUrl/attributes/iso") mkdir $DownloadDirectory\Source -Force Write-Host '== Formatting secondary disk... ===' -ForegroundColor Black -BackgroundColor Yellow Set-Disk -Number 1 -IsOffline $false Clear-Disk -Number 1 -RemoveData -Confirm:$false -ErrorAction SilentlyContinue Initialize-Disk -Number 1 -PartitionStyle MBR New-Partition -DiskNumber 1 -UseMaximumSize -DriveLetter D -IsActive | Format-Volume -FileSystem 'NTFS' -Confirm:$false Write-Host '== Downloading ISO... =============' -ForegroundColor Black -BackgroundColor Yellow if ($DownloadUrl.StartsWith('gs:')) { & gcloud storage cp $DownloadUrl "$DownloadDirectory\Source\image.iso" | Out-Default } else { Import-Module BitsTransfer Start-BitsTransfer -Source $DownloadUrl -Destination "$DownloadDirectory\Source\image.iso" } Write-Host '== Mounting ISO... ================' -ForegroundColor Black -BackgroundColor Yellow Mount-DiskImage -ImagePath "$DownloadDirectory\Source\image.iso" -StorageType ISO Write-Host '== Copying ISO contents... ========' -ForegroundColor Black -BackgroundColor Yellow Copy-Item 'e:\*' 'd:\' -Force -Recurse -PassThru ` | Where-Object { -Not $_.PSIsContainer } ` | Set-ItemProperty -Name IsReadOnly -Value $False Write-Host '== Completed. =====================' -ForegroundColor Black -BackgroundColor Yellow Invoke-RestMethod ` -Headers @{'Metadata-Flavor'='Google'} ` -Method PUT ` -Uri "$MetadataUrl/guest-attributes/vm/ready" ` -Body true EOFיוצרים מכונת VM של Windows Server 2019 שמשתמשת בסקריפט לטעינה בזמן ההפעלה ובדיסק שיצרתם קודם:
gcloud compute instances create iso-copier \ --machine-type=n1-standard-2 \ --image-family=windows-2019-core \ --image-project=windows-cloud \ --disk=name=$DISK_NAME,auto-delete=no \ --metadata=enable-guest-attributes=true,iso=$ISO_URL \ --metadata-from-file=windows-startup-script-ps1=startup.ps1 \ --scopes=https://www.googleapis.com/auth/devstorage.read_onlyהפעלת המכונה הווירטואלית נמשכת כ-2 דקות. בהתאם לגודל של קובץ ה-ISO, יכול להיות שיעברו עוד 5 עד 15 דקות עד שפעולת העתקת הקובץ תושלם. כדי לעקוב אחר ההתקדמות, מריצים את הפקודה הבאה:
gcloud compute instances tail-serial-port-output iso-copier \ --zone=$(gcloud config get-value compute/zone)מחכים שהמכונה הווירטואלית תסיים להריץ את הסקריפט לטעינה בזמן ההפעלה:
until gcloud compute instances get-guest-attributes iso-copier \ --zone=$(gcloud config get-value compute/zone) \ --query-path=vm/ready > /dev/null 2>&1 do sleep 5 && echo waiting for VM to finish... doneמשביתים ומוחקים את המכונה הווירטואלית:
gcloud compute instances delete iso-copier \ --zone=$(gcloud config get-value compute/zone) \ --quietשימו לב שהדיסק המשני לא נמחק כי הוא הותקן עם הפרמטר
auto-delete=no.
הדיסק מוכן לשימוש. אתם יכולים לצרף את הדיסק במצב קריאה-בלבד למכונה וירטואלית אחת או יותר באותו אזור.
שיתוף הדיסק בין אזורים ותחומים באמצעות יצירת תמונה
כדי שהתוכן של קובץ ה-ISO יהיה זמין באזורים או בתחומים אחרים, צריך ליצור תמונה של Compute Engine:
מ-Cloud Shell, יוצרים תמונה מהדיסק שיצרתם בקטע הקודם:
gcloud compute images create $DISK_NAME \ --source-disk=$DISK_NAME \ --source-disk-zone=$(gcloud config get-value compute/zone)
הסרת המשאבים
כדי להימנע מחיובים נוספים אחרי שתסיימו את התהליך הזה, תוכלו למחוק את המשאבים שיצרתם:
מוחקים את הדיסק:
gcloud compute disks delete $DISK_NAME \ --zone=$(gcloud config get-value compute/zone) \ --quietמחיקת התמונה:
gcloud compute images delete $DISK_NAME