シャットダウン スクリプトの実行

シャットダウン スクリプトを作成し、インスタンスが終了または再起動する直前にコマンドを実行します。これは、自動スクリプトを使用してインスタンスの起動とシャットダウンを実行し、インスタンスでクリーンアップまたはタスク(ログのエクスポートや他のシステムとの同期など)を実行する時間を確保できるようにする場合に便利です。

シャットダウン スクリプトは、インスタンスがマネージド インスタンス グループに属し、オートスケーラーが使用されている場合に特に役立ちます。オートスケーラーによってグループ内のインスタンスがシャットダウンされる場合、インスタンスが停止する前にシャットダウン スクリプトが実行され、定義したアクションがシャットダウン スクリプトによって実行されます。スクリプトは、インスタンスが停止する前に限られたシャットダウン期間中に実行されます。たとえば、シャットダウン スクリプトでは、処理済みのデータを Cloud Storage にコピーしたり、ログをバックアップしたりすることがあります。

シャットダウン スクリプトは起動スクリプトとほぼ同様に機能します。起動スクリプトに関するドキュメントの多くは、シャットダウン スクリプトにも適用されます。

始める前に

このタスクに必要な権限

このタスクを実行するには、次の権限が必要です。

仕様

制限事項

シャットダウン スクリプトを使用する場合には注意すべき制限がいくつかあります。

  • シャットダウン スクリプトは、インスタンスが停止するまでの短い時間で実行を完了する必要があります。
    • オンデマンド インスタンス: インスタンスの停止または削除後 90 秒
    • プリエンプティブ インスタンス: インスタンスのプリエンプションの開始後 30 秒
  • Compute Engine は、ベストエフォート方式でのみシャットダウン スクリプトを実行します。まれに、Compute Engine ではシャットダウン スクリプトの完了を保証できないことがあります。
  • Linux インスタンスの場合、イメージ バージョン v20141007 以降のシャットダウン スクリプトのみ利用できます。Windows Server インスタンスの場合、イメージ バージョン v20150310 以降のシャットダウン スクリプトのみ利用できます。

シャットダウン スクリプトの呼び出し

シャットダウン スクリプトは、再起動や終了など、特定の Advanced Configuration and Power Interface(ACPI)イベントがトリガーになります。インスタンスを再起動または終了する方法は多数ありますが、シャットダウン スクリプトの実行をトリガーするアクションは限られています。シャットダウン スクリプトは、次のアクションの一環として実行されます。

  • API に対する instances.delete リクエストや instances.stop リクエストに起因してインスタンスがシャットダウンされるとき。
  • Compute Engine によってプリエンプティブ インスタンスがプリエンプション プロセスの一部として停止されるとき。
  • sudo shutdownsudo reboot など、ゲスト オペレーティング システムに対するリクエストによってインスタンスがシャットダウンされる場合。
  • GCP Console または gcloud compute ツールを使用してインスタンスを手動でシャットダウンする場合。

instances().reset を使用してインスタンスがリセットされる場合、シャットダウン スクリプトは実行されません

シャットダウン スクリプトは任意のファイル形式にすることができます。シャットダウン スクリプトが存在する場合、Compute Engine では、以下を行います。

  1. インスタンス内のローカル ファイルにスクリプトをコピーします。
  2. 実行可能となるようにファイルに権限を設定します。
  3. インスタンスの終了時にファイルを実行します。

たとえば、bash スクリプトの代わりに Python スクリプトを用意することもできます。スクリプトは種類に関係なくそのまま実行されることに注意してください。

bash 以外のスクリプトを実行するには、ファイルの先頭にシバン行を追加して、使用するインタプリタを指定します。たとえば、Python スクリプトを使用する場合は次のようなシバン行を追加します。

#!/usr/bin/python

シャットダウン スクリプトの実行時間

インスタンスがシャットダウンまたは再起動される前に、限られた期間でシャットダウン スクリプトが実行されます。この期間中に、Compute Engine により、シャットダウン スクリプトが実行されます。この期間を経過してもスクリプトが完了していない場合は、インスタンスが自動的に終了され、実行中のすべてのタスクが強制終了されます。sudo shutdown コマンドを使用してゲスト オペレーティング システムにリクエストを行うことで、インスタンスをシャットダウンまたは再起動する場合、この制限は適用されません。

シャットダウン期間の長さは、インスタンスの種類によって異なります。プリエンプティブ インスタンスでは、通常のインスタンスよりもシャットダウン期間が短くなります。各種類のインスタンスに対するシャットダウン期間制限の詳細については、シャットダウン期間をご覧ください。

一般に、オペレーティング システムでシャットダウン プロセスを完了してバッファをディスクにフラッシュする時間が確保されるように、シャットダウン期間内にシャットダウン スクリプトの実行を完了する必要があります。

