Compute Engine ディスク スナップショットのベスト プラクティス


Persistent Disk と Google Cloud Hyperdisk スナップショットはいつでも作成できますが、以下のベスト プラクティスを利用することで、より迅速にかつ信頼性の高いスナップショットを作成できます。

セキュリティ上の考慮事項

意図しない権限昇格を防ぐには、スナップショットまたはインスタント スナップショット データの読み取りと復元で信頼できるプリンシパルにのみスナップショット関連の IAM 権限を付与してください。次の権限により、ユーザーはスナップショットまたはインスタント スナップショットからデータを読み取り、復元できます。

  • compute.snapshots.useReadOnly
  • compute.instantSnapshots.useReadOnly

上記の権限のいずれかを持つプリンシパルは、プロジェクトのスナップショットまたはインスタント スナップショットから、管理下のプロジェクト(別の組織内のプロジェクトを含む)にデータを復元できます。たとえば、悪意のあるユーザーがプロジェクトでスナップショットの IAM ロールを取得した場合、そのユーザーは個人のプロジェクトにスナップショットを復元し、スナップショットに含まれるデータにアクセスできます。

プリンシパルに付与されている権限を確認する方法については、特定のロールまたは権限を持つプリンシパルを特定するをご覧ください。

整合性のとれたスナップショット取得に向けた準備

アプリケーションの実行中に Persistent Disk のスナップショットを作成すると、スナップショットはメモリからディスクに転送中で保留状態となっている書き込みを取得できない可能性があります。このような不整合によって、スナップショットには取得時のアプリケーションの状態が正確に反映されないことがあります。この場合、スナップショットが取得されたときにあたかもマシンがクラッシュした場合と同じようにアプリケーションの状態がキャプチャされるため、このスナップショットはクラッシュ整合性とみなされます。

必要に応じてアプリケーションを一時停止できます。これにより、すべてのアプリケーション トランザクションが完了し、スナップショットが取得される前にシステムが保留中のすべての書き込みをメモリからフラッシュできます。この場合、スナップショットはアプリケーション整合性とみなされます。

クラッシュ整合性のあるスナップショットの作成

Persistent Disk のスナップショットを取得する場合は、クラッシュ整合性のあるスナップショットにするために追加の手順を行う必要はありません。特にワークロードを一時停止する必要はありません。

ワークロードで一時停止を許容できない場合は、クラッシュ整合性のあるスナップショットを作成するための次のプロセスを検討してください。

  1. アプリケーションの実行中にスナップショットを取得する場合は、アプリケーション データにある程度の不整合が生じると想定します。
  2. スナップショットからワークロードを復元して、許容されるアプリケーションの状態になることを確認します。
  3. 前の手順に基づき、スナップショットを保持または削除します。

クラッシュ整合性のあるスナップショットでは、通常、使用する前にファイル システムとアプリケーション レベルのジャーナルをリプレイする必要があります。したがって、スナップショットの品質は、アプリケーションがクラッシュ整合性のある状態からサービス提供状態にどれだけ迅速に復旧できるかによって左右されます。

アプリケーション整合性のあるスナップショットの作成

  • Windows Server ユーザー: Windows Server インスタンスにアタッチされているディスクの場合は、VSS スナップショットを使用します。
  • Linux ユーザー: Linux インスタンスにアタッチされたディスクのスナップショットでアプリケーションの整合性を実現するには、スナップショット前とスナップショット後のシェル スクリプトを作成して、システムの整合性を確保します。次に、guest-flush オプションを有効にして、スナップショットを作成します。これにより、スナップショットがキャプチャされる前後に、スナップショット前と後のスクリプトが実行されます。手順については、Linux アプリケーション間で整合性のあるスナップショットを作成するをご覧ください。

アプリケーション整合性のあるスナップショットを手動で作成する

アプリケーション整合性のあるスナップショットを作成するには、状況によっては手動でアプリケーションを一時停止する必要があります。

