Mengelola snapshot disk


Snapshot disk standar membantu Anda mencadangkan data secara berkala dari Persistent Disk dan Google Cloud Hyperdisk Anda.

Anda dapat melihat, mencantumkan, dan menghapus snapshot disk. Anda juga dapat membagikan snapshot antar-project.

Sebelum memulai

  • Siapkan autentikasi, jika Anda belum melakukannya. Autentikasi adalah proses verifikasi identitas Anda untuk akses ke layanan dan API Google Cloud. Untuk menjalankan kode atau contoh dari lingkungan pengembangan lokal, Anda dapat melakukan autentikasi ke Compute Engine sebagai berikut.

    Pilih tab untuk melihat bagaimana Anda berencana menggunakan contoh di halaman ini:

    Konsol

    Saat menggunakan Konsol Google Cloud untuk mengakses API dan layanan Google Cloud, Anda tidak perlu menyiapkan autentikasi.

    gcloud

    1. Instal Google Cloud CLI, lalu initialize dengan menjalankan perintah berikut:

      gcloud init
    2. Menetapkan region dan zona default.

    REST

    Untuk menggunakan contoh REST API di halaman ini dalam lingkungan pengembangan lokal, gunakan kredensial yang Anda berikan ke gcloud CLI.

      Instal Google Cloud CLI, lalu initialize dengan menjalankan perintah berikut:

      gcloud init

Peran dan izin yang diperlukan

Untuk mendapatkan izin yang diperlukan untuk mengelola snapshot standar, minta administrator Anda untuk memberi Anda peran IAM berikut pada project:

Untuk mengetahui informasi selengkapnya tentang pemberian peran, lihat Mengelola akses.

Peran bawaan ini berisi izin yang diperlukan untuk mengelola snapshot standar. Untuk melihat izin yang benar-benar diperlukan, perluas bagian Izin yang diperlukan:

Izin yang diperlukan

Izin berikut diperlukan untuk mengelola snapshot standar:

  • Untuk mencantumkan snapshot: compute.snapshots.list di project
  • Untuk melihat informasi tentang snapshot: compute.snapshots.get di snapshot
  • Untuk menghapus snapshot: compute.snapshots.delete di snapshot
  • Untuk menghapus snapshot berdasarkan filter:
    • compute.snapshots.delete di snapshot
    • compute.snapshots.list pada project
  • Untuk membagikan data snapshot ke berbagai project:
    • compute.storageAdmin di project (untuk mengakses semua snapshot standar)
    • compute.disks.create pada project yang akan dibagikan
    • compute.snapshots.create di project sumber
    • compute.disks.createSnapshot pada disk sumber

Anda mung juga bisa mendapatkan izin ini dengan peran khusus atau peran bawaanlainnya.

Menampilkan snapshot standar di sebuah project atau lokasi

Anda dapat melihat atau membuat daftar snapshot standar di project atau lokasi menggunakan gcloud CLI, Google Cloud Console, atau REST.

Konsol

  1. Di konsol Google Cloud, buka halaman Snapshots.

    Buka halaman Snapshots

  2. Di tab Snapshots, Anda dapat melihat snapshot standar untuk project saat ini.

  3. Opsional. Persempit hasil dengan kolom Filter filter_list. Masukkan nama atau nilai properti di kolom Filter, atau pilih dari properti yang tersedia.

gcloud

Untuk melihat daftar snapshot yang tersedia bagi Anda dalam project tertentu, gunakan perintah gcloud compute snapshots list.

gcloud compute snapshots list --project=PROJECT_ID

Opsional. Ganti PROJECT_ID dengan project ID. Jika Anda menghilangkan flag ini, project saat ini akan digunakan. Anda dapat menetapkan project default untuk sesi Anda menggunakan perintah gcloud CLI gcloud config set project PROJECT_ID.

REST

Untuk melihat daftar snapshot yang tersedia bagi Anda di project tertentu, buat permintaan GET ke metode snapshots.list.

GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/snapshots

Ganti PROJECT_ID dengan project ID.

