確定的なインスタンス テンプレート

このページでは、確定的なインスタンス テンプレートを作成する条件と理由について説明します。確定的なインスタンス テンプレートを使用すると、インスタンス テンプレートのデプロイ時にインスタンスにインストールする必要のあるサードパーティのサービスまたはアプリケーションのタイプを明確にすることができます。確定的なインスタンス テンプレートを作成することにより、インスタンス テンプレートのあいまいさや予期せぬ動作を最小限に抑えることができます。

始める前に

確定的なインスタンス テンプレートを作成する理由

通常、インスタンス テンプレートのプロパティはできるだけ明示的かつ確定的にすることをおすすめします。サードパーティのサービスをインストールまたは使用する起動スクリプトをインスタンス テンプレート内で使用する場合は、必ずインストールするアプリケーションのバージョンなど、明示的な情報をそのスクリプトで指定してください。Compute Engine はテンプレートで定義された情報のみに依存しており、参照されているサードパーティのサービスを制御することはできません。テンプレートが曖昧な場合、インスタンス テンプレートが予想外の動作をすることがあります。

たとえば、次のコマンドで、apache2 をインストールするとともに外部サーバー上でホストされたファイルを使用する起動スクリプトを含む、インスタンス テンプレートを作成するとします。

gcloud compute instance-templates create example-template-with-startup \
    --image-family debian-9 \
    --image-project debian-cloud \
    --metadata startup-script='#! /bin/bash
    sudo apt-get install -y apache2
    scp myuser@108.59.87.185:index.php /var/www/'

この起動スクリプトには 2 つの潜在的な問題があります。

  • このスクリプトはインストールする apache2 のバージョンを明示的に定義しておらず、apt-get リポジトリにある使用可能な現行バージョンに依存しています。
  • このスクリプトはサードパーティ上でホストされているバージョン指定のないファイルに依存しています。このファイルは、インスタンス テンプレートが前回使用された後に変更されている可能性があります。

オートスケーラーを使用する場合、インスタンス テンプレートが確定的でないと、新しいインスタンスが異なる構成(バージョンの異なる apache2 など)でマネージド インスタンス グループに追加される可能性があります。

同様に、確定的でないインスタンス テンプレートをマネージド インスタンス グループに適用し、そのグループを Instance Group Updater サービスを使用して異なるテンプレートに更新した後に、以前のテンプレートにロールバックした場合、インスタンスは常に起動時の最新バージョンをフェッチするため、更新前とは異なるバージョンの apache2 または index.php ファイルがインスタンスで使用されてしまう可能性があります。

あいまいなまたは予期せぬインスタンス テンプレートの動作の回避

テンプレートの予期しない動作を防止するため、以下のいずれかの方法を使用してください。

  • コンテナ用に最適化されたイメージ、または Docker タグの付いた Docker を使用します。たとえば、Docker イメージの新しいビルドに毎回新しいタグを割り当て、そのタグをインスタンス テンプレートで(デフォルトの最新タグの代わりに)使用することをおすすめします。コンテナ用に最適化されたイメージについては、マニフェスト ファイル内でイメージの特定のビルドを明示的に参照できます。下の例では、「version_2_1_3」というタグの付いたバージョンの Docker イメージ「myimage」を使用しています。

    version: v1beta2
    containers:
      - name: simple-echo
        image: myimage:version_2_1_3
           [ rest of your manifest file ]
    
  • テンプレートのイメージとして使用するカスタム イメージを作成します。これは起動スクリプトよりも望ましい方法です。この方法ではすべてのインスタンスが必ず同一になるのに対し、起動スクリプトを使用する場合は配布パッケージの更新後に結果が変わる可能性があるからです。プロトタイピングや迅速な開発にはインスタンス テンプレートの起動スクリプトを使用し、本番環境に対応できるサービスをデプロイする準備ができたらカスタム イメージを使用するようにしてください。

  • 起動スクリプトを使用する場合は、スクリプトを更新して確定的なものにすることを検討してください。たとえば、以前のテンプレートの新バージョンを作成して、次のように確定的な起動スクリプトを指定します。

    gcloud compute instance-templates create example-template-with-startup-2-1-3 \
        --image-family debian-9 \
        --image-project debian-cloud \
        --metadata startup-script='#! /bin/bash
        sudo apt-get install -y apache2=2.2.20-1ubuntu1
        scp myuser@108.59.87.185:version_2_1_3/index.php /var/www/'
    

    ここで、「version_2_1_3」はサービスのバージョン 2.1.3 用の PHP スクリプトが格納されたサブディレクトリです。

次のステップ

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Compute Engine ドキュメント