カスタム Windows BYOL イメージを作成する


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 のサービスと API にアクセスするために ID を確認するプロセスです。ローカル開発環境からコードまたはサンプルを実行するには、次のいずれかのオプションを選択して Compute Engine に対する認証を行います。

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.

ビルドプロセスについて

Windows をゼロからインストールするには、Windows インストール ファイルを含む DVD または ISO ファイルからコンピュータを起動するのが一般的な方法です。一部のオンプレミス ハイパーバイザとは異なり、Compute Engine では ISO ファイルからは起動できません。

したがって、Windows をゼロからインストールするには別のアプローチを採用する必要があります。それには以下の手順が含まれます。

  1. 新しいディスクを作成する。
  2. Windows イメージ(インストール メディアからの install.wim)をディスクに抽出する。
  3. 必要なドライバを追加して、Windows セットアップがそのまま動作するように構成し、ディスクを起動可能にする。
  4. 新しいディスクから起動して Windows セットアップを実行する。
  5. ゲスト OS エージェントなどの追加ソフトウェアをインストールする。
  6. ディスクからイメージを作成する。

このガイドでは、これらの手順を手動で行うのではなく、Cloud Builddaisy ツール、GitHub で公開されている参照ワークフローを使用してプロセスを自動化する方法を説明します。

daisyオープンソースのコマンドライン ツールで、ワークフローを実行できます。ワークフローは、一連の手順が記述された JSON ファイルとして作成されます。各ステップでは、ディスクの作成や VM インスタンスのシャットダウンなど、Compute Engine の操作について説明します。daisy ワークフローは、Windows イメージをゼロからビルドするのに必要な手順の自動化に適しています。

Windows のカスタム イメージをビルドするための daisy ワークフローにより、2 つの一時的な VM インスタンスが作成されます。最初の VM インスタンス(接頭辞 bootstrap)は、起動可能なディスクの作成に必要な手順を行います。2 番目の VM インスタンス(接頭辞 install)は、Windows セットアップを実行して、残りのすべての手順を行います。

イメージのビルド用にプロジェクトを準備する

既存の VM インスタンスまたはインフラストラクチャに daisy ツールが干渉しないようにするため、イメージビルド専用のプロジェクトを作成します。

  1. 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.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Compute Engine API, Cloud Build API, and Cloud Storage API APIs.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the Compute Engine API, Cloud Build API, and Cloud Storage API APIs.

    Enable the APIs

次の手順は、ローカル コンピュータで Windows と Linux のいずれを使用しているかによって異なります。

Windows

  1. ローカル コンピュータで Windows PowerShell ウィンドウを開きます。
  2. 変数を初期化します。

    $PROJECT_ID = "PROJECT_ID"
    

    PROJECT_ID は、前のセクションで作成した Google Cloud プロジェクトのプロジェクト ID です。

  3. 別の変数を初期化して、このプロジェクトのプロジェクト番号を格納します。

    $PROJECT_NUMBER = gcloud projects describe $PROJECT_ID --format=value`(projectNumber`)
    

Linux

  1. ローカル コンピュータでターミナル ウィンドウを開きます。
  2. 変数を初期化します。

    PROJECT_ID=PROJECT_ID
    

    PROJECT_ID は、前のセクションで作成した Google Cloud プロジェクトのプロジェクト ID です。

  3. 別の変数を初期化して、このプロジェクトのプロジェクト番号を格納します。

    PROJECT_NUMBER=`gcloud projects describe $PROJECT_ID --format=value\(projectNumber\)`
    

インストール ファイルをアップロードする

