Windows VM で起動スクリプトを使用する


起動スクリプトは、仮想マシン(VM)インスタンスの起動プロセス中にタスクを実行するファイルです。起動スクリプトは、プロジェクト内のすべての VM または単一の VM に適用できます。VM レベルのメタデータで指定された起動スクリプトは、プロジェクト レベルのメタデータで指定された起動スクリプトをオーバーライドします。また、起動スクリプトはネットワークが利用可能な場合にのみ実行されます。このドキュメントでは、Windows Server VM インスタンスで起動スクリプトを使用する方法について説明します。プロジェクト レベルの起動スクリプトを追加する方法については、gcloud compute project-info add-metadata をご覧ください。

Windows 起動スクリプトは、コマンドシェル(.cmd)、PowerShell(.ps1)、またはバッチ ファイル スクリプト(.bat)にする必要があり、適切なファイル拡張子が必要です。

このドキュメントの手順のいずれかを使用して起動スクリプトを指定すると、Compute Engine は次の処理を行います。

  1. 起動スクリプトを VM にコピーする

  2. タスク スケジューラが VM の起動時に起動スクリプトを LocalSystem アカウントとして実行する

起動スクリプトに関連するさまざまなタスクと、それぞれのタスクを実行するタイミングについては、起動スクリプトの概要ドキュメントをご覧ください。

始める前に

  • 起動スクリプトの概要を確認します。
  • VM メタデータの基本を確認します。
  • まだ設定していない場合は、認証を設定します。認証とは、Google Cloud サービスと API にアクセスするために ID を確認するプロセスです。ローカル開発環境からコードまたはサンプルを実行するには、次のように Compute Engine に対する認証を行います。

    このページのサンプルをどのように使うかに応じて、タブを選択してください。

    コンソール

    Google Cloud コンソールを使用して Google Cloud サービスと API にアクセスする場合、認証を設定する必要はありません。

    gcloud

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

      gcloud init
    2. デフォルトのリージョンとゾーンを設定します

    REST

    このページの REST API サンプルをローカル開発環境で使用するには、gcloud CLI に指定した認証情報を使用します。

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

      gcloud init

Windows 起動スクリプトのメタデータキー

起動スクリプトは、メタデータキーで指定された場所から VM に渡されます。メタデータキーは、起動スクリプトをローカルに保存するか、Cloud Storage に保存するか、VM に直接渡すかを指定します。使用するメタデータキーは、起動スクリプトのサイズやファイル形式によっても異なる場合があります。

次の表は、Windows 起動スクリプトに使用できるメタデータキーと、起動スクリプトの保存場所、サイズ、ファイル形式に基づいて使用するキーについての情報を示したものです。

メタデータキー 使用目的
sysprep-specialize-script-ps1 ローカルに保存するか、直接追加する署名なしの PowerShell スクリプトを渡します。この最大サイズは 256 KB です。
sysprep-specialize-script-cmd ローカルに保存するか、直接追加するコマンド シェル スクリプトを渡します。この最大サイズは 256 KB です。
sysprep-specialize-script-bat ローカルに保存するか、直接追加するバッチ ファイル スクリプトを渡します。この最大サイズは 256 KB です。
sysprep-specialize-script-url バッチファイル、コマンドシェル、署名付き / 署名なし PowerShell スクリプト、Cloud Storage に保存されてサイズが 256 KB を超える実行可能ファイルを渡します。
windows-startup-script-ps1 ローカルに保存するか、直接追加する署名なしの PowerShell スクリプトを渡します。この最大サイズは 256 KB です。
windows-startup-script-cmd ローカルに保存するか、直接追加するコマンド シェル スクリプトを渡します。この最大サイズは 256 KB です。
windows-startup-script-bat ローカルに保存するか、直接追加するバッチ ファイル スクリプトを渡します。この最大サイズは 256 KB です。
windows-startup-script-url バッチファイル、コマンドシェル、署名付き / 署名なし PowerShell スクリプト、Cloud Storage に保存されてサイズが 256 KB を超える実行可能ファイルを渡します。

さまざまな種類の起動スクリプトの実行順序の詳細については、GitHub の GoogleCloudPlatform/compute-image-windows リポジトリをご覧ください。

Windows 起動スクリプトの実行順序