Menampilkan snapshot standar untuk disk

Anda dapat melihat daftar snapshot standar untuk disk menggunakan Konsol Google Cloud, gcloud CLI,atau REST.

Konsol

  1. Di konsol Google Cloud, buka halaman Snapshots.

    Buka halaman Snapshots

  2. Pada tab Snapshots, daftar semua snapshot standar dalam project akan muncul.

  3. Persempit hasil menurut disk sumber:

    1. Masukkan Source disk: di kolom filter_list Filter, atau klik kolom Filter, lalu pilih nilai Source disk dari daftar Properties.

    2. Pilih nama disk dari daftar Values yang muncul di samping Source disk: dalam kolom Filter.

      Snapshot yang ditampilkan di konsol kini menampilkan semua snapshot standar untuk disk yang ditentukan.

      Jika Anda tidak melihat nama disk dalam daftar Values, pada kolom Filter di samping Source disk:, ketik beberapa huruf pertama dari nama disk sumber untuk mengubah daftar nilai yang Anda lihat.

gcloud

Tampilkan daftar snapshot standar untuk disk dengan perintah gcloud compute snapshots list dan argumen --filter.

  • Menampilkan daftar snapshot standar untuk disk zona:

    gcloud compute snapshots list --filter="sourceDisk:projects/PROJECT_ID/zones/SOURCE_ZONE/disks/DISK_NAME
    
  • Buat daftar snapshot standar untuk disk regional:

    gcloud compute snapshots list --filter=sourceDisk:projects/PROJECT_ID/regions/SOURCE_REGION/disks/DISK_NAME
    

Ganti kode berikut:

  • PROJECT_ID: ID project.
  • SOURCE_ZONE: (Khusus disk zona) nama zona untuk disk, misalnya, us-west1-a.
  • SOURCE_REGION: (Khusus disk regional) nama region untuk disk, misalnya, us-west1.
  • DISK_NAME: nama disk, misalnya, disk-1.

REST

Mencantumkan snapshot standar untuk disk zona atau regional dengan permintaan GET ke metode snapshots.list.

Gunakan parameter kueri filter=sourceDisk untuk menentukan nama disk.

  • Menampilkan daftar snapshot standar untuk disk zona:

    GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/snapshots?filter=sourceDisk:'https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/SOURCE_ZONE/disks/DISK_NAME'
    
  • Buat daftar snapshot standar untuk disk regional:

    GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/snapshots?filter=sourceDisk:'https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/SOURCE_REGION/disks/DISK_NAME'
    

Ganti kode berikut:

  • PROJECT_ID: ID project.
  • SOURCE_ZONE: (Khusus disk zona) nama zona untuk disk, misalnya, us-west1-a.
  • SOURCE_REGION: (Khusus disk regional) nama region untuk disk, misalnya, us-west1.
  • DISK_NAME: nama disk sumber, misalnya disk-1.

Melihat informasi tentang snapshot standar

Ambil informasi mendetail tentang snapshot standar, seperti waktu pembuatan, disk sumber, dan ukurannya menggunakan Konsol Google Cloud, Google Cloud CLI, atau REST.

Konsol

  1. Di konsol Google Cloud, buka halaman Snapshots.

    Buka halaman Snapshots

  2. Pada tab Snapshots, lihat daftar snapshot di project.

  3. Di kolom Name, klik nama snapshot standar. Halaman Detail snapshot untuk snapshot yang dipilih akan muncul, yang menampilkan propertinya.

gcloud

Untuk melihat informasi tentang snapshot standar, gunakan perintah gcloud compute snapshots describe.

gcloud compute snapshots describe SNAPSHOT_NAME

Ganti SNAPSHOT_NAME dengan nama snapshot standar.

REST

Buat permintaan GET ke metode snapshots.get.

GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/snapshots/SNAPSHOT_NAME

Ganti kode berikut:

  • PROJECT_ID: nama project yang berisi snapshot standar.
  • SNAPSHOT_NAME: nama snapshot standar.

Menghapus snapshot