カスタム イメージに必要なすべてのインストール ファイルを収集して、Cloud Storage バケットにアップロードします。ファイルを Cloud Storage バケットに格納することで、daisy、および daisy がイメージのビルドに使用する一時的な VM インスタンスがファイルにアクセスできるようになります。

  1. ローカル コンピュータで、必要なインストール パッケージをダウンロードします。

  2. インストール ファイルを格納する新しい Cloud Storage バケットを作成します。

    gcloud storage buckets create gs://$PROJECT_ID-media --project=$PROJECT_ID
    
  3. Storage オブジェクト閲覧者のロールを Cloud Storage に付与して、インストール ファイルの読み取りを行えるようにします。

    gcloud storage buckets add-iam-policy-binding gs://$PROJECT_ID-media --member=serviceAccount:$PROJECT_NUMBER@cloudbuild.gserviceaccount.com --role=roles/storage.objectViewer
    
  4. PowerShell インストール パッケージをアップロードします。

    gcloud storage cp POWERSHELL_PACKAGE gs://$PROJECT_ID-media/PowerShell.msi
    

    ここで、POWERSHELL_PACKAGE は PowerShell インストール パッケージのパスです。

  5. .NET Framework インストール パッケージをアップロードします。

    gcloud storage cp DOTNET_PACKAGE gs://$PROJECT_ID-media/dotnet-sdk.exe
    

    ここで、DOTNET_PACKAGE は、NET Framework インストール パッケージのパスです。

  6. gcloud CLI インストール パッケージをアップロードします。

    gcloud storage cp CLOUDSDK_PACKAGE gs://$PROJECT_ID-media/GoogleCloudSDKInstaller.exe
    

    ここで、CLOUDSDK_PACKAGE は gcloud CLI インストール パッケージのパスです。

  7. Windows インストール メディアを含む ISO ファイルをアップロードします。

    gcloud storage cp ISO gs://$PROJECT_ID-media/
    

    ここで、ISO は ISO ファイルの名前です。

  8. (省略可)追加のアップデート パッケージをアップロードします。

    gcloud storage cp UPDATE_DIR/*.msu gs://$PROJECT_ID-media/updates/
    

    ここで、UPDATE_DIR はアップデート パッケージを含むディレクトリです。

これで、カスタム イメージをビルドする準備が整いました。

イメージをビルドする

daisy ワークフローを実行してカスタム イメージをビルドするには、最大 4 時間ほどかかります。daisy をローカルで実行するのではなく、Cloud Build がバックグラウンドでワークフローを実行できるようにするために Cloud Build の構成を作成します。

  1. ローカル コンピュータで、Windows イメージをビルドするための daisy ワークフローを含む Git リポジトリのクローンを作成します。

    git clone https://github.com/GoogleCloudPlatform/compute-image-tools.git
    
  2. windows ディレクトリに切り替えます。

    cd compute-image-tools/daisy_workflows/image_build/windows/
    
  3. windows ディレクトリで、.wf.json というサフィックスが付いたさまざまなファイルの一覧を確認できます。これらのファイルには、一般的に使用される Windows のバージョンに対する daisy ワークフロー定義が含まれています。

    Windows のバージョン ワークフロー ファイル
    Windows Server Core 2022(64 ビット) windows-server-2022-dc-core-uefi-byol.wf.json
    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 11 21H2(64 ビット) windows-11-21h2-ent-x64-uefi.wf.json
    Windows 11 22H2(64 ビット) windows-11-22h2-ent-x64-uefi.wf.json
    Windows 11 23H2(64 ビット) windows-11-23h2-ent-x64-uefi.wf.json
    Windows 10 21H2(64 ビット) windows-10-21h2-ent-x64-uefi.wf.json
    Windows 10 22H2(64 ビット) windows-10-22h2-ent-x64-uefi.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-Null
    

    ISO は、ISO イメージのローカルパスに置き換えます。

  4. 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
      waitFor: ['-']
      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 のバージョンに対応するワークフロー ファイルの名前。
  5. Cloud Build にビルドを送信します。

    gcloud builds submit --project $PROJECT_ID --async
    

    ビルドが完了するまでに最大で 4 時間ほどかかります。Google Cloud コンソールの [Cloud Build] > [履歴] でビルドのステータスを追跡できます。

    Cloud Build 履歴

カスタム イメージを使用する

ビルドが完了したら、Google Cloud コンソール の [Compute Engine] > [イメージ] で BYOL のカスタム イメージを確認できます。

同じイメージの複数のバージョンを区別できるように、ビルドプロセス時に、イメージ名にタイムスタンプが埋め込まれます(例: windows-server-2019-dc-v1613488342)。また、このプロセス時に、イメージとカスタム イメージ ファミリーwindows-server-2019 など)が関連付けられます。

BYOL のカスタム イメージを使用する VM インスタンスを作成するには、単一テナントノードに VM インスタンスをプロビジョニングする必要があります。

トラブルシューティング

ビルドプロセスが失敗した、または停止していると思われる場合は、次の方法で状況を診断してください。

  • 適切なインストール パッケージと ISO ファイルをアップロードしたことを確認します。
  • Windows の ISO ファイルのバージョンと一致するワークフローが選択されていることを確認します。
  • Cloud Build のビルドログを確認し、エラー メッセージがあるかどうか確認します。
  • ビルドが停止していると思われる場合は、ビルドによって作成された VM インスタンスのシリアルポート出力を確認し、エラー メッセージをチェックします。

次のステップ