永続ディスクのスナップショットの作成

スナップショットを作成して、ゾーン永続ディスクまたはリージョン永続ディスクからデータを定期的にバックアップします。予期しないデータ損失のリスクを軽減するため、スナップショット スケジュールを設定して、データが定期的にバックアップされるようにすることも検討してください。

スナップショットの削除と、スナップショットから永続ディスクへのデータの復元については、永続ディスクのスナップショットの復元と削除をご覧ください。

ディスクが実行中のインスタンスにアタッチされている場合でも、ディスクからスナップショットを作成できます。スナップショットはグローバル リソースであるため、同じプロジェクトに属するすべてのリソースからアクセスできます。また、プロジェクト間でスナップショットを共有することもできます。

スナップショットは公開イメージおよびカスタム イメージとは異なるものです。これらは主に、インスタンス用のブートディスクの作成、またはインスタンス テンプレート用のブートディスクの構成に使用されます。

Compute Engine ではデータの整合性を確保するため、自動チェックサムを使用して各スナップショットの複数のコピーを複数のロケーションに保存します。

始める前に

制限事項

増分スナップショットの仕組み

スナップショットは増分であり自動的に圧縮されるため、ディスクの完全なイメージを定期的に作成するよりも短時間かつ大幅に低いコストで永続ディスクの定期的なスナップショットを作成できます。増分スナップショットは次のように機能します。

  • 永続ディスクの最初の正常なスナップショットは、永続ディスクのすべてのデータを含む完全なスナップショットです。
  • 2 番目のスナップショットには、1 番目のスナップショットより後に新規作成または変更されたデータのみが含まれます。スナップショット 1 以降に変更されていないデータは含まれません。変更されていないデータについては、スナップショット 2 にスナップショット 1 への参照が含まれます。
  • スナップショット 3 には、スナップショット 2 以降に新規作成または変更されたデータは含まれますが、スナップショット 1 または 2 以降に変更されていないデータは含まれません。変更されていないデータについては、スナップショット 3 にスナップショット 1 とスナップショット 2 のブロックへの参照が含まれます。

これが、永続ディスクのすべての後続のスナップショットについて繰り返されます。スナップショットは常に、正常に取得された最新のスナップショットに基づいて作成されます。

スナップショットの作成方法を説明する図

gcloud ツールまたは Compute Engine API を使用して、スナップショットの chainName を指定することで、スナップショット チェーンごとにスナップショットを作成できます。チェーン名を使用して永続ディスクのスナップショットを複数作成する場合、各スナップショットは、そのチェーン名で最後に正常に作成されたスナップショットからの増分で作成されます。この機能はベータ版です。このフィールドは、チャージバック トラッキングなど、別のスナップショット チェーンを作成する必要がある高度なサービスのオーナーのみが使用してください。

プロジェクトのスナップショットの一覧表示

プロジェクトで使用可能なスナップショットのリストを表示するには、gcloud compute snapshots list コマンドを使用します。

gcloud compute snapshots list

スナップショットの情報の表示

作成時刻、サイズ、ソースディスクなど、特定のスナップショットについての情報を一覧表示するには、gcloud compute snapshots describe コマンドを使用します。

gcloud compute snapshots describe [SNAPSHOT_NAME]

ここで、[SNAPSHOT_NAME] は、スナップショット情報を表示するスナップショットの名前です。

スナップショットのストレージ ロケーションの選択

スナップショットを作成するときに、ストレージ ロケーションを指定できます。スナップショットのロケーションは、可用性に影響するとともに、スナップショットの作成または新しいディスクへの復元の際にネットワーク コストを発生させる要因となる可能性があります。

スナップショットは、1 つの Cloud Storage マルチリージョン ロケーションasia など)、または 1 つの Cloud Storage リージョン ロケーションasia-south1 など)のいずれかに保存できます。