複数の起動スクリプトを使用できます。ローカルに格納されている起動スクリプトまたは直接追加された起動スクリプトは、Cloud Storage に保存されている起動スクリプトより前に実行されます。スクリプトを含むファイルの種類も、実行順序に影響します。次の表は、メタデータキーに基づいた Windows 起動スクリプトの実行順序を示したものです。

メタデータキー 実行順序
sysprep-specialize-script-ps1 初期起動時の 1 番目
sysprep-specialize-script-cmd 初期起動時の 2 番目
sysprep-specialize-script-bat 初期起動時の 3 番目
sysprep-specialize-script-url 初期起動時の 4 番目
windows-startup-script-ps1 初期起動後の各起動時の 1 番目
windows-startup-script-cmd 初期起動後の各起動時の 2 番目
windows-startup-script-bat 初期起動後の各起動時の 3 番目
windows-startup-script-url 初期起動後の各起動時の 4 番目

Windows 起動スクリプトを直接渡す

バッチファイル、コマンドシェル、または署名なしの PowerShell 起動スクリプトの内容を Windows Server VM に直接渡します。次の手順は、署名なしの PowerShell スクリプトを渡す方法を示しています。

コンソール

Windows 起動スクリプトを新しい VM に直接渡す

  1. Google Cloud コンソールで、[インスタンスの作成] ページに移動します。

    [インスタンスの作成] に移動

  2. [ブートディスク] で [変更] を選択し、次の操作を行います。

    1. [公開イメージ] タブで、Windows Server オペレーティング システムを選択します。
    2. [選択] をクリックします。
  3. [詳細オプション] セクションを開き、次の操作を行います。

    1. [管理] セクションを開きます。
    2. [メタデータ] セクションで [項目を追加] をクリックし、[] と [] を設定します。

      • : windows-startup-script-ps1 に設定します。

        windows-startup-script で始まるメタデータキーを使用して VM に渡される起動スクリプトは、VM の初期起動後のすべての起動で実行されます。

      • : 次のスクリプトを追加します。

        # Installing IIS
        Import-Module servermanager
        Install-WindowsFeature Web-Server -IncludeAllSubFeature
        
        # Ensure the directory exists
        if (-not (Test-Path("C:\inetpub\wwwroot"))) {New-Item "C:\inetpub\wwwroot" -Type Directory}
        
        # Write the expanded string out to the file, overwriting the file if it already exists.
        "<html><body><p>Windows startup script added directly.</p></body></html>" | Out-File -FilePath C:\inetpub\wwwroot\index.html -Encoding ascii -Force
        
  4. [作成] をクリックします。

Windows 起動スクリプトを既存の VM に直接渡す

  1. Google Cloud コンソールで [VM インスタンス] ページに移動します。

    [VM インスタンス] に移動

  2. VM の [名前] をクリックします。

  3. [編集] をクリックします。

  4. [メタデータ] の下に次のように指定します。

    • key: windows-startup-script-ps1
    • value: 起動スクリプトの内容

起動スクリプトの確認

VM が起動したら、ウェブブラウザで外部 IP を表示して、起動スクリプトでウェブサイトが作成されたことを確認します。サンプル起動スクリプトが完了するまでに 10 分ほどかかることがあります。

gcloud(Bash)

Windows 起動スクリプトを新しい VM に直接渡す

起動スクリプトを作成するときに、次の gcloud compute instances create コマンドを使用して、起動スクリプトの内容を Windows Server VM に直接渡します。

gcloud compute instances create VM_NAME \
  --image-project=windows-cloud \
  --image-family=windows-2019-core \
  --metadata=windows-startup-script-ps1='Import-Module servermanager
  Install-WindowsFeature Web-Server -IncludeAllSubFeature
  "<html><body><p>Windows startup script added directly.</p></body></html>" > C:\inetpub\wwwroot\index.html'

VM_NAME は VM の名前で置き換えます。

Windows 起動スクリプトを既存の VM に直接渡す

次の gcloud compute instances add-metadata コマンドを使用して、既存の VM に起動スクリプトを直接追加します。

gcloud compute instances add-metadata VM_NAME \
  --image-project=windows-cloud \
  --image-family=windows-2019-core \
  --metadata=windows-startup-script-ps1='Import-Module servermanager
  Install-WindowsFeature Web-Server -IncludeAllSubFeature
  "<html><body><p>Windows startup script added directly.</p></body></html>" > C:\inetpub\wwwroot\index.html'

VM_NAME は VM の名前で置き換えます。

