ホスト VM でカスタム起動スクリプトを実行する

Cloud Workstations では、ワークステーション コンテナの起動前に、ホスト ワークステーション VM でカスタム起動スクリプトを実行できます。これは、VM レベルの構成を実行したり、ワークステーション コンテナの外部で実行する必要がある追加のソフトウェアをインストールする場合に便利です。

ホスト VM でカスタム起動スクリプトを実行することは、高度な機能です。起動スクリプトを使用する代わりに、コンテナ イメージをカスタマイズすることをおすすめします。

起動スクリプトを使用する場合は、スクリプトが Container-Optimized OS(COS)イメージの変更と互換性を維持するようにしてください。これは、ホスト VM が COS に基づいて定期的にオペレーティング システムの更新を受け取るためです。

始める前に

Google Cloud CLI をインストールし、 フェデレーション ID を使用して gcloud CLI にログインします。ログイン後、次のコマンドを実行して Google Cloud CLI を初期化します。

gcloud init

起動スクリプトを準備する

ホスト ワークステーション VM で実行する起動スクリプトを作成します。スクリプトを作成する際は、次のガイドラインに沿ってご対応ください。

  1. Cloud Workstations は、指定されたワークステーション コンテナと、ホスト ワークステーション VM 上の複数のシステム コンテナを実行して、ワークステーションが正常に機能するようにします。すべてのコンテナは、containerd ランタイムと crictl クライアントを使用して実行されます。
  2. 起動スクリプトによって起動された追加のコンテナを containerd を使用して実行します。ワークステーション コンテナ内で実行されている Docker デーモンとの干渉を防ぐため、ホスト VM で Docker が無効になっています。
  3. 起動スクリプトで起動されたホストレベルのコンテナは、メインのワークステーション コンテナとやり取りできません。これらの直接的なやり取りは、Identity and Access Management(IAM)チェックをバイパスするため、サポートされていません。

起動スクリプトを Cloud Storage に保存する

スクリプトを Cloud Storage バケットにアップロードし、ワークステーションに関連付けられたサービス アカウントからスクリプトにアクセスできるようにします。

  1. スクリプトをバケットにアップロードします。

    gcloud storage cp LOCAL_SCRIPT_PATH gs://BUCKET_NAME/SCRIPT_NAME
    

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

    • LOCAL_SCRIPT_PATH: 起動スクリプト ファイルのローカルパス。
    • BUCKET_NAME: Cloud Storage バケットの名前。
    • SCRIPT_NAME: バケット内のスクリプト ファイルに付ける名前。
  2. ワークステーション構成で使用されるサービス アカウントに、バケットとスクリプト ファイルにアクセスする権限があることを確認します。また、スクリプトを一般公開することもできます。

ワークステーション構成を作成する

カスタム起動スクリプトを使用するには、ワークステーション構成を作成し、スクリプトの Cloud Storage URI を指定します。

コンソール

ワークステーション構成の作成時にカスタム起動スクリプトを構成するには:

  1. Google Cloud コンソールで、[ワークステーションの構成] ページに移動します。

    [ワークステーションの構成] に移動

  2. add [作成] をクリックします。

  3. [基本情報] ページで、構成の名前を入力し、ワークステーション クラスタを選択して、[続行] をクリックします。

  4. [マシンの設定] ページで、マシンの設定を構成し、[続行] をクリックします。

  5. [環境設定] ページで、[コンテナの詳細オプション] セクションを開きます。

  6. [カスタム起動スクリプト] フィールドに、起動スクリプトの Cloud Storage パスを入力します(例: gs://BUCKET_NAME/SCRIPT_NAME)。

  7. 残りの手順を完了して、[作成] をクリックします。

REST

REST API を使用してカスタム起動スクリプトを構成するには、ワークステーション構成を作成し、host.gceInstance メッセージの startupScriptUri フィールドをスクリプトの Cloud Storage URI に設定します。

curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     -H "Content-Type: application/json" \
     -d '{
       "host": {
         "gceInstance": {
           "poolSize": 1,
           "startupScriptUri": "gs://BUCKET_NAME/SCRIPT_NAME",
           "serviceAccount": "SERVICE_ACCOUNT"
         }
       }
     }' \
     https://workstations.googleapis.com/v1alpha/projects/PROJECT_ID/locations/LOCATION/workstationClusters/CLUSTER_ID/workstationConfigs?workstation_config_id=CONFIG_ID

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

  • SERVICE_ACCOUNT: ワークステーション構成に関連付けられているサービス アカウントのメールアドレス。
  • PROJECT_ID: 実際の Google Cloud プロジェクト ID。
  • LOCATION: ワークステーション クラスタが配置されているリージョン。
  • CLUSTER_ID: ワークステーション クラスタの ID。
  • CONFIG_ID: 新しいワークステーション構成に割り当てる ID。

スクリプトの実行を確認する

スクリプトが正しく実行されたことを確認するには、次のいずれかの方法を使用します。

  • シリアルポート 3 の出力ログ: スクリプトによって生成された出力ログは、シリアルポート 3 の出力に自動的に送信されます。ワークステーションに割り当てられている VM の名前を確認するには、プラットフォーム ログをご覧ください。
  • VM に SSH 接続する: 必要に応じて、ワークステーション VM に SSH 接続して、スクリプトをさらにデバッグできます。
  • 準備状況の確認: 起動スクリプトはベスト エフォート型であり、ワークステーションの起動をブロックしません。スクリプトの実行に時間がかかる場合や、スクリプトが失敗した場合でも、ワークステーションが準備完了としてマークされることがあります。スクリプトが完了するまでワークステーションが準備完了とマークされないようにするには、準備チェックの実装を検討してください。

次のステップ