起動スクリプトは、仮想マシン(VM)インスタンスの起動プロセス中にタスクを実行するファイルです。起動スクリプトは、プロジェクト内のすべての VM または単一の VM に適用できます。VM レベルのメタデータで指定された起動スクリプトは、プロジェクト レベルのメタデータで指定された起動スクリプトをオーバーライドします。また、起動スクリプトはネットワークが利用可能な場合にのみ実行されます。このドキュメントでは、Windows Server VM インスタンスで起動スクリプトを使用する方法について説明します。プロジェクト レベルの起動スクリプトを追加する方法については、gcloud compute project-info add-metadata
をご覧ください。
Windows 起動スクリプトは、コマンドシェル(.cmd
)、PowerShell(.ps1
)、またはバッチ ファイル スクリプト(.bat
)にする必要があり、適切なファイル拡張子が必要です。
このドキュメントの手順のいずれかを使用して起動スクリプトを指定すると、Compute Engine は次の処理を行います。
起動スクリプトを VM にコピーする
タスク スケジューラが VM の起動時に起動スクリプトを
LocalSystem
アカウントとして実行する
起動スクリプトに関連するさまざまなタスクと、それぞれのタスクを実行するタイミングについては、起動スクリプトの概要ドキュメントをご覧ください。
始める前に
- 起動スクリプトの概要を確認します。
- VM メタデータの基本を確認します。
-
まだ設定していない場合は、認証を設定します。認証とは、Google Cloud サービスと API にアクセスするために ID を確認するプロセスです。ローカル開発環境からコードまたはサンプルを実行するには、次のように Compute Engine に対する認証を行います。
このページのサンプルをどのように使うかに応じて、タブを選択してください。
コンソール
Google Cloud コンソールを使用して Google Cloud サービスと API にアクセスする場合、認証を設定する必要はありません。
gcloud
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- デフォルトのリージョンとゾーンを設定します。
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 に直接渡す
Google Cloud コンソールで、[インスタンスの作成] ページに移動します。
[ブートディスク] で [変更] を選択し、次の操作を行います。
- [公開イメージ] タブで、Windows Server オペレーティング システムを選択します。
- [選択] をクリックします。
[詳細オプション] セクションを開き、次の操作を行います。
- [管理] セクションを開きます。
[メタデータ] セクションで [項目を追加] をクリックし、[鍵] と [値] を設定します。
鍵:
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
[作成] をクリックします。
Windows 起動スクリプトを既存の VM に直接渡す
Google Cloud コンソールで [VM インスタンス] ページに移動します。
VM の [名前] をクリックします。
[編集] をクリックします。
[メタデータ] の下に次のように指定します。
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 に直接渡す
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 のゾーン
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 に渡す前に、次の操作を行います。
起動スクリプトを保存するローカル(
.ps1
)ファイルを作成する。gcloud CLI から起動スクリプトへの相対パスをメモする。
このファイルに次の起動スクリプトを追加する。
# 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: 起動スクリプト ファイルの相対パス
次の 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: 起動スクリプト ファイルの相対パス
次の 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: 起動スクリプト ファイルの相対パス
次の 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 バケットから起動スクリプトを追加する前に、次の操作を行います。
起動スクリプトを保存するファイルを作成する。この例では、PowerShell(
.ps1
)ファイルを使用します。このファイルに、次の 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
セキュリティ上の影響
禁止するアクセス制御が明示的に設定されている場合を除き、デフォルトではプロジェクト オーナーとプロジェクト編集者は同じプロジェクト内の Cloud Storage ファイルにアクセスできます。
Cloud Storage のバケットまたはオブジェクトがメタデータよりも安全性が低い場合、起動スクリプトを変更して VM を再起動すると、権限昇格のリスクがあります。これは、VM が再起動すると、起動スクリプトが
LocalSystem
として実行され、接続されたサービス アカウントの権限を使用して他のリソースにアクセスできるようになるためです。
コンソール
Cloud Storage に保存されている起動スクリプトを新しい VM に渡す
Google Cloud コンソールで、[インスタンスの作成] ページに移動します。
[ブートディスク] で [変更] を選択し、次の操作を行います。
- [公開イメージ] タブで、Windows Server オペレーティング システムを選択します。
- [選択] をクリックします。
[ID と API へのアクセス] セクションで、ストレージ オブジェクト閲覧者のロールが割り当てられているサービス アカウントを選択します。
[詳細オプション] セクションを開き、次の操作を行います。
- [管理] セクションを開きます。
[メタデータ] セクションで、次の値を追加します。
キー: メタデータキー。
windows-startup-script-url
メタデータキーを指定して、初回起動後のすべての起動時にスクリプトが実行されるようにします。値: メタデータの値。次のいずれかの形式を使用して、起動スクリプト ファイルの Cloud Storage の場所に設定します。
- 認証済み URL:
https://storage.googleapis.com/BUCKET/FILE
- gcloud storage URI:
gs://BUCKET/FILE
次のように置き換えます。
- BUCKET: 起動スクリプト ファイルを含むバケットの名前
- FILE: 起動スクリプトのファイル名
- 認証済み URL:
VM を作成するには、[作成] をクリックします。
Cloud Storage に保存されている起動スクリプトを既存の VM に渡す
Google Cloud コンソールで [VM インスタンス] ページに移動します。
VM の [名前] をクリックします。
[編集] をクリックします。
[メタデータ] で、次の値を追加します。
- 認証済み URL:
https://storage.googleapis.com/BUCKET/FILE
- gcloud storage URI:
gs://BUCKET/FILE
- 認証済み URL:
起動スクリプトの確認
ウェブブラウザで外部 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
-
認証済み URL:
次の 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
-
認証済み URL:
ウェブブラウザで外部 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
-
認証済み URL:
次の 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
-
認証済み URL:
ウェブブラウザで外部 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
-
認証済み URL:
次の 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
-
認証済み URL:
ウェブブラウザで外部 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
- 認証済み URL:
Cloud Storage に保存されている起動スクリプトを既存の VM に渡す
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 のゾーン
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
- 認証済み URL:
起動スクリプトの確認
ウェブブラウザで外部 IP を表示して、起動スクリプトによってウェブサイトが作成されたことを確認します。サンプル起動スクリプトが完了するまでに 10 分ほどかかることがあります。
Windows 起動スクリプトからメタデータへのアクセス
起動スクリプトでメタデータ値にアクセスできます。たとえば、複数の VM に同じスクリプトを使用できます。各 VM に異なるメタデータ値を渡すことで、各スクリプトを個別にパラメータ化できます。
起動スクリプトからカスタム メタデータ値にアクセスする方法は次のとおりです。
メタデータキーの値をクエリする起動スクリプトを作成します。たとえば、次の 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
次の
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 ペアを指定する方法の詳細については、カスタム メタデータの設定と削除をご覧ください。
ウェブブラウザで外部 IP を表示して、起動スクリプトが
foo
の値を出力することを確認します。サンプル起動スクリプトが完了するまでに 10 分ほどかかることがあります。
Windows 起動スクリプトの再実行
次の手順で Windows VM で起動スクリプトを再実行します。
次のコマンドを実行します。
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 リポジトリをご覧ください。
次のステップ
Linux VM で起動スクリプトを使用する方法を学習する。
シャットダウン スクリプトの追加方法を学習する。
VM メタデータの詳細を確認する。
Windows VM で起動スクリプトを実行し、Managed Microsoft AD ドメインに参加する方法を学習する。