仮想マシン(VM)インスタンスが停止または再起動する直前にコマンドを実行するシャットダウン スクリプトを作成して実行します。これは、自動スクリプトを使用してインスタンスの起動とシャットダウンを実行し、インスタンスでクリーンアップまたはタスク(ログのエクスポートや他のシステムとの同期など)を実行する時間を確保できるようにする場合に便利です。
シャットダウン スクリプトは、VM がマネージド インスタンス グループに属し、オートスケーラーが使用されている場合に特に役立ちます。オートスケーラーによってグループ内の VM がシャットダウンされる場合、VM が停止する前にシャットダウン スクリプトが実行され、定義したアクションがシャットダウン スクリプトによって実行されます。スクリプトは、VM が停止する前の限られたシャットダウン期間中に実行されます。たとえば、シャットダウン スクリプトによって、処理済みのデータが Cloud Storage にコピーされることや、ログがバックアップされることがあります。
シャットダウン スクリプトは起動スクリプトとほぼ同様に機能します。起動スクリプトに関するドキュメントの多くは、シャットダウン スクリプトにも適用されます。
シャットダウン タスクと再起動タスクでは、VM が常に次のようにシャットダウン スクリプトを実行します。
- Linux VM の場合は、
root
ユーザーを使用します。 - Windows VM の場合は、
System
アカウントを使用します。
始める前に
- スタートアップ スクリプトについて学習します。
- メタデータ サーバーとは何かを理解します。
-
まだ認証を設定していない場合は、ここで認証を設定します。認証とは、Google Cloud サービスと API にアクセスするために ID を確認するプロセスです。ローカル開発環境でコードまたはサンプルを実行するには、次のいずれかのオプションを選択して Compute Engine に対する認証を行います。
Select the tab for how you plan to use the samples on this page:
Console
When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.
gcloud
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- Set a default region and zone.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
If you're using a local shell, then create local authentication credentials for your user account:
gcloud auth application-default login
You don't need to do this if you're using Cloud Shell.
- インスタンスの作成に必要なすべての権限
- インスタンスの
compute.instances.setMetadata
- シャットダウン スクリプトは、インスタンスが停止するまでの限られた時間で実行を完了する必要があります。
- オンデマンド インスタンス: インスタンスの停止または削除後 90 秒
- プリエンプティブル インスタンス: インスタンスのプリエンプションの開始後 30 秒
- Compute Engine は、ベストエフォート方式でのみシャットダウン スクリプトを実行します。まれに、Compute Engine ではシャットダウン スクリプトの完了を保証できないことがあります。
- Windows では、ローカル グループ ポリシーを使用してシャットダウン スクリプトを起動します。
- インストール パッケージでは、システムのシャットダウン時にスクリプトを起動するように、ローカル グループ ポリシー
Computer Configuration/Windows Setting/Scripts (Startup/Shutdown)
設定を構成します。
- インストール パッケージでは、システムのシャットダウン時にスクリプトを起動するように、ローカル グループ ポリシー
- API への
instances.delete
リクエストやinstances.stop
などによってインスタンスがシャットダウンされるとき。 - Compute Engine によってプリエンプティブル インスタンスがプリエンプション プロセスの一部として停止されるとき。
sudo shutdown
やsudo reboot
などのゲスト オペレーティング システムに対するリクエストによってインスタンスがシャットダウンされるとき。- Google Cloud コンソールまたは
gcloud compute
ツールを使用してインスタンスを手動でシャットダウンするとき。 - インスタンス内のローカル ファイルにスクリプトをコピーします。
- そのファイルを実行するための権限が設定されます。
- インスタンスの停止時にファイルを実行します。
[インスタンスの作成] ページに移動します。
VM の詳細を指定します。
[詳細オプション] セクションを開きます。
[管理] を開いて、次の操作を行います。
- [メタデータ] セクションで [項目を追加] をクリックします。
- [キー] フィールドに、メタデータキーとして「
shutdown-script
」と入力します。 - [値] フィールドに、シャットダウン スクリプトの内容を追加します。
VM 作成プロセスを続行します。
shutdown-script
: このキーで、シャットダウン スクリプトの内容を直接指定します。Google Cloud CLI を使用すると、--metadata-from-file
フラグとshutdown-script
メタデータキーを使用してシャットダウン スクリプト ファイルへのパスを指定できます。shutdown-script-url
: このキーで、Cloud Storage のシャットダウン スクリプト ファイルの URL を指定します。インスタンスに接続し、次のコマンドを実行します。
sudo journalctl -u google-shutdown-scripts.service
Google Cloud コンソールでシリアルポート 1 を介して出力を表示し、
google_metadata_script_runner
イベントを確認します。Windows ワークステーションの IAP Desktop。詳細については、GitHub の GoogleCloudPlatform/iap-desktop リポジトリをご覧ください。
Google Cloud コンソールのシリアルポート 1。詳細については、シリアルポート出力の表示をご覧ください。
Windows イベント ビューアのアプリケーション ログ。
Windows ワークステーションの IAP Desktop。詳細については、GitHub の GoogleCloudPlatform/iap-desktop リポジトリをご覧ください。
Terraform
ローカル開発環境でこのページの Terraform サンプルを使用するには、gcloud CLI をインストールして初期化し、ユーザー認証情報を使用してアプリケーションのデフォルト認証情報を設定します。
詳細については Set up authentication for a local development environment をご覧ください。
REST
このページの REST API サンプルをローカル開発環境で使用するには、gcloud CLI に指定した認証情報を使用します。
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
詳細については、Google Cloud 認証ドキュメントの REST を使用して認証するをご覧ください。
このタスクに必要な権限
このタスクを行うには、次の権限が必要です。
仕様
制限事項
シャットダウン スクリプトを使用する場合には注意すべき制限がいくつかあります。
シャットダウン スクリプトの呼び出し
シャットダウン スクリプトは、再起動や停止など、特定の Advanced Configuration and Power Interface(ACPI)イベントがトリガーになります。インスタンスを再起動または停止する方法は多数ありますが、シャットダウン スクリプトの実行をトリガーするアクションは限られています。シャットダウン スクリプトは、次のアクションの一環として実行されます。
instances().reset
を使用してインスタンスがリセットされる場合、シャットダウン スクリプトは実行されません。シャットダウン スクリプトは任意のファイル形式にできます。シャットダウン スクリプトが存在する場合、Compute Engine では、以下を行います。
たとえば、bash スクリプトの代わりに Python スクリプトを使用できます。スクリプトは種類に関係なくそのまま実行されることに注意してください。
bash 以外のスクリプトを実行するには、オペレーティング システムがどのインタープリターを使用すべきか把握できるよう、ファイルの先頭にシバン行を追加します。たとえば、Python スクリプトを使用する場合は次のようなシバン行を追加します。
#!/usr/bin/python
シャットダウン スクリプトの実行時間
インスタンスがシャットダウンまたは再起動される前に、限られた期間でシャットダウン スクリプトが実行されます。この期間中に、Compute Engine により、シャットダウン スクリプトが実行されます。この期間を経過してもスクリプトが完了していない場合は、インスタンスが自動的に停止し、実行中のすべてのタスクが終了します。
sudo shutdown
コマンドを使用してゲスト オペレーティング システムにリクエストを行うことで、インスタンスをシャットダウンまたは再起動する場合、この制限は適用されません。シャットダウン期間の長さは、インスタンスの種類によって異なります。プリエンプティブル インスタンスでは、通常のインスタンスよりもシャットダウン期間が短くなります。それぞれのインスタンスのタイプに対するシャットダウン期間制限の詳細については、シャットダウン期間をご覧ください。
一般に、オペレーティング システムでシャットダウン プロセスを完了してバッファをディスクにフラッシュする時間が確保されるように、シャットダウン期間内にシャットダウン スクリプトの実行を完了する必要があります。
ローカル シャットダウン スクリプトの使用
ローカル シャットダウン スクリプトは、ローカル コンピュータ上に存在するスクリプトです。ローカル シャットダウン スクリプトは、Compute Engine に対してファイルとして渡すか内容を直接渡します。
シャットダウン スクリプトでは必要な数だけアクションを実行できますが、ローカルでファイルを渡す場合は、スクリプトをメタデータ値の長さの上限である 256 KB よりも長くすることはできません。この長さの上限を超えるスクリプトを使用するには、ファイルを Cloud Storage に保存してください。詳細については、Cloud Storage からシャットダウン スクリプトを使用するをご覧ください。
シャットダウン スクリプト ファイルを渡す
ローカル シャットダウン スクリプト ファイルは、
gcloud
コマンドライン ツールを介してのみ渡すことができます。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
Terraform
シャットダウン スクリプトを直接指定するには、メタデータでシャットダウン スクリプトのパスを指定して
google_compute_instance
リソースを使用します。シャットダウン スクリプトの内容を直接渡す
シャットダウン スクリプトの内容を直接渡すこともできます。
コンソール
Google Cloud コンソールでは、
shutdown-script
メタデータキーを使用してシャットダウン スクリプトを直接指定します。gcloud
Google Cloud CLI を使用して
--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"
Terraform
シャットダウン スクリプトを直接指定するには、メタデータでシャットダウン スクリプトを指定して
google_compute_instance
リソースを使用します。REST
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
に置き換えます。実行中のインスタンスに対するシャットダウン スクリプトの適用
実行中のインスタンスにシャットダウン スクリプトを追加する方法については、実行中のインスタンスに対する起動スクリプトの適用の手順をご覧ください。ただし、メタデータキーは次のいずれかのキーに置き換えてください。
シャットダウン スクリプトの出力の表示
Linux
Linux シャットダウン スクリプトからの出力を確認するには、次のいずれかの操作を行います。
Windows
Windows Server シャットダウン スクリプトからの出力を確認するには、次のいずれかを使用して
GCEMetadataScripts
イベントを確認します。特に記載のない限り、このページのコンテンツはクリエイティブ・コモンズの表示 4.0 ライセンスにより使用許諾されます。コードサンプルは Apache 2.0 ライセンスにより使用許諾されます。詳しくは、Google Developers サイトのポリシーをご覧ください。Java は Oracle および関連会社の登録商標です。
最終更新日 2024-12-23 UTC。
-