マルチリージョンのストレージ ロケーションを使用することにより、可用性を向上できます。また、スナップショットを作成または復元するときのネットワーク コストを削減できる場合があります。たとえば、マルチリージョン ロケーションに保存されたスナップショットからディスクを作成しても、新しい永続ディスクがマルチリージョン グループのリージョンの 1 つに作成される限り、ネットワーク コストは発生しません。リージョンのストレージ ロケーションを使用すると、単一のリージョンが指定されるため、データの物理的な位置をより細かく制御できます。

スナップショットのストレージの場所に関係なく、スナップショットを使用すると任意のリージョンとゾーンに新しいディスクを作成できます。

リソース ロケーションの制約を含む組織のポリシーがある場合、指定するスナップショット ストレージの場所は、制約で定義された一連のロケーション内に置かれる必要があります。詳細については、Compute Engine リソースのロケーションをご覧ください。

スナップショットのストレージ ロケーションを指定しない場合、Google Cloud はデフォルトのロケーションを使用します。この場合、ソースディスクのリージョンに最も近い Cloud Storage マルチリージョン ロケーションにスナップショットを保存します。リージョンのストレージを選択する必要がある場合、または別のマルチリージョン ロケーションを指定する必要がある場合は、カスタム ロケーションにスナップショットを保存してください。

デフォルトのロケーション

ストレージ ロケーションを指定しない場合、スナップショットは永続ディスクのロケーションから地理的に最も近いマルチリージョンに保存されます。

たとえば、永続ディスクが us-central1 に保存されている場合、スナップショットは us マルチリージョンにデフォルトで保存されます。

ただし、australia-southeast1 のようなデフォルトのロケーションはマルチリージョンのいずれにも該当しません。最も近いマルチリージョンは asia です。スナップショットの作成と復元には ネットワーク コストが発生します。

デフォルトのロケーションをスナップショットの保存先とする例としては、次のような場合があります。

  • デフォルトのマルチリージョン ロケーションが、企業または政府のデータ配置ポリシーを満たしている。
  • 永続ディスクが、デフォルトのマルチリージョン ロケーションに含まれるリージョン ロケーションに保存されている。たとえば、永続ディスクが us-central1 リージョンにあるとすると、デフォルトのマルチリージョンは us になります。この使用例では、スナップショットの復元に時間がかかることがあるため、パフォーマンスより可用性を優先します。
  • スナップショットをデフォルトのロケーション外のディスクに頻繁に復元することを要求しない。

カスタム ロケーション

スナップショットをリージョン ロケーションに保存する場合、あるいは異なるマルチリージョン ロケーションを指定する必要がある場合は、カスタム ロケーションを選択します。

スナップショットの保存先としてカスタム ロケーションを選択する場合の例をいくつか示します。

  • カスタムのマルチリージョン ロケーションが、企業または政府のデータ配置ポリシーを満たしている。
  • アプリは、Cloud Storage マルチリージョンのいずれにも含まれていないリージョンにデプロイされます。スナップショット可用性よりもスナップショット復元のパフォーマンスが優先されます。
  • デフォルトのスナップショットのロケーション外にあるディスクから、スナップショットを何度も復元する。

企業または政府のデータ配置ポリシーに準拠する必要がある場合は、そのポリシーに準拠している最も近いリージョン ロケーションにスナップショットを保存してください。

アプリケーションがマルチリージョン内にデプロイされておらず、スナップショットの可用性よりもネットワーク コストを優先する場合は、ソースディスクがあるリージョンにスナップショットを保存します。ソースディスクがあるリージョンにスナップショットを保存すると、そのソースディスクからのスナップショットの復元と作成にかかるネットワークコストが最小限に抑えられます。

ただし、マルチリージョンのストレージ ロケーションとは異なり、リージョンのストレージ ロケーションでは、複数のデータセンターにまたがってデータが重複して保存されないため、大規模な障害が発生した場合はデータにアクセスできない可能性があります。データの可用性を確保するために、別のロケーションに同じスナップショットを重複して保存しておくことも考えられます。

ネットワーク コスト

ネットワーク コストを最小限にする上で、スナップショットの保存場所は重要な要素になります。スナップショットをソースディスクと同じリージョンに保存した場合、同じリージョンからスナップショットにアクセスする際にはネットワークの使用料金はかかりません。別のリージョンからスナップショットにアクセスすると、ネットワークの使用料金が発生します。

