インスタンスが停止または再起動する直前にコマンドを実行するシャットダウン スクリプトを作成します。これは、自動スクリプトを使用してインスタンスの起動とシャットダウンを実行し、インスタンスでクリーンアップまたはタスク(ログのエクスポートや他のシステムとの同期など)を実行する時間を確保できるようにする場合に便利です。
シャットダウン スクリプトは、インスタンスがマネージド インスタンス グループに属し、オートスケーラーが使用されている場合に特に役立ちます。オートスケーラーによってグループ内のインスタンスがシャットダウンされる場合、インスタンスが停止する前にシャットダウン スクリプトが実行され、定義したアクションがシャットダウン スクリプトによって実行されます。スクリプトは、インスタンスが停止する前の限られたシャットダウン期間中に実行されます。たとえば、シャットダウン スクリプトによって、処理済みのデータが Cloud Storage にコピーされることや、ログがバックアップされることがあります。
シャットダウン スクリプトは起動スクリプトとほぼ同様に機能します。起動スクリプトに関するドキュメントの多くは、シャットダウン スクリプトにも適用されます。
始める前に
- このガイドのコマンドラインの例を使用する場合、以下を行ってください。
- gcloud コマンドライン ツールの最新バージョンをインストールするか、最新バージョンに更新します。
- デフォルトのリージョンとゾーンを設定します。
- このガイドの API の例を使用する場合、API アクセスを設定します。
- スタートアップ スクリプトについて学習します。
- メタデータ サーバーとは何かを理解します。
このタスクに必要な権限
このタスクを行うには、次の権限が必要です。
- インスタンスの作成に必要なすべての権限
- インスタンスの
compute.instances.setMetadata
仕様
制限事項
シャットダウン スクリプトを使用する場合には注意すべき制限がいくつかあります。
- シャットダウン スクリプトは、インスタンスが停止するまでの限られた時間で実行を完了する必要があります。
- オンデマンド インスタンス: インスタンスの停止または削除後 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 shutdown
やsudo reboot
などのゲスト オペレーティング システムに対するリクエストによってインスタンスがシャットダウンされるとき。- Cloud Console または
gcloud compute
ツールを使用してインスタンスを手動でシャットダウンするとき。
instances().reset
を使用してインスタンスがリセットされる場合、シャットダウン スクリプトは実行されません。
シャットダウン スクリプトは任意のファイル形式にできます。シャットダウン スクリプトが存在する場合、Compute Engine では、以下を行います。
- インスタンス内のローカル ファイルにスクリプトをコピーします。
- そのファイルを実行するための権限が設定されます。
- インスタンスの停止時にファイルを実行します。
たとえば、bash スクリプトの代わりに Python スクリプトを使用できます。スクリプトは種類に関係なくそのまま実行されることに注意してください。
bash 以外のスクリプトを実行するには、オペレーティング システムがどのインタープリターを使用すべきか把握できるよう、ファイルの先頭にシバン行を追加します。たとえば、Python スクリプトを使用する場合は次のようなシバン行を追加します。
#!/usr/bin/python
シャットダウン スクリプトの実行時間
インスタンスがシャットダウンまたは再起動される前に、限られた期間でシャットダウン スクリプトが実行されます。この期間中に、Compute Engine により、シャットダウン スクリプトが実行されます。この期間を経過してもスクリプトが完了していない場合は、インスタンスが自動的に停止し、実行中のすべてのタスクが終了します。sudo shutdown
コマンドを使用してゲスト オペレーティング システムにリクエストを行うことで、インスタンスをシャットダウンまたは再起動する場合、この制限は適用されません。
シャットダウン期間の長さは、インスタンスの種類によって異なります。プリエンプティブル インスタンスでは、通常のインスタンスよりもシャットダウン期間が短くなります。それぞれのインスタンスのタイプに対するシャットダウン期間制限の詳細については、シャットダウン期間をご覧ください。
一般に、オペレーティング システムでシャットダウン プロセスを完了してバッファをディスクにフラッシュする時間が確保されるように、シャットダウン期間内にシャットダウン スクリプトの実行を完了する必要があります。
ローカル シャットダウン スクリプトの使用
ローカル シャットダウン スクリプトは、ローカル コンピュータ上に存在するスクリプトです。ローカル シャットダウン スクリプトは、Compute Engine に対してファイルとして渡すか内容を直接渡します。
シャットダウン スクリプトでは必要な数だけアクションを実行できますが、ローカルでファイルを渡す場合は、スクリプトをメタデータ値の長さの上限である 256 KB よりも長くすることはできません。この長さの上限を超えるスクリプトを使用するには、ファイルを Cloud Storage に保存してください。詳細については、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
Cloud Console では、shutdown-script
メタデータキーを使用してシャットダウン スクリプトを直接指定します。
- Cloud Console で、[VM インスタンス] ページに移動します。
- [インスタンスを作成] をクリックします。
- [新しいインスタンスの作成] ページで、インスタンスのプロパティを入力します。 詳細構成オプションで、[管理、セキュリティ、ディスク、ネットワーク、単一テナンシー] セクションを展開します。
- [メタデータ] セクションで、メタデータキーとして
shutdown-script
を指定します。 - [値] ボックスで、シャットダウン スクリプトの内容を指定します。
- [作成] をクリックしてインスタンスを作成します。
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://compute.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 インスタンスでシャットダウン スクリプトを実行します。以下に示す特殊なキーのいずれかを選択します。実行するスクリプトの種類に対応するキーを選択する必要があります。
複数のキーをインスタンスに渡すことで複数のシャットダウン スクリプトを指定できますが、各キーは仮想マシンごとに 1 回のみ指定できます。
ローカル シャットダウン スクリプトで使用できるキーは次のとおりです。手順は上と同じです。
cmd シャットダウン スクリプト |
bat シャットダウン スクリプト |
ps1 シャットダウン スクリプト |
---|---|---|
windows-shutdown-script-cmd |
windows-shutdown-script-bat |
windows-shutdown-script-ps1 |
Cloud Storage からのシャットダウン スクリプトの使用
Cloud Storage にシャットダウン スクリプトを保存し、そこから使用できます。それには起動スクリプトのドキュメントに記載されている手順に従いますが、startup-script-url
は shutdown-script-url
に置き換えてください。
Windows インスタンスの場合は、windows-startup-script-url
を windows-shutdown-script-url
に置き換えます。
実行中のインスタンスに対するシャットダウン スクリプトの適用
実行中のインスタンスにシャットダウン スクリプトを追加する方法については、実行中のインスタンスに対する起動スクリプトの適用の手順をご覧ください。ただし、メタデータキーは次のいずれかのキーに置き換えてください。
shutdown-script
: このキーで、シャットダウン スクリプトの内容を直接指定します。gcloud
コマンドライン ツールを使用すると、--metadata-from-file
フラグとshutdown-script
メタデータキーを使ってシャットダウン スクリプト ファイルへのパスを指定できます。shutdown-script-url
: このキーで、Cloud Storage のシャットダウン スクリプト ファイルの URL を指定します。