インスタンスの一時停止と再開

このドキュメントでは、仮想マシン(VM)インスタンスを一時停止および再開する方法について説明します。インスタンスの停止と起動の方法については、インスタンスの停止と起動をご覧ください。インスタンスのライフサイクルについては、インスタンスのライフサイクルのドキュメントをご覧ください。

インスタンスを一時停止すると、ACPI S3 一時停止信号がインスタンスのオペレーティング システムに送信されます。インスタンスの一時停止は、ノートパソコンのカバーを閉じてインスタンスを SUSPENDED 状態にすることに似ています。インスタンスの一時停止は次の場合に最適です。

  • 夜間や週末などのオフ時間に使用率が低い開発環境やテスト環境。新しい VM インスタンスを作成する場合よりもコストを抑え、短時間で初期化を行うことができます。
  • 仮想デベロッパー ワークステーションや複雑な Java アプリケーションなど、インスタンスの起動が完了してから最初のリクエストを処理するまでに初期化に時間がかかるアプリケーション。

インスタンスの一時停止は、次の点でインスタンスの停止とは異なります。

  • インスタンス一時停止では、ゲスト OS のメモリ、デバイスの状態、アプリケーションの状態が保持されます。
  • 一時停止しているインスタンスに対して料金が発生します
  • インスタンスを一時停止できる期間は最長で 60 日です。60 日が経過すると、インスタンスは自動的に TERMINATED 状態になります。

ローカル SSD データを除いて、インスタンスに接続されているすべてのリソースはインスタンスへの接続を維持し、課金対象になります。これには永続ディスク、静的 IP アドレス、予約済みの外部 IP アドレスが含まれます。インスタンスが一時停止している場合でも、これらのリソースはすべて料金表に従って課金されます。

ゲスト環境に組み込まれている標準プロセスを使用してインスタンスを一時停止することはできません。Ubuntu 16.04 以降の systemctl suspend コマンドは使用できません。インスタンスを一時停止するには、gcloud コマンドライン ツールまたは Compute Engine API を使用する必要があります。

後でインスタンスを再開するときに、インスタンスのメモリやデバイスの状態を復元する必要がない場合は、インスタンスを停止できます。この場合、追加のストレージ料金は発生しません。

始める前に

ベータ版の制限

ベータ版では、この機能には次の制限事項が適用されます。

  • GPU を使用するインスタンスは停止できません。
  • ローカル SSD が接続されているインスタンスは一時停止できますが、ローカル SSD データを破棄する場合は、特別なフラグを使用してローカル SSD の内容を破棄する必要があります。詳細については、VM インスタンスの一時停止をご覧ください。
  • ゲスト環境に組み込まれている標準プロセスを使用してインスタンスを一時停止することはできません。Ubuntu 16.04 以降の systemctl suspend コマンドは使用できません。ゲスト内の信号は無視されます。
  • インスタンスを一時停止できる期間は最大 60 日です。この期間を経過すると、VM が自動的に停止します。
  • メモリが 120 GB を超えるインスタンスは一時停止できません。
  • プリエンプティブル インスタンスは一時停止できますが、正常に一時停止する前に終了することがあります。
  • ベータ版では、Compute Engine が一時停止されたインスタンスの保持されたメモリの状態を破棄する場合があります。Compute Engine は、保持されたメモリの状態を消去する必要がある場合にはインスタンスを TERMINATED 状態に移行します。そのため、instances.start メソッドを使用して通常どおりにインスタンスを再起動できます。

OS の互換性

Compute Engine で提供されているほとんどのオペレーティング システムは、一時停止と再開の機能をサポートしていますが、サポートしていない OS もあります。次の表を使用して、OS で一時停止と再開がサポートされているかどうか確認してください。

イメージ ファミリー バージョン ステータス
サポート対象の OS
Ubuntu 16、18、19 以降 サポート対象 なし
Container-Optimized OS 69、73、77、81 以降 サポート対象 なし
RHEL 7 サポート対象 なし
CentOS 7 サポート対象 なし
Windows 2012、2016、2019 以降 サポート対象 なし
SUSE(SLES) 12、15 以降 サポート対象 なし
Debian 8、9 サポート対象。ただし、いくつかの構成が必要です。 Debian 8、9 の構成手順
サポートされていない OS
CentOS 6、8 未対応 なし
RHEL 6、8 未対応 なし
Windows Server 上の SQL Server すべて 未対応 なし
RHEL for SAP すべて 未対応 なし
Debian 10 未対応 なし
CoreOS すべて 未対応 なし

料金

インスタンスを一時停止すると、次のものに対して料金が発生します。

インスタンスの一時停止

インスタンスを一時停止するには、Cloud Consolegcloud ツール、またはベータ版 API を使用します。

