Windows アプリケーションのインストール メディアの多くは ISO ファイルとして提供されていますが、Compute Engine では、仮想 DVD ドライブとして ISO ファイルを VM インスタンスに公開することはできません。
1 台の Windows VM で ISO ファイルのコンテンツにアクセスするには、次のいずれかの操作を行います。
ISO ファイルを VM にコピーし、ローカルにマウントします。この方法は、1 つの VM インスタンスで ISO ファイルのコンテンツにアクセスする必要がある場合に適しています。
ISO ファイルから永続ディスクを作成し、このディスクを読み取り専用モードで 1 つ以上の VM インスタンスに接続します。この方法は、複数の VM が ISO ファイルのコンテンツにアクセスする必要がある場合に適しています。
このドキュメントでは、ISO ファイルから永続ディスクを作成し、ディスクを読み取り専用モードで 1 つ以上の VM にアタッチする方法について説明します。
始める前に
- このガイドのコマンドラインの例を使用する場合は、次の操作を行います。
- Google Cloud CLI の最新バージョンをインストールするか、最新バージョンに更新します。
- デフォルトのリージョンとゾーンを設定します。
ISO ファイルを準備する
ISO ファイルが HTTP 経由で一般公開されている場合は、あらかじめ ISO ファイルをダウンロードしておく必要はありません。ローカルの ISO ファイルを使用する場合は、ISO ファイルを Cloud Storage にアップロードします。
HTTP URL
Google Cloud Console で、[Cloud Shell をアクティブにする] ボタンをクリックして、Cloud Shell を開きます。
ダウンロード URL の環境変数を作成します。URL には HTTP または HTTPS の URL を指定できますが、匿名でアクセスできる必要があります。
ISO_URL=https://example.com/big.iso
ローカル ISO ファイル
Google Cloud コンソールで、Cloud Storage バケットを作成します。
Google Cloud コンソールまたは
gsutil
を使用して ISO ファイルをアップロードします。ISO ファイルのサイズによっては、アップロードに数分または数時間かかることがあります。
ストレージ ブラウザで、アップロードしたオブジェクトに移動します。
[オブジェクトの詳細] ページで、オブジェクトの URI をコピーします。URI は
gs://
で始まります。[Cloud Shell をアクティブにする] ボタンをクリックして、Cloud Shell を開きます。
ダウンロード URL の環境変数を作成します。
URI
は、コピーした URI で置き換えます。ISO_URL=URI
ISO ファイルのコンテンツを含むディスクの作成
ISO ファイルのコンテンツを新しいディスクにコピーするには、一時的な VM を作成し、ディスクからイメージを作成します。
Cloud Shell で、新しいディスクに割り当てる名前を指定します。
DISK_NAME=iso
ISO ファイルのコピー先となる新しいディスクを作成します。
gcloud compute disks create $DISK_NAME \ --size=10GB \ --zone=$(gcloud config get-value compute/zone)
ISO ファイルが 9 GB を超える場合は、より大きなディスクサイズを使用します。
一時的な VM に起動スクリプトを作成します。起動スクリプトによって次のアクションが実行されます。
- セカンダリ ディスクを NTFS ファイル システムでフォーマットします。
- 指定した HTTP または Cloud Storage の URL から ISO ファイルをダウンロードします。
- 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:')) { & gsutil 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 Core を実行する VM を作成し、セカンダリ ディスクを接続します。
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
VM の起動には 2 分ほどかかります。ISO ファイルのサイズによっては、ファイルのコピーが完了するまでにさらに 5~15 分かかることがあります。進行状況を確認するには、次のコマンドを実行します。
gcloud compute instances tail-serial-port-output iso-copier \ --zone=$(gcloud config get-value compute/zone)
VM が起動スクリプトの実行を完了するまで待ちます。
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
VM をシャットダウンして削除します。
gcloud compute instances delete iso-copier \ --zone=$(gcloud config get-value compute/zone) \ --quiet
セカンダリ ディスクは
auto-delete=no
パラメータでマウントされているため削除されません。
これでディスクを使用できるようになりました。同じゾーン内の 1 つ以上の VM インスタンスに読み取り専用モードでディスクを接続できます。
イメージを作成してゾーンとリージョン間でディスクを共有する
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
次のステップ
カスタム イメージの作成、削除、使用中止の方法を確認する。
カスタム イメージへのアクセスを管理する方法を確認する。
Compute Engine での Windows ワークロードについて確認する。