אמצעי ההתקנה של אפליקציות ל-Windows מסופקים לעיתים קרובות כקובץ ISO, אבל Compute Engine לא מאפשר לחשוף קובץ ISO ככונן DVD וירטואלי למופע של מכונה וירטואלית.
כדי לגשת לתוכן של קובץ ה-ISO במכונת VM אחת של Windows, אפשר לבצע אחת מהפעולות הבאות:
מעתיקים את קובץ ה-ISO למכונה הווירטואלית ומפעילים אותו באופן מקומי. הגישה הזו מתאימה אם אתם צריכים לגשת לתוכן של קובץ ה-ISO רק במכונה וירטואלית אחת.
יוצרים Persistent Disk מקובץ ה-ISO ומצרפים את הדיסק במצב קריאה בלבד למכונה וירטואלית אחת או יותר. הגישה הזו מתאימה אם לכמה מכונות וירטואליות נדרשת גישה לתוכן של קובץ ה-ISO.
במאמר הזה נסביר איך ליצור Persistent Disk מקובץ ISO ולצרף את הדיסק במצב קריאה בלבד למכונה וירטואלית אחת או יותר.
לפני שמתחילים
-
אם עדיין לא עשיתם את זה, תצטרכו להגדיר אימות.
אימות הוא התהליך שבו מאמתים את הזהות שלכם כדי לקבל גישה לממשקי API ולשירותים של Cloud de Confiance by S3NS . כדי להריץ קוד או דוגמאות מסביבת פיתוח מקומית, אפשר לבצע אימות ל-Compute Engine באחת מהדרכים הבאות:
צריך לבחור את הכרטיסייה הרלוונטית לאופן שבו תכננתם להשתמש בדוגמאות בדף הזה:
המסוף
כשמשתמשים במסוף Cloud de Confiance כדי לגשת לשירותים Cloud de Confiance by S3NS ולממשקי ה-API, לא צריך להגדיר אימות.
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 יכולה להיות כתובת URL מסוג HTTP או כתובת URL מסוג HTTPS, אבל חייבת להיות אליה גישה אנונימית.
ISO_URL=https://example.com/big.iso
קובץ ISO מקומי
במסוף Cloud de Confiance , יוצרים קטגוריה של Cloud Storage.
-
ההעלאה יכולה להימשך כמה דקות או כמה שעות, בהתאם לגודל קובץ ה-ISO.
ב-Storage browser, עוברים לאובייקט שהועלה.
בדף 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 גדול מ-9GB, צריך להשתמש בדיסק גדול יותר.
יוצרים סקריפט לטעינה בזמן ההפעלה של המכונה הווירטואלית הזמנית. הסקריפט לטעינה בזמן ההפעלה מבצע את הפעולות הבאות:
- מפרמטים את הכונן המשני באמצעות מערכת הקבצים NTFS.
- מורידים את קובץ ה-ISO מכתובת ה-URL של ה-HTTP או של Cloud Storage שציינתם.
- מבצעים Mount לקובץ ה-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יוצרים מכונה וירטואלית של 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