ゲスト環境に組み込まれている標準プロセスを使用してインスタンスを一時停止することはできません。インスタンスを一時停止するには、Cloud Consolegcloud コマンドライン ツール、または API を使用します。

Console

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

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

  2. 一時停止するインスタンスを 1 つ以上選択します。

  3. [停止] をクリックします。

  4. プロンプトが表示され、ローカル SSD のデータを破棄する場合は、[SSD のコンテンツを破棄] を選択します。インスタンスが再開されたときに、インスタンス上のローカル SSD データは破棄されています。

gcloud

gcloud コマンドライン ツールでインスタンスを一時停止するには:

 gcloud beta compute instances suspend INSTANCE_NAME

インスタンスの一時停止をリクエストした後に、Compute Engine でインスタンスのすべての必要なデータを保持するために時間がかかることがあります。この間、実行中のインスタンスに対して引き続き料金が発生します。

一時停止されたインスタンスは、SUSPENDED ステータスでマークされます。describe リクエストを実行してインスタンスのステータスを確認します。

gcloud compute instances describe INSTANCE_NAME

ローカル SSD データが含まれるインスタンスを一時停止する際、--discard-local-ssd フラグを指定してローカル SSD データを消去する必要があります。

gcloud beta compute instances suspend INSTANCE_NAME --discard-local-ssd

API

API で、instances.suspend メソッドを使用してリクエストを送信します。

https://www.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME/suspend

以下のように置き換えます。

  • PROJECT_ID: プロジェクト ID
  • ZONE: VM のゾーン
  • INSTANCE_NAME: 一時停止するインスタンス

インスタンスの一時停止をリクエストした後に、Compute Engine でインスタンスのすべての必要なデータを保持するために時間がかかることがあります。この間、実行中のインスタンスに対して料金が発生します。

Compute Engine は、一時停止されたインスタンスに SUSPENDED ステータスのマークを付けます。GET リクエストを実行してインスタンスのステータスを確認します。

GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME

インスタンスのステータスは、ステータス フィールドに表示されます。例:

...
"zone": "https://content.googleapis.com/compute/v1/projects/example-project/zones/us-central1-a",
"status": "SUSPENDED",
"name": "example-vm",
...

ローカル SSD データが含まれるインスタンスを一時停止するには、オプションの discardLocalSsd クエリ パラメータを指定してローカル SSD データを消去する必要があります。

https://www.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME/suspend?discardLocalSsd=true

一時停止されたインスタンスの再開

一時停止されたインスタンスを再開するには、Cloud Consolegcloud ツール、またはベータ版 API を使用します。

Console

  1. Google Cloud Console で、[VM インスタンス] ページに移動します。

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

  2. 再開するインスタンスを 1 つ以上選択します。

  3. [開始 / 再開] をクリックします。

gcloud

gcloud コマンドライン ツールでインスタンスを再開するには:

 gcloud beta compute instances resume INSTANCE_NAME

インスタンスの再開をリクエストした後に、Compute Engine でインスタンスに必要なすべてのデータを復元する際に時間がかかることがあります。この間、再開中のインスタンスに対して料金が発生します。

インスタンスが再開されると、RUNNING とマークされます。インスタンスのステータスを確認するには、次のように describe リクエストを実行します。

gcloud compute instances describe INSTANCE_NAME

API

instances.resume メソッドにリクエストを送信します。

https://www.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME/resume

以下のように置き換えます。

  • PROJECT_ID: このリクエストのプロジェクト ID。
  • ZONE: VM のゾーン
  • INSTANCE_NAME: 再開するインスタンス

インスタンスの再開をリクエストした後に、Compute Engine でインスタンスに必要なすべてのデータを復元する際に時間がかかることがあります。この間、再開中のインスタンスに対して料金が発生します。

再開が完了すると、Compute Engine によりそのインスタンスに RUNNING ステータスのマークが付けられます。GET リクエストを実行してインスタンスのステータスを確認します。

GET https://compute.googleapis.com/compute/v1/projects/example-project/zones/us-central1-a/instances/example-instance

インスタンスのステータスは、ステータス フィールドに表示されます。例:

...
"zone": "https://content.googleapis.com/compute/v1/projects/example-project/zones/us-central1-a",
"status": "RUNNING",
"name": "example-instance",
...

暗号化されたディスクのあるインスタンスの再開

再開するインスタンスが顧客指定の暗号鍵を使用している場合、インスタンスを再開するときにその鍵を指定する必要があります。

gcloud ツールまたは API を使用してインスタンスを再開します。

gcloud

--csek-key-file フラグと開始するインスタンスの名前を使用して鍵を指定します。RSA でラップされた鍵を使用している場合は、gcloud beta コンポーネントを使用します。