たとえば、複数の Persistent Disk や Hyperdisk ボリューム間でアプリケーション整合性が必要な場合は、このオプションを使用します。この場合、アプリを再開する前に各ディスク上のすべてのファイル システムをフリーズし、それらのディスクのスナップショットをすべて完了する必要があります。

VM を停止する必要はありません。アプリケーションの一時停止には、ファイル システムのフリーズやマウント解除などが含まれます。アプリケーションを手動で一時停止した後に、スナップショット リソースが UPLOADING ステータスに達した場合にのみ、ワークロードを再開します。

スナップショットをリクエストするときは、globalOperations.get メソッドを呼び出してオペレーションのステータスを確認します。次の表に、スナップショット オペレーションのステータスとスナップショット リソースのステータスの関係を示します。

オペレーションのステータス スナップショット リソースのステータス
PENDING スナップショット リソースはまだ存在しません。
RUNNING CREATING または UPLOADING

CREATING: スナップショットの作成がまだ完了していません。
UPLOADING: スナップショットは作成済みですが、まだ Cloud Storage に保存されていません。
DONE FAILED または READY

スナップショット頻度の上限

ディスクのスナップショットの取得頻度には制限があります。

Persistent Disk または Hyperdisk からスナップショットを作成する

個々のディスクのスナップショットは、60 分ごとに最大 6 回作成できます。

上限を超えるとオペレーションは失敗し、次のエラーが返されます。

"code": "RESOURCE_OPERATION_RATE_EXCEEDED",
"message": "Operation rate exceeded for resource 'projects/project-id/zones/zone-id/disks/disk-name'.
Too frequent operations from the source resource."

この上限は次のオペレーションに適用されます。

この上限は、次のオペレーションには適用されません

ディスクのスナップショットは 1 時間に 1 回作成することをおすすめします。それ以上の頻度でスナップショットを取得することは避けます。これを実現する最も簡単な方法は、スナップショット スケジュールを設定することです。

スナップショットから新しいゾーンディスクを作成する

指定されたスナップショットから、ターゲット ゾーンごとに新しいゾーン Persistent Disk または Hyperdisk を最大で 10 分ごとに作成できます。ターゲット ゾーンとは、スナップショットから作成された新しいディスクのストレージの場所を指します。過去 1 時間にスナップショットからディスクを作成しなかった場合、この頻度よりも多くスナップショットからディスクを作成できることを Google Cloud が保証するものではありませんが、より速く作成できる可能性があります。

同じディスクの複数のスナップショットは、この頻度の上限に関しては個別のスナップショットとみなされます。

上限を超えるとオペレーションは失敗し、次のエラーが返されます。

"code": "RESOURCE_OPERATION_RATE_EXCEEDED",
"message": "Operation rate exceeded for resource 'projects/project-id/global/snapshots/snapshot-name'.
Too frequent operations from the source resource."

この上限は次のオペレーションに適用されます。

この上限は、次のオペレーションには適用されません

  • スナップショットから新しいリージョン Persistent Disk を作成する。
  • イメージをソースとして使用して、新しいゾーンまたはリージョン Persistent Disk を作成する。

スナップショットから複数のディスクを作成するには、スナップショットを使用してイメージを作成し、次にイメージからディスクを作成します。

  1. スナップショットからイメージを作成する
  2. イメージからディスクを作成する

非ブートディスクの場合は、イメージから永続ディスクを作成する手順に沿って、次のように操作します。

  • Google Cloud コンソールで、ディスクの [ソースの種類] として [イメージ] を選択します。
  • gcloud CLI の場合は、image フラグを使用します。
  • REST を使用している場合は、sourceImage パラメータを使用します。

既存のスナップショットを後続のスナップショットのベースラインとして使用する

