Mengelola snapshot disk


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

Anda dapat melihat, membuat daftar, dan menghapus snapshot disk. Anda juga dapat membagikan snapshot di seluruh project.

Sebelum memulai

  • Jika Anda belum melakukannya, siapkan autentikasi. Autentikasi adalah proses verifikasi identitas Anda untuk mengakses layanan dan API Google Cloud. Untuk menjalankan kode atau contoh dari lingkungan pengembangan lokal, Anda dapat mengautentikasi ke Compute Engine dengan memilih salah satu opsi berikut:

    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

    1. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.
    3. REST

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

        Install the Google Cloud CLI, then initialize it by running the following command:

        gcloud init

      Untuk informasi selengkapnya, lihat Melakukan autentikasi untuk menggunakan REST dalam dokumentasi autentikasi Google Cloud.

Peran dan izin yang diperlukan

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

Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses ke project, folder, dan organisasi.

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

Izin yang diperlukan

Izin berikut diperlukan untuk mengelola snapshot standar:

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

Anda mungkin juga bisa mendapatkan izin ini dengan peran khusus atau peran bawaan lainnya.

Melihat snapshot standar di project atau lokasi

Anda dapat melihat atau mencantumkan snapshot standar dalam project atau lokasi menggunakan gcloud CLI, Konsol Google Cloud, 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_list Filter. 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 menghapus tanda ini, project saat ini akan digunakan. Anda dapat menetapkan project default untuk sesi menggunakan perintah gcloud CLI gcloud config set project PROJECT_ID.

REST

Untuk melihat daftar snapshot yang tersedia untuk Anda dalam 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.

Melihat snapshot standar untuk disk

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

Konsol

  1. Di konsol Google Cloud, buka halaman Snapshots.

    Buka halaman Snapshots

  2. Di 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: di 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, lalu di kolom Filter di samping Source disk:, ketik beberapa huruf pertama dari nama disk sumber untuk mengubah daftar nilai yang Anda lihat.

gcloud

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

  • Cantumkan snapshot standar untuk disk zona:

    gcloud compute snapshots list --filter="sourceDisk:projects/PROJECT_ID/zones/SOURCE_ZONE/disks/DISK_NAME
    
  • Cantumkan 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

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

Gunakan parameter kueri filter=sourceDisk untuk menentukan nama disk.

  • Cantumkan 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'
    
  • Cantumkan 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

Dapatkan 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. Di tab Snapshots, lihat daftar snapshot dalam 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 selengkapnya tentang 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'" akan 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 dalam 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 zona atau Hyperdisk, 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 didasarkan pada 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 zona atau Hyperdisk, 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 didasarkan pada snapshot 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 di project tujuan untuk disk baru.
    • DISK_NAME: Nama untuk disk baru.
    • SNAPSHOT_NAME: Nama snapshot.

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

Berbagi snapshot di berbagai project dalam organisasi yang berbeda

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

gcloud

  1. Di project sumber, buat disk yang didasarkan pada snapshot 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 tempat disk baru akan dibuat.

    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, lihat Melihat snapshot standar di project atau lokasi.

  3. Hapus disk sementara yang dibuat di 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 di 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 di langkah 1.

Langkah selanjutnya