ソースディスクの地理的な保存場所がマルチリージョンと同じである場合、ネットワークの使用料金は発生しません。

たとえば、ソースディスクが asia-east1-a にある場合、スナップショットを asia-east1 リージョンまたは asia マルチリージョンに保存できます。この場合、スナップショットにアクセスしてもネットワークの使用料金はかかりません。

リージョン間でアクセスすると、ネットワークの使用料金が発生します。たとえば、ソースディスクが asia-east1 にあり、スナップショットを asia-east2 に保存すると、スナップショットに使用するときにリージョンをまたいでアクセスすることになるため、ネットワーク コストが発生します。

australia-southeast1southamerica-east1 の 2 つのリージョンの場合、デフォルトでは、マルチリージョンの保存場所にスナップショットが保存されます。スナップショットを作成するときにデフォルト値を変更しない限り、ネットワーク コストが発生します。

  • ソースディスクが australia-southeast1 にある場合、デフォルトのスナップショットの保存場所は asia マルチリージョンになります。コストを抑えるには、デフォルトの保存場所を変更し、スナップショットを australia-southeast1 リージョンに保存します。
  • ソースディスクが southamerica-east1 にある場合、デフォルトのスナップショットの保存場所は us マルチリージョンになります。コストを抑えるには、デフォルトの保存場所を変更し、スナップショットを southamerica-east1 リージョンに保存します。

スナップショットのストレージ ロケーションに含まれていないリージョンに置かれたディスクにスナップショットを復元すると、ネットワーク コストが発生します。たとえば、australia-southeast1 で新しいリージョン永続ディスクをマルチリージョン ロケーションの asia に保存されたスナップショットから作成する場合、ネットワーク コストが発生します。

スナップショットの作成

永続ディスクのスナップショットを作成する準備として、次のことを行います。

ゾーン永続ディスクのスナップショットの作成

ディスクの準備をしてから、スナップショットを作成します。次の手順に従って、ゾーン永続ディスクのスナップショットを作成します。使用する永続ディスクが複数のゾーンにある場合は、リージョン永続ディスクのスナップショットの作成の手順に従ってください。

Console

  1. Google Cloud Console で [スナップショットの作成] ページに移動します。
    [スナップショットの作成] ページに移動
  2. スナップショットの [名前] を入力します。
  3. 必要に応じて、スナップショットの [説明] を入力します。
  4. プルダウン メニューから [ソースディスク] を選択します。
  5. スナップショットのストレージ ロケーションを指定します。デフォルトのストレージ ロケーション、またはカスタムのストレージ ロケーションを使用できます。

    1. [場所] で、スナップショットを [マルチリージョン] ロケーションに保存するか、[リージョン] ロケーションに保存するかを選択します。
    2. 使用する特定のリージョンまたはマルチリージョンを選択します。ソースディスクに最も近いリージョンまたはマルチリージョンを使用するには、[ソースディスクのロケーションに基づく(デフォルト)] を選択します。
  6. [作成] をクリックしてスナップショットを作成します。

gcloud

デフォルトのストレージ ロケーションまたは選択したストレージ ロケーションに、スナップショットを作成します。必要に応じて、--snapshot-names フラグを使用してスナップショット名を指定できます。デフォルトのスナップショット名は、文字で始まるランダムな 12 文字の英数字文字列です。

gcloud コマンドライン ツールは、このオペレーションに対して READYFAILED のステータスが返されるか、最長タイムアウトに達してスナップショットの最新の既知情報が返されるまで待機します。

API