Compute Engine menggunakan snapshot diferensial sehingga setiap snapshot hanya berisi data yang telah berubah sejak snapshot sebelumnya. Karena snapshot berikutnya mungkin memerlukan informasi yang disimpan dalam snapshot sebelumnya, perlu diingat bahwa menghapus snapshot tidak berarti menghapus semua data pada snapshot tersebut.

Untuk mempelajari penghapusan snapshot lebih lanjut, baca Penghapusan snapshot.

Konsol

  1. Buka halaman Snapshots di Konsol Google Cloud.

    Buka halaman Snapshots

  2. Pilih satu atau beberapa snapshot yang ingin Anda hapus.

  3. Di bagian atas halaman Snapshots, klik Delete.

gcloud

Untuk menghapus snapshot, gunakan perintah gcloud compute snapshots delete.

gcloud compute snapshots delete SNAPSHOT_NAME

Ganti SNAPSHOT_NAME dengan nama snapshot yang ingin Anda hapus.

Go

import (
	"context"
	"fmt"
	"io"

	compute "cloud.google.com/go/compute/apiv1"
	computepb "cloud.google.com/go/compute/apiv1/computepb"
)

// deleteSnapshot deletes a snapshot of a disk.
func deleteSnapshot(w io.Writer, projectID, snapshotName string) error {
	// projectID := "your_project_id"
	// snapshotName := "your_snapshot_name"

	ctx := context.Background()
	snapshotsClient, err := compute.NewSnapshotsRESTClient(ctx)
	if err != nil {
		return fmt.Errorf("NewSnapshotsRESTClient: %w", err)
	}
	defer snapshotsClient.Close()

	req := &computepb.DeleteSnapshotRequest{
		Project:  projectID,
		Snapshot: snapshotName,
	}

	op, err := snapshotsClient.Delete(ctx, req)
	if err != nil {
		return fmt.Errorf("unable to delete snapshot: %w", err)
	}

	if err = op.Wait(ctx); err != nil {
		return fmt.Errorf("unable to wait for the operation: %w", err)
	}

	fmt.Fprintf(w, "Snapshot deleted\n")

	return nil
}

Java


import com.google.cloud.compute.v1.Operation;
import com.google.cloud.compute.v1.SnapshotsClient;
import java.io.IOException;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

public class DeleteSnapshot {

  public static void main(String[] args)
      throws IOException, ExecutionException, InterruptedException, TimeoutException {
    // TODO(developer): Replace these variables before running the sample.

    // Project ID or project number of the Cloud project you want to use.
    String projectId = "YOUR_PROJECT_ID";

    // Name of the snapshot to be deleted.
    String snapshotName = "YOUR_SNAPSHOT_NAME";

    deleteSnapshot(projectId, snapshotName);
  }

  // Delete a snapshot of a disk.
  public static void deleteSnapshot(String projectId, String snapshotName)
      throws IOException, ExecutionException, InterruptedException, TimeoutException {

    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the `snapshotsClient.close()` method on the client to safely
    // clean up any remaining background resources.
    try (SnapshotsClient snapshotsClient = SnapshotsClient.create()) {

      Operation operation = snapshotsClient.deleteAsync(projectId, snapshotName)
          .get(3, TimeUnit.MINUTES);

      if (operation.hasError()) {
        System.out.println("Snapshot deletion failed!" + operation);
        return;
      }

      System.out.println("Snapshot deleted!");
    }
  }
}

Node.js

/**
 * TODO(developer): Uncomment and replace these variables before running the sample.
 */
// const projectId = 'YOUR_PROJECT_ID';
// const snapshotName = 'YOUR_SNAPSHOT_NAME';

const compute = require('@google-cloud/compute');

async function deleteSnapshot() {
  const snapshotsClient = new compute.SnapshotsClient();

  const [response] = await snapshotsClient.delete({
    project: projectId,
    snapshot: snapshotName,
  });
  let operation = response.latestResponse;
  const operationsClient = new compute.GlobalOperationsClient();

  // Wait for the create disk operation to complete.
  while (operation.status !== 'DONE') {
    [operation] = await operationsClient.wait({
      operation: operation.name,
      project: projectId,
    });
  }

  console.log('Snapshot deleted.');
}