起動スクリプトの確認

VM が起動したら、ウェブブラウザで外部 IP を表示して、起動スクリプトでウェブサイトが作成されたことを確認します。サンプル起動スクリプトが完了するまでに 10 分ほどかかることがあります。

gcloud(コマンド プロンプト)

Windows 起動スクリプトを新しい VM に直接渡す

起動スクリプトを作成するときに、次の gcloud compute instances create コマンドを使用して、起動スクリプトの内容を Windows Server VM に直接渡します。

gcloud compute instances create VM_NAME ^
  --image-project=windows-cloud ^
  --image-family=windows-2019-core ^
  --metadata=windows-startup-script-ps1='Import-Module servermanager
  Install-WindowsFeature Web-Server -IncludeAllSubFeature
  "<html><body><p>Windows startup script added directly.</p></body></html>" > C:\inetpub\wwwroot\index.html'

VM_NAME は VM の名前で置き換えます。

Windows 起動スクリプトを既存の VM に直接渡す

次の gcloud compute instances add-metadata コマンドを使用して、既存の VM に起動スクリプトを直接追加します。

gcloud compute instances add-metadata VM_NAME ^
  --image-project=windows-cloud ^
  --image-family=windows-2019-core ^
  --metadata=windows-startup-script-ps1='Import-Module servermanager
  Install-WindowsFeature Web-Server -IncludeAllSubFeature
  "<html><body><p>Windows startup script added directly.</p></body></html>" > C:\inetpub\wwwroot\index.html'

VM_NAME は VM の名前で置き換えます。

起動スクリプトの確認

VM が起動したら、ウェブブラウザで外部 IP を表示して、起動スクリプトでウェブサイトが作成されたことを確認します。サンプル起動スクリプトが完了するまでに 10 分ほどかかることがあります。

gcloud(PowerShell)

Windows 起動スクリプトを新しい VM に直接渡す

起動スクリプトを作成するときに、次の gcloud compute instances create コマンドを使用して、起動スクリプトの内容を Windows Server VM に直接渡します。

gcloud compute instances create VM_NAME `
  --image-project=windows-cloud `
  --image-family=windows-2019-core `
  --metadata=windows-startup-script-ps1='Import-Module servermanager
  Install-WindowsFeature Web-Server -IncludeAllSubFeature
  "<html><body><p>Windows startup script added directly.</p></body></html>" > C:\inetpub\wwwroot\index.html'

VM_NAME は VM の名前で置き換えます。

Windows 起動スクリプトを既存の VM に直接渡す

次の gcloud compute instances add-metadata コマンドを使用して、既存の VM に起動スクリプトを直接追加します。

gcloud compute instances add-metadata VM_NAME `
  --image-project=windows-cloud `
  --image-family=windows-2019-core `
  --metadata=windows-startup-script-ps1='Import-Module servermanager
  Install-WindowsFeature Web-Server -IncludeAllSubFeature
  "<html><body><p>Windows startup script added directly.</p></body></html>" > C:\inetpub\wwwroot\index.html'

VM_NAME は VM の名前で置き換えます。

起動スクリプトの確認

VM が起動したら、ウェブブラウザで外部 IP を表示して、起動スクリプトでウェブサイトが作成されたことを確認します。サンプル起動スクリプトが完了するまでに 10 分ほどかかることがあります。

REST

Windows 起動スクリプトを新しい VM に直接渡す

起動スクリプトを作成するときに、次の instances.insert メソッドを使用して、起動スクリプトの内容を直接 Windows Server VM に渡します。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances

{
  ...
  "networkInterfaces": [
    {
      "accessConfigs": [
        {
          "type": "ONE_TO_ONE_NAT"
        }
      ]
    }
  ],
  "metadata": {
    "items": [
      {
        "key": "windows-startup-script-ps1",
        "value": "Import-Module servermanager\nInstall-WindowsFeature Web-Server -IncludeAllSubFeature\necho '<html><body><p>Windows startup script added directly.</p></body></html>' > C:\\inetpub\\wwwroot\\index.html"
      }
    ]
  },
  ...
}

次のように置き換えます。

  • PROJECT_ID: プロジェクト ID

  • ZONE: 新しい VM を作成するゾーン