デフォルトのストレージ ロケーションまたは選択したストレージ ロケーションに、スナップショットを作成します。必要に応じて、name フィールドを使用してスナップショット名を指定できます。デフォルトのスナップショット名は、文字で始まるランダムな 12 文字の英数字文字列です。

  • デフォルトのストレージ ロケーションにスナップショットを作成するには、disks.createSnapshot メソッドに対する POST リクエストを作成します。

    POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/disks/[DISK_NAME]/createSnapshot
    

    ここで

    • [PROJECT_ID] はプロジェクト ID です。
    • [ZONE] は、インスタンスとディスクが配置されているゾーンです。
    • [DISK_NAME] は、スナップショットを作成するゾーン永続ディスクの名前です。
  • カスタムのストレージ ロケーションにスナップショットを作成する場合には、disks.createSnapshot メソッドに対する POST リクエストを作成して、ストレージの場所を指定します。

    POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/disks/[DISK_NAME]/createSnapshot
    
    {
      "storageLocations": [STORAGE_LOCATION]
    }
    

    ここで

    • [PROJECT_ID] はプロジェクト ID です。
    • [ZONE] は、インスタンスとディスクが配置されているゾーンです。
    • [DISK_NAME] は、スナップショットを作成するゾーン永続ディスクの名前です。
    • [STORAGE_LOCATION] は、スナップショットを保存する Cloud Storage マルチリージョンまたは Cloud Storage リージョンです。ストレージ ロケーションは 1 つだけ指定できます。

リージョン永続ディスクのスナップショットの作成

ディスクの準備をしてから、スナップショットを作成します。リージョン永続ディスクのスナップショットを作成するときは、ディスクを配置するリージョンを指定する必要があります。

Console

  1. Google Cloud Console で [スナップショットの作成] ページに移動します。
    [スナップショットの作成] ページに移動
  2. スナップショットの [名前] を入力します。
  3. 必要に応じて、スナップショットの [説明] を入力します。
  4. [ソースディスク] で、スナップショットを作成する既存のディスクを選択します。
  5. 必要であれば、カスタム ストレージ ロケーションを指定できます。

    1. [場所] で、スナップショットを [マルチリージョン] ロケーションに保存するか、[リージョン] ロケーションに保存するかを選択します。
    2. 使用する特定のリージョンまたはマルチリージョンを選択します。ソースディスクに最も近いリージョンまたはマルチリージョンを使用するには、[ソースディスクのロケーションに基づく] を選択します。
  6. [作成] をクリックしてスナップショットを作成します。

gcloud

デフォルトのストレージ ロケーションまたは選択したストレージ ロケーションに、スナップショットを作成します。

  • デフォルトのストレージ ロケーションにリージョン永続ディスクのスナップショットを作成するには、gcloud compute disks snapshot コマンドを使用します。

    gcloud compute disks snapshot [DISK_NAME] \
        --region [REGION]
    

    ここで

    • [DISK_NAME] は、スナップショットを作成するリージョン永続ディスクの名前です。
    • [REGION] は、リージョン永続ディスクが配置されているリージョンです。
  • 必要であれば、カスタム ストレージ ロケーションを指定できます。

    gcloud compute disks snapshot [DISK_NAME] --region [REGION] \
        --storage-location [STORAGE_LOCATION]
    

    ここで

    • [DISK_NAME] は、スナップショットを作成するリージョン永続ディスクの名前です。
    • [REGION] は、リージョン永続ディスクが配置されているリージョンです。
    • [STORAGE_LOCATION] は、スナップショットを保存する Cloud Storage マルチリージョンまたは Cloud Storage リージョンです。ストレージ ロケーションは 1 つだけ指定できます。

    gcloud コマンドライン ツールは、このオペレーションに対して READYFAILED のステータスが返されるか、最長タイムアウトに達してスナップショットの最新の既知情報が返されるまで待機します。