deleteSnapshot();

Python

from __future__ import annotations

import sys
from typing import Any

from google.api_core.extended_operation import ExtendedOperation
from google.cloud import compute_v1

def wait_for_extended_operation(
    operation: ExtendedOperation, verbose_name: str = "operation", timeout: int = 300
) -> Any:
    """
    Waits for the extended (long-running) operation to complete.

    If the operation is successful, it will return its result.
    If the operation ends with an error, an exception will be raised.
    If there were any warnings during the execution of the operation
    they will be printed to sys.stderr.

    Args:
        operation: a long-running operation you want to wait on.
        verbose_name: (optional) a more verbose name of the operation,
            used only during error and warning reporting.
        timeout: how long (in seconds) to wait for operation to finish.
            If None, wait indefinitely.

    Returns:
        Whatever the operation.result() returns.

    Raises:
        This method will raise the exception received from `operation.exception()`
        or RuntimeError if there is no exception set, but there is an `error_code`
        set for the `operation`.

        In case of an operation taking longer than `timeout` seconds to complete,
        a `concurrent.futures.TimeoutError` will be raised.
    """
    result = operation.result(timeout=timeout)

    if operation.error_code:
        print(
            f"Error during {verbose_name}: [Code: {operation.error_code}]: {operation.error_message}",
            file=sys.stderr,
            flush=True,
        )
        print(f"Operation ID: {operation.name}", file=sys.stderr, flush=True)
        raise operation.exception() or RuntimeError(operation.error_message)

    if operation.warnings:
        print(f"Warnings during {verbose_name}:\n", file=sys.stderr, flush=True)
        for warning in operation.warnings:
            print(f" - {warning.code}: {warning.message}", file=sys.stderr, flush=True)

    return result

def delete_snapshot(project_id: str, snapshot_name: str) -> None:
    """
    Delete a snapshot of a disk.

    Args:
        project_id: project ID or project number of the Cloud project you want to use.
        snapshot_name: name of the snapshot to delete.
    """

    snapshot_client = compute_v1.SnapshotsClient()
    operation = snapshot_client.delete(project=project_id, snapshot=snapshot_name)

    wait_for_extended_operation(operation, "snapshot deletion")

REST

Buat permintaan DELETE ke metode snapshots.delete untuk menghapus snapshot.

DELETE https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/snapshots/SNAPSHOT_NAME

Ganti kode berikut:

  • PROJECT_ID: nama project Anda
  • SNAPSHOT_NAME: nama snapshot yang akan dihapus.

Menghapus beberapa snapshot berdasarkan filter

Compute Engine menggunakan snapshot diferensial sehingga setiap snapshot hanya berisi data yang telah berubah sejak snapshot sebelumnya. Karena snapshot berikutnya mungkin memerlukan informasi yang disimpan dalam snapshot sebelumnya, menghapus snapshot tidak selalu menghapus semua data pada snapshot tersebut.

Untuk mempelajari penghapusan snapshot lebih lanjut, baca Penghapusan snapshot.

Anda dapat menghapus sejumlah snapshot berdasarkan filter tertentu. Untuk mengetahui informasi lebih lanjut cara menggunakan filter dengan gcloud CLI, lihat filter topik gcloud CLI.

Untuk menghapus snapshot, gunakan kombinasi perintah gcloud compute snapshots list dengan filter tertentu, dan perintah gcloud compute snapshots delete dengan xargs.

  gcloud compute snapshots list --filter="EXPRESSION" --uri |
  xargs gcloud compute snapshots delete
  

Ganti EXPRESSION dengan filter topik gcloud CLI.

Misalnya, --filter="creationTimestamp<'2023-12-31'" menghapus semua snapshot yang dibuat sebelum 31 Desember 2023.

Berbagi data snapshot di berbagai project dalam organisasi yang sama

Anda dapat menggunakan prosedur ini untuk memindahkan data dari disk dalam satu project ke disk di project yang berbeda dalam organisasi yang sama.