Windows 起動スクリプトを既存の VM に直接渡す

  1. instances.get メソッドを使用して VM の tags.fingerprint 値を取得します。

    GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME
    

    次のように置き換えます。

    • PROJECT_ID: プロジェクト ID

    • ZONE: VM のゾーン

    • VM_NAME: VM のゾーン

  2. instances.setMetadata メソッドを呼び出して、fingerprint 値と、起動スクリプトのメタデータのキーと値を使用して、起動スクリプトを渡します。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/setMetadata
    
    {
     "fingerprint": FINGERPRINT,
     "items": [
       {
         "key": "windows-startup-script-ps1",
         "value": "Import-Module servermanager\nInstall-WindowsFeature Web-Server -IncludeAllSubFeature\necho '<html><body><p>Windows startup script added directly.</p></body></html>' > C:\\inetpub\\wwwroot\\index.html"
       }
     ],
     ...
    }
    

    次のように置き換えます。

    • PROJECT_ID: プロジェクト ID

    • ZONE: VM のゾーン

    • VM_NAME: VM のゾーン

    • FINGERPRINT: instances.get メソッドを使用して取得した tags.fingerprint

起動スクリプトの確認

VM が起動したら、ウェブブラウザで外部 IP を表示して、起動スクリプトでウェブサイトが作成されたことを確認します。サンプル起動スクリプトが完了するまでに 10 分ほどかかることがあります。

ローカル ファイルから Windows 起動スクリプトを渡す

起動スクリプトをワークステーションのローカル バッチファイル、コマンドシェル スクリプト、または署名なしの PowerShell スクリプトに保存し、ローカル ファイルの作成時に、メタデータとして VM に渡すことができます。VM に保存されているファイルを起動スクリプトとして使用することはできません。

Windows 起動スクリプトをローカル ファイルから VM に渡す前に、次の操作を行います。

  1. 起動スクリプトを保存するローカル(.ps1)ファイルを作成する。

  2. gcloud CLI から起動スクリプトへの相対パスをメモする。

  3. このファイルに次の起動スクリプトを追加する。

    # Installing IIS
    Import-Module servermanager
    Install-WindowsFeature Web-Server -IncludeAllSubFeature
    
    # Ensure the directory exists
    if (-not (Test-Path("C:\inetpub\wwwroot"))) {New-Item "C:\inetpub\wwwroot" -Type Directory}
    
    # Write the expanded string out to the file, overwriting the file if it already exists.
    "<html><body><p>Windows startup script passed from a file on your local workstation.</p></body></html>" | Out-File -FilePath C:\inetpub\wwwroot\index.html -Encoding ascii -Force
    

gcloud(Bash)

Windows 起動スクリプトをローカル ファイルから新しい VM に渡す

VM を作成し、--metadata-from-file フラグを指定した gcloud compute instances create コマンドを使用して、起動スクリプトとして使用するローカル ファイルの内容を渡します。

gcloud compute instances create VM_NAME \
  --image-project=windows-cloud \
  --image-family=windows-2019-core \
  --metadata-from-file=windows-startup-script-ps1=FILE_PATH

次のように置き換えます。

  • VM_NAME: VM の名前
  • FILE_PATH: 起動スクリプト ファイルの相対パス
Windows 起動スクリプトをローカル ファイルから既存の VM に渡す

次の gcloud compute instances add-metadata コマンドを使用して、ローカル ファイルから既存の VM に起動スクリプトを渡します。

gcloud compute instances add-metadata VM_NAME \
  --metadata-from-file=windows-startup-script-ps1=FILE_PATH

次のように置き換えます。

  • VM_NAME: VM の名前
  • FILE_PATH: 起動スクリプト ファイルの相対パス
起動スクリプトの確認

ウェブブラウザで外部 IP を表示して、起動スクリプトによってウェブサイトが作成されたことを確認します。サンプル起動スクリプトが完了するまでに 10 分ほどかかることがあります。

gcloud(コマンド プロンプト)

Windows 起動スクリプトをローカル ファイルから新しい VM に渡す

VM を作成し、--metadata-from-file フラグを指定した gcloud compute instances create コマンドを使用して、起動スクリプトとして使用するローカル ファイルの内容を渡します。

gcloud compute instances create VM_NAME ^
  --image-project=windows-cloud ^
  --image-family=windows-2019-core ^
  --metadata-from-file=windows-startup-script-ps1=FILE_PATH

次のように置き換えます。

  • VM_NAME: VM の名前
  • FILE_PATH: 起動スクリプト ファイルの相対パス