ディスク(Persistent Disk または Hyperdisk)の既存のスナップショットがある場合は、そのディスクから作成する後続のスナップショットのベースラインとして自動的に使用されます。

  • ディスクから以前のスナップショットを削除する前に、そのディスクから新しいスナップショットを作成します。以前のスナップショットを使用でき、新規または変更されたデータのみをディスクから読み込める場合、システムは新しいスナップショットをより迅速に作成できます。
  • 新しいスナップショットが完了するまで待ってから、後続のスナップショットを同じディスクから取得します。同じディスク上で 2 つのスナップショットを同時に実行すると、両方とも同じベースラインから開始し、作業が重複します。新しいスナップショットの完了を待つと、後続のスナップショットは、最後のスナップショットの終了後に変更されたデータを取得するだけで済むため、より迅速に作成されます。

オフピーク時にスナップショットをスケジュールする

ディスク(Persistent Disk または Hyperdisk)の定期的なスナップショットをスケジュールする場合、可能な限りオフピーク時にスナップショットを作成することによって、各スナップショットの完了に要する時間を短縮できます。

  • ディスクが設置されているゾーンの営業時間内に自動スナップショットをスケジュールします。通常、スナップショットの作成は営業日の終わりにピークに達します。
  • ディスクが設置されているゾーンの深夜 0 時直後ではなく、早朝に自動スナップショットをスケジュールします。通常、スナップショットの作成は深夜 0 時にピークに達します。

データを別々のディスクに整理する

ディスク(Persistent Disk または Hyperdisk)のスナップショットを作成すると、ディスクに保存するすべてのデータがスナップショットに含まれます。データ量が大きいほど、作成されるスナップショットが大きくなるため、コストが増加し、作成に時間がかかります。必要なデータだけのスナップショットを作成するには、データを別々のディスクに整理します。

  • 重要なデータは、ブートディスクではなくセカンダリ ディスクまたはデータディスクに保存します。これにより、必要なときにのみ、または頻度の低いスケジュールで、ブートディスクのスナップショットを作成できます。
  • ブートディスクのスナップショットを作成する場合は、スワップ パーティション、ページファイル、キャッシュ ファイル、重要性の低いログを別のディスクに保存します。これらのファイルとパーティションは頻繁に変更され、スナップショット プロセスはそれらを、増分スナップショットに含める必要のある変更されたデータとして識別する可能性が高くなります。
  • 類似のデータを 1 つのディスクにまとめて保存することで、作成する必要があるスナップショットの数を減らします。オペレーティング システムと揮発性のデータはスナップショットを作成するデータと別に保存するべきですが、物理マシンの場合のように複数のディスクに重要なデータを分散させる必要はありません。1 つの大きなディスクで、同じ合計サイズの複数の小さなディスクと同じパフォーマンスを実現できます。

ディスクで discard オプションを有効にするか、fstrim を実行する

Linux インスタンスで、破棄オプションを使用してディスク(Persistent Disk または Hyperdisk)をフォーマットしてマウントしなかった場合は、スナップショットを作成する前に fstrim コマンドを実行します。このコマンドは、ファイル システムが必要としなくなったブロックを削除し、システムがスナップショットをより迅速かつ小さなサイズで作成できるようにします。ディスクで破棄オプションを構成する方法については、Linux VM で非ブートディスクをフォーマットしてマウントするをご覧ください。

よく使用するスナップショットのイメージを作成する

同じゾーンのスナップショットを繰り返し使用してディスク(Persistent Disk または Hyperdisk)を作成している場合は、スナップショットを 1 回使用し、そのスナップショットのイメージを作成することで、ネットワーク費用を削減できます。このイメージを保存してディスクを作成し、VM インスタンスを起動します。手順については、カスタム イメージの作成をご覧ください。

ディスクのスナップショットは 1 時間に 1 回作成することをおすすめします。それ以上の頻度でスナップショットを取得することは避けます。これを実現する最も簡単な方法は、スナップショット スケジュールを設定することです。

その他のベスト プラクティス

  • ext4 などのジャーナリング ファイル システムを使用することで、永続ディスクに実際に書き込まれることなくデータがキャッシュに保存されるリスクを低減させるようにします。
  • データのスナップショットを定期的に作成して、予期しない障害によるデータ損失を最小限に抑えます。

次のステップ