gcloud

  1. Buat snapshot standar di project tujuan menggunakan perintah gcloud compute snapshots create. Misalnya, untuk membuat snapshot Persistent Disk atau Hyperdisk zona, gunakan perintah berikut:

    gcloud compute snapshots create SNAPSHOT_NAME \
     --source-disk https://www.googleapis.com/compute/v1/projects/SOURCE_PROJECT_ID/zones/ZONE/disks/SOURCE_DISK_NAME \
     --project DESTINATION_PROJECT_ID
    

    Ganti kode berikut:

    • SNAPSHOT_NAME: Nama untuk snapshot baru.
    • SOURCE_PROJECT_ID: ID project untuk disk sumber.
    • ZONE: Zona disk sumber.
    • SOURCE_DISK_NAME: Nama disk sumber.
    • DESTINATION_PROJECT_ID: ID project tujuan untuk snapshot baru.
  2. Di project tujuan, buat disk zona atau regional yang berdasarkan snapshot menggunakan perintah gcloud compute disks create:

    gcloud compute disks create DISK_NAME \
     --source-snapshot SNAPSHOT_NAME \
     --project DESTINATION_PROJECT_ID
    

    Ganti kode berikut:

    • DISK_NAME: Nama untuk disk baru.
    • SNAPSHOT_NAME: Nama snapshot.
    • DESTINATION_PROJECT_ID: ID project tujuan untuk disk baru.

REST

  1. Buat snapshot standar di project tujuan dengan memanggil metode snapshots.insert. Misalnya, untuk mengambil snapshot Persistent Disk atau Hyperdisk zona, buat permintaan berikut:

    POST https://compute.googleapis.com/compute/v1/projects/DESTINATION_PROJECT_ID/global/snapshots
    {
     "name": SNAPSHOT_NAME
     "sourceDisk": "projects/SOURCE_PROJECT_ID/zones/SOURCE_ZONE/disks/SOURCE_DISK_NAME
    }
    

    Ganti kode berikut:

    • DESTINATION_PROJECT_ID: ID project tujuan untuk snapshot baru.
    • SNAPSHOT_NAME: Nama untuk snapshot.
    • SOURCE_PROJECT_ID: ID project disk sumber.
    • SOURCE_ZONE: Zona disk sumber.
    • SOURCE_DISK_NAME: Nama disk sumber.
  2. Di project tujuan, buat disk zona atau regional yang berdasarkan snapshot dengan menggunakan metode disks.insert zona atau metode regionDisks.insert regional.

    Misalnya, untuk membuat disk zona, buat permintaan berikut:

    POST https://compute.googleapis.com/compute/v1/projects/DESTINATION_PROJECT_ID/zones/DESTINATION_ZONE/disks
    {
     "name": DISK_NAME
     "sourceSnapshot": SNAPSHOT_NAME
    }
    

    Ganti kode berikut:

    • DESTINATION_PROJECT_ID: ID project tujuan untuk disk baru.
    • DESTINATION_ZONE: Zona dalam project tujuan untuk disk baru.
    • DISK_NAME: Nama untuk disk baru.
    • SNAPSHOT_NAME: Nama snapshot.

Untuk mendapatkan daftar snapshot yang tersedia bagi Anda, lihat Melihat snapshot standar di suatu project atau lokasi.

Berbagi snapshot di berbagai project dalam organisasi yang berbeda

Anda dapat menggunakan prosedur ini untuk membagikan snapshot standar dalam sebuah project di satu organisasi dengan project yang berbeda di organisasi lain.