Windows 起動スクリプトをローカル ファイルから既存の VM に渡す

次の gcloud compute instances add-metadata コマンドを使用して、ローカル ファイルから既存の VM に起動スクリプトを渡します。

gcloud compute instances add-metadata VM_NAME ^
  --metadata-from-file=windows-startup-script-ps1=FILE_PATH

次のように置き換えます。

  • VM_NAME: VM の名前
  • FILE_PATH: 起動スクリプト ファイルの相対パス
起動スクリプトの確認

ウェブブラウザで外部 IP を表示して、起動スクリプトによってウェブサイトが作成されたことを確認します。サンプル起動スクリプトが完了するまでに 10 分ほどかかることがあります。

gcloud(PowerShell)

Windows 起動スクリプトをローカル ファイルから新しい VM に渡す

VM を作成し、--metadata-from-file フラグを指定した gcloud compute instances create コマンドを使用して、起動スクリプトとして使用するローカル ファイルの内容を渡します。

gcloud compute instances create VM_NAME `
  --image-project=windows-cloud `
  --image-family=windows-2019-core `
  --metadata-from-file=windows-startup-script-ps1=FILE_PATH

次のように置き換えます。

  • VM_NAME: VM の名前
  • FILE_PATH: 起動スクリプト ファイルの相対パス
Windows 起動スクリプトをローカル ファイルから既存の VM に渡す

次の gcloud compute instances add-metadata コマンドを使用して、ローカル ファイルから既存の VM に起動スクリプトを渡します。

gcloud compute instances add-metadata VM_NAME `
  --metadata-from-file=windows-startup-script-ps1=FILE_PATH

次のように置き換えます。

  • VM_NAME: VM の名前
  • FILE_PATH: 起動スクリプト ファイルの相対パス
起動スクリプトの確認

ウェブブラウザで外部 IP を表示して、起動スクリプトによってウェブサイトが作成されたことを確認します。サンプル起動スクリプトが完了するまでに 10 分ほどかかることがあります。

Cloud Storage から Windows 起動スクリプトを渡す

起動スクリプトをバッチファイル、コマンドシェル、署名付きまたは署名なしの PowerShell スクリプト、Cloud Storage に実行可能ファイルとして保存し、作成時に VM に渡すことができます。Cloud Storage に起動スクリプトを追加すると、VM の作成時に起動スクリプトを参照するのに使用できる URL が生成されます。

Cloud Storage バケットから起動スクリプトを追加する前に、次の操作を行います。

  1. 起動スクリプトを保存するファイルを作成する。この例では、PowerShell(.ps1)ファイルを使用します。

  2. このファイルに、次の PowerShell スクリプトを追加する。このスクリプトは、ウェブサーバーをインストールし、簡単なウェブページを作成します。

    # Installing IIS
    Import-Module servermanager
    Install-WindowsFeature Web-Server -IncludeAllSubFeature
    
    # Ensure the directory exists
    if (-not (Test-Path("C:\inetpub\wwwroot"))) {New-Item "C:\inetpub\wwwroot" -Type Directory}
    
    # Write the expanded string out to the file, overwriting the file if it already exists.
    "<html><body><p>Windows startup script passed from Cloud Storage.</p></body></html>" | Out-File -FilePath C:\inetpub\wwwroot\index.html -Encoding ascii -Force
    
  3. Cloud Storage バケットを作成する

  4. ファイルを Cloud Storage バケットに追加する

セキュリティ上の影響

  • 禁止するアクセス制御が明示的に設定されている場合を除き、デフォルトではプロジェクト オーナーとプロジェクト編集者は同じプロジェクト内の Cloud Storage ファイルにアクセスできます。

  • Cloud Storage のバケットまたはオブジェクトがメタデータよりも安全性が低い場合、起動スクリプトを変更して VM を再起動すると、権限昇格のリスクがあります。これは、VM が再起動すると、起動スクリプトが LocalSystem として実行され、接続されたサービス アカウントの権限を使用して他のリソースにアクセスできるようになるためです。

コンソール