API

  • デフォルトのストレージ ロケーションにスナップショットを作成するには、regionDisk.createSnapshot メソッドに対する POST リクエストを作成します。

    POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/[REGION]/disks/[DISK_NAME]/createSnapshot
    

    ここで

    • [PROJECT_ID] はプロジェクト ID です。
    • [REGION] は、リージョン永続ディスクが配置されているリージョンです。
    • [DISK_NAME] は、スナップショットを作成するディスクの名前です。
  • カスタムのストレージ ロケーションにスナップショットを作成する場合には、regionDisk.createSnapshot メソッドに対する POST リクエストを作成して、ストレージの場所を指定します。

    POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/[REGION]/disks/[DISK_NAME]/createSnapshot
    {
     "storageLocations": [STORAGE_LOCATION]
    }
    

    ここで

    • [PROJECT_ID] はプロジェクト ID です。
    • [REGION] は、リージョン永続ディスクが配置されているリージョンです。
    • [DISK_NAME] は、スナップショットを作成するリージョン永続ディスクの名前です。
    • [STORAGE_LOCATION] は、スナップショットを保存する Cloud Storage マルチリージョンまたは Cloud Storage リージョンです。ストレージ ロケーションは 1 つだけ指定できます。

プロジェクト間でのスナップショットの共有

プロジェクト間でディスクデータを移動するには、他のプロジェクト ディスクとディスクのスナップショットを共有します。たとえば、project-a のディスク disk-1 のデータを project-b の新しいディスク disk-2 に移動するには、次の手順を行います。この例では、disk-1 は、ゾーン us-west2-a にあり、instance-1 はゾーン us-west2-b にあります。

gcloud

  1. disk-1 のスナップショットを作成します。

    gcloud compute disks snapshot disk-1 --project project-a --snapshot-names snapshot-1
    
  2. スナップショットに基づく project-b に新しいディスクを作成します。

    gcloud compute disks create disk-2  --project project-b --source-snapshot projects/project-a/global/snapshots/snapshot-1
    
  3. 新しいディスクを project-b のインスタンス instance-1 にアタッチします。

    gcloud compute instances attach-disk instance-1 --project project-b --disk disk-2
    
  4. ディスクをマウントします。永続ディスクのフォーマットとマウントのステップ 5~7 をご覧ください。

API

  1. disks.createSnapshot メソッドに対する POST リクエストを作成し、disk-1 のスナップショットを作成します。

    POST https://compute.googleapis.com/compute/v1/projects/project-a/zones/us-west2-a/disks/disk-1/createSnapshot
    
    {
    "name": "snapshot-1"
    }
    
  2. スナップショットに基づく project-b に新しいディスク disk-2 を作成します。POST リクエストを作成して、disks.insert メソッドを使用しているゾーン永続ディスクを作成します。

    POST https://compute.googleapis.com/compute/v1/projects/project-b/zones/us-west2-b/disks
    
    {
    "name": "disk-2",
    "sizeGb": DISK_SIZE,
    "type": "zones/us-west2-b/diskTypes/DISK_TYPE"
    "sourceSnapshot": "projects/project-a/global/snapshots/snapshot-1"
    }
    

    次のように置き換えます。

    • DISK_SIZE: 新しいディスクのサイズ(GB)。
    • DISK_TYPE: 永続ディスクの種類(pd-standardpd-ssdpd-balanced のいずれか)。
  3. 新しいディスクを project-b のインスタンス instance-1 に接続します。ディスクは、インスタンスと同じゾーンに存在している必要があります。instances.attachDisk メソッドに対する POST リクエストを作成し、作成したゾーン永続ディスクへの URL をリクエスト本文に含めます。

    POST https://compute.googleapis.com/compute/v1/projects/project-b/zones/us-west2-b/instances/instance-1/attachDisk
    
    {
    "source": "/compute/v1/projects/project-b/zones/us-west2-b/disks/disk-2"
    }
    
  4. ディスクをマウントします。永続ディスクのフォーマットとマウントのステップ 5~7 をご覧ください。

プロジェクト内のスナップショットにアクセスするには、API リクエストまたは gcloud コマンドでプロジェクト ID を指定します。プロジェクト内のスナップショットにアクセスするには、そのスナップショットに対する compute.snapshots.useReadOnly ロールが必要です。プロジェクト内のすべてのスナップショットにアクセスするには、そのプロジェクトで compute.storageAdmin のロールが付与されている必要があります。

ID が SNAPSHOT_PROJECT_ID のプロジェクトで使用可能なスナップショットのリストを取得するには、次のコマンドを実行します。

gcloud compute snapshots list --project SNAPSHOT_PROJECT_ID

次のステップ