Google Cloud 上に Windows VM を作成するには、Windows または Windows Server がプリインストールされている VM イメージを使用する必要があります。Google Cloud では、一般的に使用されているバージョンの Windows Server 用の公開イメージを提供しています。ただし、これらが適しているのは、オンデマンド ライセンスに限られます。お客様所有の Windows ライセンス(BYOL)を使用するには、既存のイメージをインポートするか、カスタム イメージをビルドする必要があります。
このガイドでは、Google Cloud が公開イメージの作成に使用するのと同じツールとプロセスを使用してカスタム イメージを作成する方法を説明します。
このガイドを完了するには、次のものが必要です。
- Windows または Windows Server のインストール メディアを含む ISO ファイル。
- (省略可)イメージに適用する 1 つ以上の Windows 更新パッケージ(
.msu
形式)。
始める前に
- このガイドのコマンドラインの例を使用する場合は、次の操作を行います。
- Google Cloud CLI の最新バージョンをインストールするか、最新バージョンに更新します。
- デフォルトのリージョンとゾーンを設定します。
- このガイドの API の例を使用する場合は、API アクセスを設定します。
ビルドプロセスを理解する
Windows をゼロからインストールするには、Windows インストール ファイルを含む DVD または ISO ファイルからコンピュータを起動するのが一般的な方法です。一部のオンプレミス ハイパーバイザとは異なり、Compute Engine では ISO ファイルからは起動できません。
したがって、Windows をゼロからインストールするには別のアプローチを採用する必要があります。それには以下の手順が含まれます。
- 新しいディスクを作成する。
- Windows イメージ(インストール メディアからの
install.wim
)をディスクに抽出する。 - 必要なドライバを追加して、Windows セットアップがそのまま動作するように構成し、ディスクを起動可能にする。
- 新しいディスクから起動して Windows セットアップを実行する。
- ゲスト OS エージェントなどの追加ソフトウェアをインストールする。
- ディスクからイメージを作成する。
このガイドでは、これらの手順を手動で行うのではなく、Cloud Build、daisy
ツール、GitHub で公開されている参照ワークフローを使用してプロセスを自動化する方法を説明します。
daisy
はオープンソースのコマンドライン ツールで、ワークフローを実行できます。ワークフローは、一連の手順が記述された JSON ファイルとして作成されます。各ステップでは、ディスクの作成や VM インスタンスのシャットダウンなど、Compute Engine の操作について説明します。daisy ワークフローは、Windows イメージをゼロからビルドするのに必要な手順の自動化に適しています。
Windows のカスタム イメージをビルドするための daisy ワークフローにより、2 つの一時的な VM インスタンスが作成されます。最初の VM インスタンス(接頭辞 bootstrap
)は、起動可能なディスクの作成に必要な手順を行います。2 番目の VM インスタンス(接頭辞 install
)は、Windows セットアップを実行して、残りのすべての手順を行います。
イメージをビルドするためのプロジェクトを準備する
既存の VM インスタンスまたはインフラストラクチャに daisy ツールが干渉しないようにするため、イメージビルド専用のプロジェクトを作成します。
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
- Compute Engine API、Cloud Build API、Cloud Storage API を有効にします。
次の手順は、ローカル コンピュータで Windows と Linux のいずれを使用しているかによって異なります。
Windows
- ローカル コンピュータで Windows PowerShell ウィンドウを開きます。
変数を初期化します。
$PROJECT_ID = "
PROJECT_ID
"PROJECT_ID
は、前のセクションで作成した Cloud プロジェクトのプロジェクト ID です。別の変数を初期化して、このプロジェクトのプロジェクト番号を格納します。
$PROJECT_NUMBER = gcloud projects describe $PROJECT_ID --format=value`(projectNumber`)
RDP と SSH のアクセスに関するデフォルトのファイアウォール ルールを無効にします。
gcloud compute firewall-rules update default-allow-rdp --project $PROJECT_ID --disabled gcloud compute firewall-rules update default-allow-ssh --project $PROJECT_ID --disabled
Cloud Build でイメージのビルドに必要な一時的な VM インスタンスを作成できるように、Compute インスタンス管理者とサービス アカウント ユーザーのロールを Cloud Build に付与します。
gcloud projects add-iam-policy-binding $PROJECT_ID ` --member serviceAccount:$PROJECT_NUMBER@cloudbuild.gserviceaccount.com ` --role roles/compute.instanceAdmin.v1 gcloud projects add-iam-policy-binding $PROJECT_ID ` --member serviceAccount:$PROJECT_NUMBER@cloudbuild.gserviceaccount.com ` --role roles/iam.serviceAccountUser
Linux
- ローカル コンピュータでターミナル ウィンドウを開きます。
変数を初期化します。
PROJECT_ID=
PROJECT_ID
PROJECT_ID
は、前のセクションで作成した Cloud プロジェクトのプロジェクト ID です。別の変数を初期化して、このプロジェクトのプロジェクト番号を格納します。
PROJECT_NUMBER=`gcloud projects describe $PROJECT_ID --format=value\(projectNumber\)`
RDP と SSH のアクセスに関するデフォルトのファイアウォール ルールを無効にします。
gcloud compute firewall-rules update default-allow-rdp --project $PROJECT_ID --disabled gcloud compute firewall-rules update default-allow-ssh --project $PROJECT_ID --disabled
Cloud Build でイメージのビルドに必要な一時的な VM インスタンスを作成できるように、Compute インスタンス管理者とサービス アカウント ユーザーのロールを Cloud Build に付与します。
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$PROJECT_NUMBER@cloudbuild.gserviceaccount.com \ --role roles/compute.instanceAdmin.v1 gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$PROJECT_NUMBER@cloudbuild.gserviceaccount.com \ --role roles/iam.serviceAccountUser
インストール ファイルをアップロードする
カスタム イメージに必要なすべてのインストール ファイルを収集して、Cloud Storage バケットにアップロードします。ファイルを Cloud Storage バケットに格納することで、daisy
、および daisy
がイメージのビルドに使用する一時的な VM インスタンスがファイルにアクセスできるようになります。
ローカル コンピュータで、必要なインストール パッケージをダウンロードします。
インストール ファイルを格納する新しい Cloud Storage バケットを作成します。
gsutil mb -p $PROJECT_ID gs://$PROJECT_ID-media
Storage オブジェクト閲覧者のロールを Cloud Storage に付与して、インストール ファイルの読み取りを行えるようにします。
gsutil iam ch serviceAccount:$PROJECT_NUMBER@cloudbuild.gserviceaccount.com:objectViewer gs://$PROJECT_ID-media
PowerShell インストール パッケージをアップロードします。
gsutil cp
POWERSHELL_PACKAGE
gs://$PROJECT_ID-media/PowerShell.msiここで、
POWERSHELL_PACKAGE
は PowerShell インストール パッケージのパスです。.NET Framework インストール パッケージをアップロードします。
gsutil cp
DOTNET_PACKAGE
gs://$PROJECT_ID-media/dotnet-sdk.exeここで、
DOTNET_PACKAGE
は、NET Framework インストール パッケージのパスです。gcloud CLI インストール パッケージをアップロードします。
gsutil cp
CLOUDSDK_PACKAGE
gs://$PROJECT_ID-media/GoogleCloudSDKInstaller.exeここで、
CLOUDSDK_PACKAGE
は gcloud CLI インストール パッケージのパスです。Windows インストール メディアを含む ISO ファイルをアップロードします。
gsutil cp
ISO
gs://$PROJECT_ID-media/ここで、
ISO
は ISO ファイルの名前です。(省略可)追加のアップデート パッケージをアップロードします。
gsutil cp
UPDATE_DIR
/*.msu gs://$PROJECT_ID-media/updates/ここで、
UPDATE_DIR
はアップデート パッケージを含むディレクトリです。
これで、カスタム イメージをビルドする準備が整いました。
イメージをビルドする
daisy
ワークフローを実行してカスタム イメージをビルドするには、最大 4 時間ほどかかります。daisy
をローカルで実行するのではなく、Cloud Build がバックグラウンドでワークフローを実行できるようにするために Cloud Build の構成を作成します。
ローカル コンピュータで、Windows イメージをビルドするための
daisy
ワークフローを含む Git リポジトリのクローンを作成します。git clone https://github.com/GoogleCloudPlatform/compute-image-tools.git
windows
ディレクトリに切り替えます。cd compute-image-tools/daisy_workflows/image_build/windows/
windows
ディレクトリで、.wf.json
というサフィックスが付いたさまざまなファイルの一覧を確認できます。これらのファイルには、一般的に使用される Windows のバージョンに対する daisy ワークフロー定義が含まれています。Windows のバージョン ワークフロー ファイル Windows Server 2019(64 ビット) windows-server-2019-dc-uefi-byol.wf.json
Windows Server Core 2019(64 ビット) windows-server-2019-dc-core-uefi-byol.wf.json
Windows Server 2016(64 ビット) windows-server-2016-dc-uefi-byol.wf.json
Windows Server Core 2016(64 ビット) windows-server-2016-dc-core-uefi-byol.wf.json
Windows 10(64 ビット) windows-10-20h2-ent-x64-uefi-byol.wf.json
インストールする Windows のバージョンに最も近いワークフロー ファイルを開きます。必要に応じて、ワークフロー ファイル内の Windows エディション(
edition
)とライセンスキー(product_key
)の設定を変更して、インストール メディアと一致させます。正しいエディション名がわからない場合は、昇格した PowerShell プロンプトを開き、次のコマンドを実行すると、対象のインストール メディアでサポートされているすべてのエディションが一覧表示されます。
$IsoFile = "
ISO
" $Mount = Mount-DiskImage -ImagePath (Resolve-Path $IsoFile) $DriveLetter = ($Mount | Get-Volume).DriveLetter Get-WindowsImage -ImagePath "$($DriveLetter):\sources\install.wim" | select ImageName Dismount-DiskImage -InputObject $Mount | Out-NullISO
は、ISO イメージのローカルパスに置き換えます。windows
ディレクトリに、cloudbuild.yaml
という名前のファイルを新しく作成して、次のコードを貼り付けます。timeout: 14400s # 4 hour timeout for entire build steps: - name: 'gcr.io/compute-image-tools/daisy' timeout: 14400s # 4 hour timeout for build step args: - -project=$PROJECT_ID - -zone=us-central1-a - -var:updates=gs://$PROJECT_ID-media/updates/ - -var:pwsh=gs://$PROJECT_ID-media/PowerShell.msi - -var:dotnet48=gs://$PROJECT_ID-media/dotnet-sdk.exe - -var:cloudsdk=gs://$PROJECT_ID-media/GoogleCloudSDKInstaller.exe - -var:media=gs://$PROJECT_ID-media/
ISO
-WORKFLOW
以下のように置き換えます。
ISO
: Cloud Storage 上の ISO ファイルの名前。WORKFLOW
: 使用している Windows のバージョンに対応するワークフロー ファイルの名前。
Cloud Build にビルドを送信します。
gcloud builds submit --project $PROJECT_ID --async
ビルドが完了するまでに最大で 4 時間ほどかかります。Google Cloud Console の [Cloud Build] > [履歴] でビルドのステータスを追跡できます。
カスタム イメージを使用する
ビルドが完了したら、Google Cloud コンソール の [Compute Engine] > [イメージ] で BYOL のカスタム イメージを確認できます。
同じイメージの複数のバージョンを区別できるように、ビルドプロセス時に、イメージ名にタイムスタンプが埋め込まれます(例: windows-server-2019-dc-v1613488342
)。また、このプロセス時に、イメージとカスタム イメージ ファミリー(windows-server-2019
など)が関連付けられます。
BYOL のカスタム イメージを使用する VM インスタンスを作成するには、単一テナントノードに VM インスタンスをプロビジョニングする必要があります。
トラブルシューティング
ビルドプロセスが失敗した、または停止していると思われる場合は、次の方法で状況を診断してください。
- 適切なインストール パッケージと ISO ファイルをアップロードしたことを確認します。
- Windows の ISO ファイルのバージョンと一致するワークフローが選択されていることを確認します。
- Cloud Build のビルドログを確認し、エラー メッセージがあるかどうか確認します。
- ビルドが停止していると思われる場合は、ビルドによって作成された VM インスタンスのシリアルポート出力を確認し、エラー メッセージをチェックします。
次のステップ
- daisy ツールの詳細を確認する。
- イメージを作成するためのデイジー ワークフローについて学ぶ。
- Compute Engine で既存のライセンスを使用する方法を学習する。
- イメージ ファミリーの使用に関するベスト プラクティスを読む。