Cloud Storage に保存されている起動スクリプトを新しい VM に渡す

  1. Google Cloud コンソールで、[インスタンスの作成] ページに移動します。

    [インスタンスの作成] に移動

  2. [ブートディスク] で [変更] を選択し、次の操作を行います。

    1. [公開イメージ] タブで、Windows Server オペレーティング システムを選択します。
    2. [選択] をクリックします。
  3. [ID と API へのアクセス] セクションで、ストレージ オブジェクト閲覧者のロールが割り当てられているサービス アカウントを選択します。

  4. [詳細オプション] セクションを開き、次の操作を行います。

    1. [管理] セクションを開きます。
    2. [メタデータ] セクションで、次の値を追加します。

      • キー: メタデータキー。windows-startup-script-url メタデータキーを指定して、初回起動後のすべての起動時にスクリプトが実行されるようにします。

      • : メタデータの値。次のいずれかの形式を使用して、起動スクリプト ファイルの Cloud Storage の場所に設定します。

        • 認証済み URL: https://storage.googleapis.com/BUCKET/FILE
        • gcloud storage URI: gs://BUCKET/FILE

        次のように置き換えます。

        • BUCKET: 起動スクリプト ファイルを含むバケットの名前
        • FILE: 起動スクリプトのファイル名
  5. VM を作成するには、[作成] をクリックします。

Cloud Storage に保存されている起動スクリプトを既存の VM に渡す

  1. Google Cloud コンソールで [VM インスタンス] ページに移動します。

    [VM インスタンス] に移動

  2. VM の [名前] をクリックします。

  3. [編集] をクリックします。

  4. [メタデータ] で、次の値を追加します。

    • 認証済み URL: https://storage.googleapis.com/BUCKET/FILE
    • gcloud storage URI: gs://BUCKET/FILE

起動スクリプトの確認

ウェブブラウザで外部 IP を表示して、起動スクリプトによってウェブサイトが作成されたことを確認します。サンプル起動スクリプトが完了するまでに 10 分ほどかかることがあります。

gcloud(Bash)

Cloud Storage に保存されている起動スクリプトを新しい VM に渡す

次の gcloud compute instances create コマンドを使用して、Cloud Storage に保存されている起動スクリプトを Windows Server VM に渡します。VM が Cloud Storage にアクセスできるように、--scopes フラグの値に storage-ro を使用します。

gcloud compute instances create VM_NAME \
  --image-project=windows-cloud \
  --image-family=windows-2019-core \
  --scopes=storage-ro \
  --metadata=windows-startup-script-url=CLOUD_STORAGE_URL

次のように置き換えます。

  • VM_NAME: VM の名前。
  • CLOUD_STORAGE_URL: メタデータ値。起動スクリプト ファイルの場所を設定するには、次のいずれかの形式を使用します。
    • 認証済み URL: https://storage.googleapis.com/BUCKET/FILE
    • gcloud storage URI: gs://BUCKET/FILE
Cloud Storage に保存されている起動スクリプトを既存の VM に渡す

次の gcloud compute instances add-metadata コマンドを使用して、Cloud Storage に保存されている起動スクリプトを既存の VM に渡します。

gcloud compute instances add-metadata VM_NAME \
  --metadata=windows-startup-script-url=CLOUD_STORAGE_URL

次のように置き換えます。

  • VM_NAME: VM の名前。
  • CLOUD_STORAGE_URL: メタデータ値。起動スクリプト ファイルの場所を設定するには、次のいずれかの形式を使用します。
    • 認証済み URL: https://storage.googleapis.com/BUCKET/FILE
    • gcloud storage URI: gs://BUCKET/FILE
起動スクリプトの確認

ウェブブラウザで外部 IP を表示して、起動スクリプトによってウェブサイトが作成されたことを確認します。サンプル起動スクリプトが完了するまでに 10 分ほどかかることがあります。

gcloud(コマンド プロンプト)

Cloud Storage に保存されている起動スクリプトを新しい VM に渡す

次の gcloud compute instances create コマンドを使用して、Cloud Storage に保存されている起動スクリプトを Windows Server VM に渡します。VM が Cloud Storage にアクセスできるように、--scopes フラグの値に storage-ro を使用します。

gcloud compute instances create VM_NAME ^
  --image-project=windows-cloud ^
  --image-family=windows-2019-core ^
  --scopes=storage-ro ^
  --metadata=windows-startup-script-url=CLOUD_STORAGE_URL

次のように置き換えます。

  • VM_NAME: VM の名前。
  • CLOUD_STORAGE_URL: メタデータ値。起動スクリプト ファイルの場所を設定するには、次のいずれかの形式を使用します。
    • 認証済み URL: https://storage.googleapis.com/BUCKET/FILE
    • gcloud storage URI: gs://BUCKET/FILE