ローカル シャットダウン スクリプトの使用

ローカル シャットダウン スクリプトは、ローカル コンピュータ上に存在するスクリプトです。ローカル シャットダウン スクリプトは、Compute Engine に対してファイルとして渡すか内容を直接渡します。

シャットダウン スクリプトでは必要な数だけアクションを実行できますが、ローカルでファイルを渡す場合は、スクリプトをメタデータ値の制限である 256 KB よりも長くすることはできません。この制限よりも長いスクリプトを使用するには、ファイルを Google Cloud Storage に保存してください。詳細については、Google Cloud Storage からのシャットダウン スクリプトの使用をご覧ください。

シャットダウン スクリプト ファイルを渡す

ローカル シャッドダウン スクリプト ファイルを渡す場合に使用できるのは gcloud コマンドライン ツールだけです。

ローカル シャットダウン スクリプト ファイルを渡すには、--metadata-from-file フラグを指定し、その後にメタデータ キーペア shutdown-script=PATH/TO/FILE を指定します。PATH/TO/FILE はシャットダウン スクリプトの相対パスです。次に例を示します。

gcloud compute instances create example-instance \
    --metadata-from-file shutdown-script=examples/scripts/install.sh

シャットダウン スクリプトの内容を直接渡す

シャットダウン スクリプトの内容を直接渡すこともできます。

Console

GCP Console では、shutdown-script メタデータキーを使用してシャットダウン スクリプトを直接指定します。

  1. GCP Console の [VM インスタンス] ページに移動します。

    [VM インスタンス] ページに移動

  2. [インスタンスを作成] をクリックします。
  3. [新しいインスタンスの作成] ページで、インスタンス向けに希望するプロパティを入力します。 詳細構成オプションで、[管理、セキュリティ、ディスク、ネットワーク、単一テナンシー] セクションを展開します。
  4. [メタデータ] セクションで、メタデータキーとして shutdown-script を入力します。
  5. [] ボックスで、シャットダウン スクリプトの内容を指定します。
  6. [作成] をクリックしてインスタンスを作成します。

gcloud

gcloud コマンドライン ツールを使用して --metadata フラグを指定し、シャットダウン スクリプトの内容を指定します。その後に shutdown-script=CONTENTS キーペアを指定します。CONTENTS はシャットダウン スクリプトの内容です。

gcloud compute instances create example-instance --metadata shutdown-script="#! /bin/bash
> # Shuts down Apache server
> /etc/init.d/apache2 stop"

API

API では、インスタンスを作成するときにリクエストのメタデータ プロパティの一部としてシャットダウン スクリプトを渡します。shutdown-script をメタデータキーとして使用します。

POST https://www.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a/instances

{...
  "metadata": {
    "items": [
      {
       "key": "shutdown-script",
       "value": "#! /bin/bash\n\n# Shuts down Apache server\n/etc/init.d/apache2 stop"
      }
    ]
  }...
}

Windows インスタンスでシャットダウン スクリプトを渡す

以下の Windows 固有のメタデータキーを使用して、Windows インスタンスでシャットダウン スクリプトを実行します。以下に示されている特殊なキーのいずれかを選択します。実行するスクリプトの種類に対応するキーを選択する必要があります。

複数のキーをインスタンスに渡すことで複数のシャットダウン スクリプトを指定できますが、各キーは仮想マシンごとに一度しか指定できません。

ローカル シャットダウン スクリプトで使用できるキーは次のとおりです。手順は上と同じです。

cmd シャットダウン スクリプト bat シャットダウン スクリプト ps1 シャットダウン スクリプト
windows-shutdown-script-cmd windows-shutdown-script-bat windows-shutdown-script-ps1

Google Cloud Storage からのシャットダウン スクリプトの使用

Google Cloud Storage にシャットダウン スクリプトを保存して使用できます。それには起動スクリプトのドキュメントに記載されている手順に従いますが、startup-script-urlshutdown-script-url に置き換えてください。

Windows インスタンスの場合は、windows-startup-script-urlwindows-shutdown-script-url に置き換えてください。

実行中のインスタンスに対するシャットダウン スクリプトの適用

実行中のインスタンスにシャットダウン スクリプトを追加する方法については、実行中のインスタンスに対する起動スクリプトの適用の手順をご覧ください。ただし、メタデータキーは次のいずれかのキーに置き換えてください。

  • shutdown-script: このキーで、シャットダウン スクリプトの内容を直接指定します。gcloud コマンドライン ツールで、--metadata-from-file フラグと shutdown-script メタデータキーを使用してシャットダウン スクリプト ファイルのパスを指定します。
  • shutdown-script-url: このキーで、Google Cloud Storage のシャットダウン スクリプト ファイルの URL を指定します。
このページは役立ちましたか?評価をお願いいたします。

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

Compute Engine ドキュメント