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

起動スクリプトは、仮想マシン(VM)の起動プロセス中にタスクを実行します。このページでは、VM インスタンスで起動スクリプトを使用する手順について説明します。

始める前に

gdcloud コマンドライン インターフェース(CLI)コマンドを使用するには、gdcloud CLI をダウンロード、インストール、構成していることを確認します。GDC エアギャップ アプライアンスのすべてのコマンドは gdcloud または kubectl CLI を使用し、オペレーティング システム(OS)環境が必要です。

kubeconfig ファイルのパスを取得する

Management API サーバーに対してコマンドを実行するには、次のリソースがあることを確認します。

  1. Management API サーバー名を確認するか、プラットフォーム管理者(PA)にサーバー名を確認します。

  2. Management API サーバーの kubeconfig ファイルがない場合は、ログインして生成します。

  3. この手順では、このパスを使用して MANAGEMENT_API_SERVER{"</var>"}} を置き換えます。

IAM ロールをリクエストする

VM で起動スクリプトを使用するには、プロジェクト IAM 管理者に連絡して、プロジェクトに対する次のロールをリクエストします。

  • プロジェクト VirtualMachine 管理者project-vm-admin): プロジェクト Namespace で VM を作成、変更、一覧表示、削除します。

  • Secret 管理者secret-admin): プロジェクト Namespace の Kubernetes Secret の取得、一覧表示、作成、更新、削除、パッチ適用、監視を行います。このロールを使用して、起動スクリプトのシークレットを指定します。プレーン テキストのスタートアップ スクリプトを指定する場合、このロールは必要ありません。

すべての VM ロールは、VM が存在するプロジェクトの Namespace にバインドする必要があります。手順に沿ってアクセスを確認します。

Windows 起動スクリプト名の形式

Windows VM の起動スクリプトは、スクリプト名とファイル拡張子がダッシュで区切られた特定の命名形式に従う必要があります。たとえば、create-directory-ps1create-directory はスクリプト名、ps1 はファイル拡張子)。形式が正しくない例としては、ハイフンの代わりにピリオドを使用したり、create-directory.ps1create-directory などのファイル拡張子を省略したりすることが挙げられます。

Windows 起動スクリプトで使用するファイル拡張子は次のとおりです。

  • ps1: PowerShell コマンドが含まれます。
  • cmd: コマンド プロンプト インタープリタのバッチ コマンドが含まれます。
  • bat: バッチ コマンドが含まれます。

Windows 起動スクリプトを順番に実行する

複数の起動スクリプトを使用できます。スクリプトを含むファイルの種類は、各スクリプトの実行順序に影響します。次の表に、Windows 起動スクリプトの実行順序を示します。

Windows スクリプト 実行する順序
Powershell スクリプト 起動ごとに最初。
バッチ スクリプト 起動ごとに 2 番目。
コマンド スクリプト 起動時の 3 番目。

2 つの起動スクリプトのファイル拡張子が同じ場合、スクリプトはファイル拡張子と名前のアルファベット順に基づいて実行されます。たとえば、起動スクリプトの名前が alpha-script-ps1beta-script-ps1 の場合、alpha-script-ps1beta-script-ps1 の前に実行されます。

次の VM 仕様の例では、startupScripts フィールドの Windows 起動スクリプトの順序と構造を示します。

...
  startupScripts:
  - name: create-directory-ps1
    script: |-
      New-Item -ItemType Directory -Path C:\ -Name NewDir
      Get-ChildItem -Path C:\
  - name: hello-world-bat
    script: |-
      ECHO "Hello World!"
  - name: list-directories-cmd
    script: |-
      dir C:\Windows  > files.txt
...

起動スクリプトを渡す

GDC エアギャップ アプライアンスは、各起動スクリプトの名前に基づいて、起動スクリプトをアルファベット順に実行します。

次の表に、スクリプトのサイズに基づいて使用するスクリプト形式を示します。

スクリプトのサイズ スクリプトの形式
2,048 バイトまでのスクリプト クリアテキスト
2,048 バイトを超えるスクリプト Kubernetes Secret

起動スクリプトを定義する

起動スクリプトを使用するには、VM の spec フィールドに startupScripts フィールドを追加する必要があります。このフィールドでは、複数の起動スクリプトをクリアテキストまたは Kubernetes Secret として指定できます。

次の例では、スタートアップ スクリプトをクリアテキストと Kubernetes Secret として指定します。

apiVersion: virtualmachine.gdc.goog/v1
kind: VirtualMachine
metadata:
  name: "vm-test"
spec:
  ...
  startupScripts:
  - name: create-directory-ps1
    script: |-
      New-Item -ItemType Directory -Path C:\ -Name NewDir
      Get-ChildItem -Path C:\
  - name: list-directories-cmd
    scriptSecretRef:
      name: list-directories
---

apiVersion: v1
kind: Secret
type: Opaque
metadata:
  name: list-directories
data: 
  script:
    ZGlyIEM6XFdpbmRvd3MgID4gZmlsZXMudHh0Cg==

次の考慮事項を確認してください。

  • 起動スクリプトは起動のたびに実行されます。
  • 起動スクリプトにはデフォルトの root 権限があります。
  • Kubernetes Secret では、VM specscriptSecretRef の名前が metadata.name フィールドと一致する必要があります。
  • Kubernetes Secret で、data フィールドにキー script を追加して、起動スクリプトの内容を指定します。

Windows 起動スクリプトを使用して新しい VM を作成する

Windows 起動スクリプトを使用して VM を作成するには、起動スクリプトを使用して新しい VM を作成するの手順に沿って操作します。