Cloud Storage に保存されている起動スクリプトを既存の VM に渡す

次の gcloud compute instances add-metadata コマンドを使用して、Cloud Storage に保存されている起動スクリプトを既存の VM に渡します。

gcloud compute instances add-metadata VM_NAME ^
  --metadata=windows-startup-script-url=CLOUD_STORAGE_URL

次のように置き換えます。

  • VM_NAME: VM の名前。
  • CLOUD_STORAGE_URL: メタデータ値。起動スクリプト ファイルの場所を設定するには、次のいずれかの形式を使用します。
    • 認証済み URL: https://storage.googleapis.com/BUCKET/FILE
    • gcloud storage URI: gs://BUCKET/FILE
起動スクリプトの確認

ウェブブラウザで外部 IP を表示して、起動スクリプトによってウェブサイトが作成されたことを確認します。サンプル起動スクリプトが完了するまでに 10 分ほどかかることがあります。

gcloud(PowerShell)

Cloud Storage に保存されている起動スクリプトを新しい VM に渡す

次の gcloud compute instances create コマンドを使用して、Cloud Storage に保存されている起動スクリプトを Windows Server VM に渡します。VM が Cloud Storage にアクセスできるように、--scopes フラグの値に storage-ro を使用します。

gcloud compute instances create VM_NAME `
  --image-project=windows-cloud `
  --image-family=windows-2019-core `
  --scopes=storage-ro `
  --metadata=windows-startup-script-url=CLOUD_STORAGE_URL

次のように置き換えます。

  • VM_NAME: VM の名前。
  • CLOUD_STORAGE_URL: メタデータ値。起動スクリプト ファイルの場所を設定するには、次のいずれかの形式を使用します。
    • 認証済み URL: https://storage.googleapis.com/BUCKET/FILE
    • gcloud storage URI: gs://BUCKET/FILE
Cloud Storage に保存されている起動スクリプトを既存の VM に渡す

次の gcloud compute instances add-metadata コマンドを使用して、Cloud Storage に保存されている起動スクリプトを既存の VM に渡します。