gcloud beta compute instances resume INSTANCE_NAME \
  --csek-key-file ENCRYPTION_KEY_FILE

以下を置き換えます。

  • INSTANCE_NAME: インスタンスの名前
  • ENCRYPTION_KEY: インスタンスに接続している永続ディスクの暗号化に使用された暗号鍵を含むファイルの相対パス

API

instances.resume メソッドに POST リクエストを作成し、暗号鍵を使用してインスタンスを再開します。

POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME/resume
{
  "disk": [
    {
       "source": "DISK_NAME",
       "diskEncryptionKey": {
         "rsaEncryptedKey": "ENCRYPTION_KEY"
       }
    }
  ]
}

以下のように置き換えます。

  • INSTANCE_NAME: インスタンスの名前
  • PROJECT_ID: このリクエストのプロジェクト ID。
  • ZONE: このインスタンスのゾーン
  • DISK_NAME: 顧客指定の暗号鍵で暗号化され、接続しているディスク
  • ENCRYPTION_KEY: インスタンスに接続している永続ディスクの暗号化に使用された暗号鍵

一致する diskEncryptionKey を使用して、暗号化された各ディスクを指定する必要があります。インスタンスが SUSPENDED 状態の場合、Compute Engine はサーバーに鍵を保存しません。

一時停止プロセス

一時停止リクエストを行うと、ACPI 一時停止信号が VM インスタンスに送信されます。数分以内に VM が ACPI S3 一時停止信号に応答しない場合、Compute Engine は一時停止をキャンセルし、VM を RUNNING 状態に戻します。

以下の表に、VM インスタンスの一時停止がその関連リソースに及ぼす影響について説明します。

リソース サポート
メモリ 一時停止ができるのは、メモリが 120 GB 以下の VM のみです。
ローカル SSD ローカル SSD のデータは破棄されます。
永続ディスク 永続ディスク(HDD と SSD)は保持されます。
IP アドレス 一時停止時に VM インスタンスのエフェメラル IP は解放されますが、静的 IP は解放されません。エフェメラル ID を保持する場合は、ID を昇格します。
VM 構成(マシンタイプ、メタデータ、ラベルなど) エフェメラル IP アドレスを除くすべての VM 構成は保持され、インスタンスの再開時に復元されます。

ローカル SSD とプリエンプティブル VM

ローカル SSD の内容はインスタンスの一時停止時に保持されません。デフォルトでは、ローカル SSD があるインスタンスを一時停止するとエラーが返されます。このデフォルトの動作は、ローカル SSD データを無効にするフラグでオーバーライドできます。これにより、インスタンスを一時停止して再開できますが、処理中にローカル SSD の内容が破棄されます。このシナリオでは、Compute Engine は、接続している数のローカル SSD ボリュームを持つインスタンスを再開しますが、ボリュームは空で、初期化されません。

プリエンプティブル VM は一時停止できますが、一時停止操作が完了する前にプリエンプションが発生すると(プリエンプションの事前警告ではありません)、一時停止が終了し、インスタンスがプリエンプトされます。

一時停止と再開をサポートする Debian VM の構成

Debian 8 と 9 を実行している VM は一時停止と再開が可能ですが、事前に構成を行う必要があります。Debian インスタンスを構成するには、次のいずれかの手順(オプション A または B)を行います。可能であれば、ACPID を構成することをおすすめします(オプション A)。

オプション A

このオプションでは、スリープボタン イベントを処理するように ACPID を構成し、スリープ イベントを処理するシェル スクリプトを追加します。

  1. ssh を使用して VM インスタンスに接続します。

    gcloud compute instances ssh INSTANCE_NAME
    
  2. VM インスタンスで、acpi フォルダの下にディレクトリを作成します。

    sudo mkdir -p /etc/acpi/events/
    
  3. スリープボタン イベントを処理するように ACPID を構成します。

    cat <<EOF | sudo tee /etc/acpi/events/sleepbtn-acpi-support
    event=button[ /]sleep
    action=/etc/acpi/sleepbtn-acpi-support.sh
    EOF
    
  4. スリープ イベントを処理するスクリプトを作成します。

    cat <<EOF | sudo tee /etc/acpi/sleepbtn-acpi-support.sh
    #!/bin/sh
    echo mem > /sys/power/state
    EOF
    
  5. スクリプトの権限を設定します。

    sudo chmod 755 /etc/acpi/sleepbtn-acpi-support.sh
    
  6. ACPID を再起動します。

    sudo systemctl restart acpid.service
    

オプション B

  1. ssh を使用して VM インスタンスに接続します。

    gcloud compute instances ssh INSTANCE_NAME
    
  2. VM インスタンスに dbus をインストールします。

    sudo apt-get install dbus
    
  3. logind を再起動します。

    sudo systemctl restart systemd-logind.service
    

次のステップ