gcloud

  1. Dalam project sumber, buat disk berdasarkan snapshot dengan menggunakan perintah gcloud compute disks create.

    gcloud compute disks create DISK_NAME \
     --source-snapshot SNAPSHOT_NAME \
     --project SOURCE_PROJECT_ID \
     --zone ZONE
    

    Ganti kode berikut:

    • DISK_NAME: Nama untuk disk baru.
    • SNAPSHOT_NAME: Nama snapshot.
    • SOURCE_PROJECT_ID: ID project sumber.
    • ZONE: Zona untuk membuat disk baru.

    Disk ini adalah disk sementara yang dibuat hanya untuk menyalin snapshot di seluruh organisasi.

  2. Pada project tujuan, buat snapshot menggunakan perintah gcloud compute snapshots create.

    Misalnya, untuk membuat snapshot menggunakan disk zona yang dibuat pada langkah pertama, gunakan perintah berikut:

    gcloud compute snapshots create SNAPSHOT_NAME \
     --source-disk https://www.googleapis.com/compute/v1/projects/SOURCE_PROJECT_ID/zones/ZONE/disks/DISK_NAME \
     --project DESTINATION_PROJECT_ID
    

    Ganti kode berikut:

    • SNAPSHOT_NAME: Nama untuk snapshot.
    • SOURCE_PROJECT_ID: ID project yang berisi disk sumber.
    • ZONE: Zona disk sumber.
    • DISK_NAME: Nama disk yang dibuat di langkah 1.
    • DESTINATION_PROJECT_ID: ID project tujuan untuk snapshot baru.

    Untuk mendapatkan daftar snapshot yang tersedia bagi Anda, lihat Melihat snapshot standar di suatu project atau lokasi.

  3. Hapus disk sementara yang dibuat pada langkah pertama menggunakan perintah gcloud compute disks delete.

    gcloud compute disks delete DISK_NAME \
     --project SOURCE_PROJECT_ID --zone ZONE
    

    Ganti kode berikut:

    • DISK_NAME: Nama disk yang dibuat di langkah 1.
    • SOURCE_PROJECT_ID: ID project yang berisi disk sumber.
    • ZONE: Zona disk.

REST

  1. Di project sumber, buat disk zona atau regional berdasarkan snapshot menggunakan metode disks.insert zona.

    Misalnya, untuk membuat disk zona, buat permintaan berikut:

    POST https://compute.googleapis.com/compute/v1/projects/SOURCE_PROJECT_ID/zones/SOURCE_ZONE/disks
    {
     "name": DISK_NAME
     "sourceSnapshot": SNAPSHOT_NAME
    }
    

    Ganti kode berikut:

    • SOURCE_PROJECT_ID: ID project sumber untuk disk baru.
    • SOURCE_ZONE: Zona untuk disk baru.
    • DISK_NAME: Nama untuk disk baru.
    • SNAPSHOT_NAME: Nama snapshot.

    Disk ini adalah disk sementara yang dibuat hanya untuk menyalin snapshot di seluruh organisasi.

  2. Buat snapshot di project tujuan dengan memanggil metode snapshots.insert.

    Misalnya, untuk membuat snapshot menggunakan disk zona yang dibuat pada langkah pertama, gunakan perintah berikut:

    POST https://compute.googleapis.com/compute/v1/projects/DESTINATION_PROJECT_ID/global/snapshots
    {
       "name": SNAPSHOT_NAME
       "sourceDisk": "projects/SOURCE_PROJECT_ID/zones/SOURCE_ZONE/disks/DISK_NAME
    }
    

    Ganti kode berikut:

    • DESTINATION_PROJECT_ID: ID project tujuan untuk snapshot baru.
    • SNAPSHOT_NAME: Nama untuk snapshot.
    • SOURCE_PROJECT_ID: ID project yang berisi disk sumber.
    • SOURCE_ZONE: Zona disk sumber.
    • DISK_NAME: Nama disk sumber.
  3. Hapus disk sementara yang dibuat pada langkah pertama menggunakan metode disks.delete.

    DELETE https://compute.googleapis.com/compute/v1/projects/SOURCE_PROJECT_ID/zones/SOURCE_ZONE/disks/DISK_NAME
    

    Ganti kode berikut:

    • SOURCE_PROJECT_ID: ID project yang berisi disk sementara.
    • SOURCE_ZONE: Zona disk.
    • DISK_NAME: Nama disk sementara yang dibuat pada langkah 1.

Langkah selanjutnya