gcloud compute instances add-metadata VM_NAME `
  --metadata=windows-startup-script-url=CLOUD_STORAGE_URL

次のように置き換えます。

  • VM_NAME: VM の名前。
  • CLOUD_STORAGE_URL: メタデータ値。起動スクリプト ファイルの場所を設定するには、次のいずれかの形式を使用します。
    • 認証済み URL: https://storage.googleapis.com/BUCKET/FILE
    • gcloud storage URI: gs://BUCKET/FILE
起動スクリプトの確認

ウェブブラウザで外部 IP を表示して、起動スクリプトによってウェブサイトが作成されたことを確認します。サンプル起動スクリプトが完了するまでに 10 分ほどかかることがあります。

REST

Cloud Storage に保存されている起動スクリプトを新しい VM に渡す

次の instances.insert メソッドを使用して、Cloud Storage に保存されている起動スクリプトを Windows Server VM に渡します。VM が Cloud Storage にアクセスできるように、scopes フィールドに https://www.googleapis.com/auth/devstorage.read_only を追加します。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances

{
  ...
  "networkInterfaces": [
    {
      "accessConfigs": [
        {
          "type": "ONE_TO_ONE_NAT"
        }
      ]
    }
  ],
  "serviceAccounts": [
    {
      "email": "default",
      "scopes": [
        "https://www.googleapis.com/auth/devstorage.read_only"
      ]
    }
  ],
  "metadata": {
    "items": [
      {
        "key": "windows-startup-script-url",
        "value": "CLOUD_STORAGE_URL"
      },
      ...
    ]
  },
  ...
}

次のように置き換えます。

  • PROJECT_ID: プロジェクト ID。

  • ZONE: 新しい VM を作成するゾーン。

  • CLOUD_STORAGE_URL: メタデータ値。次のいずれかの形式を使用して、起動スクリプト ファイルの Cloud Storage の場所に設定します。

    • 認証済み URL: https://storage.googleapis.com/BUCKET/FILE
    • gcloud storage URI: gs://BUCKET/FILE

Cloud Storage に保存されている起動スクリプトを既存の VM に渡す

  1. instances.get メソッドを使用して VM の tags.fingerprint 値を取得します。

    GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME
    

    次のように置き換えます。

    • PROJECT_ID: プロジェクト ID

    • ZONE: VM のゾーン

    • VM_NAME: VM のゾーン

  2. instances.setMetadata メソッドを呼び出して、fingerprint 値と、起動スクリプトのメタデータのキーと値を使用して、起動スクリプトを渡します。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/setMetadata
    
    {
      "fingerprint": FINGERPRINT,
      "items": [
        {
            "key": "windows-startup-script-url",
            "value": "CLOUD_STORAGE_URL"
        }
      ],
      ...
    }
    

    次のように置き換えます。

    • PROJECT_ID: プロジェクト ID。

    • ZONE: VM のゾーン。

    • VM_NAME: VM のゾーン。

    • FINGERPRINT: instances.get メソッドを使用して取得した tags.fingerprint 値。

    • CLOUD_STORAGE_URL: メタデータ値。次のいずれかの形式を使用して、起動スクリプト ファイルの Cloud Storage の場所に設定します。

      • 認証済み URL: https://storage.googleapis.com/BUCKET/FILE
      • gcloud storage URI: gs://BUCKET/FILE

起動スクリプトの確認

ウェブブラウザで外部 IP を表示して、起動スクリプトによってウェブサイトが作成されたことを確認します。サンプル起動スクリプトが完了するまでに 10 分ほどかかることがあります。

Windows 起動スクリプトからメタデータへのアクセス

起動スクリプトでメタデータ値にアクセスできます。たとえば、複数の VM に同じスクリプトを使用できます。各 VM に異なるメタデータ値を渡すことで、各スクリプトを個別にパラメータ化できます。

起動スクリプトからカスタム メタデータ値にアクセスする方法は次のとおりです。

  1. メタデータキーの値をクエリする起動スクリプトを作成します。たとえば、次の PowerShell(.ps1)起動スクリプトは、foo メタデータキーの値をクエリします。

    $METADATA_VALUE = (Invoke-RestMethod -Headers @{'Metadata-Flavor' = 'Google'} -Uri "http://metadata.google.internal/computeMetadata/v1/instance/attributes/foo")
    
    # Installing IIS
    Import-Module servermanager
    Install-WindowsFeature Web-Server -IncludeAllSubFeature
    
    # Ensure the directory exists
    if (-not (Test-Path("C:\inetpub\wwwroot"))) {New-Item "C:\inetpub\wwwroot" -Type Directory}
    
    # Write the expanded string out to the file, overwriting the file if it already exists.
    "<html><body><p>Accessing metadata value of foo: $METADATA_VALUE</p></body></html>" | Out-File -FilePath C:\inetpub\wwwroot\index.html -Encoding ascii -Force
    
  2. 次の gcloud compute instances create コマンドを使用して、VM の作成時に foo メタデータキーの値を設定します。この例では、起動スクリプトがローカル ファイルから VM に渡されます。

    gcloud

    gcloud compute instances create VM_NAME \
      --image-project=windows-cloud \
      --image-family=windows-2019 \
      --metadata-from-file=windows-startup-script-ps1=FILE_PATH \
      --metadata=foo=bar
    

    次のように置き換えます。

    • VM_NAME: VM の名前

    • FILE_PATH: 起動スクリプト ファイルの相対パス

    メタデータの Key-Value ペアを指定する方法の詳細については、カスタム メタデータの設定と削除をご覧ください。

  3. ウェブブラウザで外部 IP を表示して、起動スクリプトが foo の値を出力することを確認します。サンプル起動スクリプトが完了するまでに 10 分ほどかかることがあります。

Windows 起動スクリプトの再実行

次の手順で Windows VM で起動スクリプトを再実行します。

  1. VM に接続します

  2. 次のコマンドを実行します。

    C:\Program Files\Google\Compute Engine\metadata_scripts\run_startup_scripts.cmd
    

Windows 起動スクリプトからの出力の表示

Windows Server 起動スクリプトからの出力を確認するには、次のいずれかを使用して GCEMetadataScripts イベントを確認します。

  • Google Cloud コンソールのシリアルポート 1。詳細については、シリアルポート出力の表示をご覧ください。

  • Windows イベント ビューアのアプリケーション ログ。

  • Windows ワークステーションの IAP Desktop。詳細については、GitHub の GoogleCloudPlatform/iap-desktop リポジトリをご覧ください。

次のステップ