Membuat snapshot disk standar dan arsip


Buat snapshot standar untuk mencadangkan data secara berkala dari jenis disk berikut:

Anda dapat membuat snapshot dari disk meskipun disk terpasang ke instance yang sedang berjalan. Snapshot adalah resource global sehingga Anda dapat menggunakannya untuk memulihkan data ke VM atau disk baru dalam project yang sama. 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. Terraform

      Untuk menggunakan contoh Terraform di halaman ini dalam lingkungan pengembangan lokal, instal dan lakukan inisialisasi gcloud CLI, lalu siapkan Kredensial Default Aplikasi dengan kredensial pengguna Anda.

      1. Install the Google Cloud CLI.
      2. To initialize the gcloud CLI, run the following command:

        gcloud init
      3. Buat kredensial autentikasi lokal untuk Akun Google Anda:

        gcloud auth application-default login

      Untuk informasi selengkapnya, lihat Set up authentication for a local development environment.

      Go

      Untuk menggunakan contoh Go di halaman ini dalam lingkungan pengembangan lokal, instal dan lakukan inisialisasi gcloud CLI, lalu siapkan Kredensial Default Aplikasi dengan kredensial pengguna Anda.

      1. Install the Google Cloud CLI.
      2. To initialize the gcloud CLI, run the following command:

        gcloud init
      3. Buat kredensial autentikasi lokal untuk Akun Google Anda:

        gcloud auth application-default login

      Untuk informasi selengkapnya, lihat Set up authentication for a local development environment.

      Java

      Untuk menggunakan contoh Java di halaman ini dalam lingkungan pengembangan lokal, instal dan lakukan inisialisasi gcloud CLI, lalu siapkan Kredensial Default Aplikasi dengan kredensial pengguna Anda.

      1. Install the Google Cloud CLI.
      2. To initialize the gcloud CLI, run the following command:

        gcloud init
      3. Buat kredensial autentikasi lokal untuk Akun Google Anda:

        gcloud auth application-default login

      Untuk informasi selengkapnya, lihat Set up authentication for a local development environment.

      Node.js

      Untuk menggunakan contoh Node.js di halaman ini dalam lingkungan pengembangan lokal, instal dan lakukan inisialisasi gcloud CLI, lalu siapkan Kredensial Default Aplikasi dengan kredensial pengguna Anda.

      1. Install the Google Cloud CLI.
      2. To initialize the gcloud CLI, run the following command:

        gcloud init
      3. Buat kredensial autentikasi lokal untuk Akun Google Anda:

        gcloud auth application-default login

      Untuk informasi selengkapnya, lihat Set up authentication for a local development environment.

      Python

      Untuk menggunakan contoh Python di halaman ini dalam lingkungan pengembangan lokal, instal dan lakukan inisialisasi gcloud CLI, lalu siapkan Kredensial Default Aplikasi dengan kredensial pengguna Anda.

      1. Install the Google Cloud CLI.
      2. To initialize the gcloud CLI, run the following command:

        gcloud init
      3. Buat kredensial autentikasi lokal untuk Akun Google Anda:

        gcloud auth application-default login

      Untuk informasi selengkapnya, lihat Set up authentication for a local development environment.

      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 membuat 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 membuat snapshot standar. Untuk melihat izin yang benar-benar diperlukan, luaskan bagian Izin yang diperlukan:

Izin yang diperlukan

Izin berikut diperlukan untuk membuat snapshot standar:

  • Untuk membuat snapshot disk zona:
    • compute.snapshots.create dalam project
    • compute.disks.createSnapshot pada disk
  • Untuk membuat snapshot disk regional menggunakan data di disk:
    • compute.snapshots.create dalam project
    • compute.instances.useReadOnly di VM sumber
    • compute.disks.createSnapshot pada disk
  • Untuk membuat snapshot disk regional dari checkpoint pemulihan replika:
    • compute.snapshots.create dalam project
    • compute.disks.createSnapshot pada disk

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

Melakukan persiapan untuk membuat snapshot

Untuk bersiap membuat snapshot Persistent Disk atau Hyperdisk, lakukan langkah berikut:

  • Tinjau Praktik terbaik untuk snapshot disk Compute Engine guna menyiapkan disk Anda untuk pengambilan snapshot.

  • Jika Anda ingin menyesuaikan lokasi penyimpanan default untuk semua snapshot baru, perbarui setelan snapshot untuk project Anda. Google Cloud mempertahankan nilai lokasi penyimpanan default yang telah ditetapkan hingga Anda memperbarui setelan snapshot untuk pertama kalinya. Lokasi yang telah ditentukan ini adalah multi-region yang paling dekat dengan disk sumber.

  • Baca Membuat jadwal untuk snapshot disk untuk mempelajari cara membuat jadwal snapshot dan menambahkannya ke disk Anda. Mencadangkan disk secara rutin dengan snapshot terjadwal dapat mengurangi risiko kehilangan data yang tidak terduga.

  • Anda tidak dapat membuat snapshot volume Hyperdisk yang berada dalam mode multi-penulis. Nonaktifkan mode multi-penulis untuk disk, lalu buat snapshot.

Membuat snapshot volume Persistent Disk

Petunjuk untuk membuat snapshot volume Persistent Disk berbeda-beda, bergantung pada apakah Anda membuat snapshot Persistent Disk zona atau Persistent Disk regional.

Membuat snapshot volume Persistent Disk zona

Konsol

  1. Di Konsol Google Cloud, buka halaman Instance VM.

    Buka VM instances
    Langkah-langkah yang tersisa akan muncul secara otomatis di Konsol Google Cloud.

  2. Pilih project yang berisi instance VM Anda.
  3. Di kolom Name, klik nama VM yang memiliki disk yang akan dicadangkan.
  4. Di Penyimpanan:
    • Untuk mencadangkan boot disk, di bagian Boot disk, klik Name pada boot disk.
    • Untuk mencadangkan disk data yang terpasang, di Additional disks, klik Name disk.
  5. Klik Create snapshot.
  6. Di bagian Name, masukkan nama unik untuk membantu mengidentifikasi tujuan snapshot, misalnya:
    • boot-disk-snapshot
    • attached-data-disk-snapshot
  7. Di Type, defaultnya adalah snapshot standar. Snapshot standar paling cocok untuk pencadangan jangka panjang dan pemulihan dari bencana.

    Pilih Archive snapshot untuk membuat pencadangan yang lebih hemat biaya daripada snapshot standar, tetapi dengan waktu pemulihan data yang lebih lama.

    Untuk mengetahui informasi selengkapnya, lihat Perbandingan jenis snapshot.

  8. Di bagian Location, pilih lokasi penyimpanan snapshot Anda. Lokasi default bawaan atau disesuaikan yang ditentukan dalam setelan snapshot Anda otomatis dipilih. Secara opsional, Anda dapat mengganti setelan snapshot dan menyimpan snapshot Anda di lokasi penyimpanan kustom dengan melakukan hal berikut:

    1. Pilih jenis lokasi penyimpanan yang diinginkan untuk snapshot Anda.

      • PilihMulti-regional untuk ketersediaan lebih tinggi dengan biaya lebih tinggi.
      • Pilih Regional snapshots untuk mendapatkan kontrol lebih besar atas lokasi fisik data Anda dengan biaya yang lebih rendah.
    2. Di kolom Select location, pilih region atau multi-region spesifik yang ingin Anda gunakan. Untuk menggunakan region atau multi-region yang paling dekat dengan disk sumber, pilih lokasi dari bagian berjudul Berdasarkan lokasi disk.

  9. Untuk membuat snapshot, klik Create.

gcloud

Anda dapat membuat snapshot dalam kebijakan lokasi penyimpanan yang ditentukan oleh setelan snapshot atau menggunakan lokasi penyimpanan alternatif pilihan Anda. Untuk informasi selengkapnya, lihat Memilih lokasi penyimpanan snapshot.

  • Untuk membuat snapshot di lokasi default bawaan atau disesuaikan yang dikonfigurasi di setelan snapshot Anda, gunakan perintah gcloud compute snapshots create.

    gcloud compute snapshots create SNAPSHOT_NAME \
        --source-disk-zone=SOURCE_ZONE \
        --source-disk=SOURCE_DISK_NAME \
        --snapshot-type=SNAPSHOT_TYPE
    
  • Atau, untuk mengganti setelan snapshot dan membuat snapshot di lokasi penyimpanan kustom, sertakan tanda --storage-location untuk menunjukkan tempat penyimpanan snapshot Anda.

    gcloud compute snapshots create SNAPSHOT_NAME \
        --source-disk-zone=SOURCE_ZONE \
        --source-disk=SOURCE_DISK_NAME \
        --snapshot-type=SNAPSHOT_TYPE \
        --storage-location=STORAGE_LOCATION
    

    Ganti kode berikut:

    • SNAPSHOT_NAME: Nama untuk snapshot.
    • SOURCE_ZONE: Zona disk sumber.
    • SOURCE_DISK_NAME: Nama volume Persistent Disk tempat Anda ingin membuat snapshot.
    • SNAPSHOT_TYPE: Jenis snapshot, baik STANDARD atau ARCHIVE. Jika jenis snapshot tidak ditentukan, snapshot STANDARD akan dibuat.
    • STORAGE_LOCATION: Opsional: Multi-region Cloud Storage atau region Cloud Storage tempat Anda ingin menyimpan snapshot. Anda hanya dapat menentukan satu lokasi penyimpanan.

      Gunakan parameter --storage-location hanya jika Anda ingin mengganti lokasi penyimpanan default yang telah ditentukan sebelumnya atau disesuaikan yang dikonfigurasi di setelan snapshot Anda.

Terraform

Untuk membuat snapshot volume Persistent Disk zona, gunakan resource google_compute_snapshot.

resource "google_compute_snapshot" "snapdisk" {
  name        = "snapshot-name"
  source_disk = google_compute_disk.default.name
  zone        = "us-central1-a"
}

Untuk mempelajari cara menerapkan atau menghapus konfigurasi Terraform, lihat Perintah dasar Terraform.

Go

Go

Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Go di panduan memulai Compute Engine menggunakan library klien. Untuk informasi selengkapnya, lihat dokumentasi referensi API Go Compute Engine.

Untuk melakukan autentikasi ke Compute Engine, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

import (
	"context"
	"fmt"
	"io"

	compute "cloud.google.com/go/compute/apiv1"
	computepb "cloud.google.com/go/compute/apiv1/computepb"
	"google.golang.org/protobuf/proto"
)

// createSnapshot creates a snapshot of a disk.
func createSnapshot(
	w io.Writer,
	projectID, diskName, snapshotName, zone, region, location, diskProjectID string,
) error {
	// projectID := "your_project_id"
	// diskName := "your_disk_name"
	// snapshotName := "your_snapshot_name"
	// zone := "europe-central2-b"
	// region := "eupore-central2"
	// location = "eupore-central2"
	// diskProjectID = "YOUR_DISK_PROJECT_ID"

	ctx := context.Background()

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

	if zone == "" && region == "" {
		return fmt.Errorf("you need to specify `zone` or `region` for this function to work")
	}

	if zone != "" && region != "" {
		return fmt.Errorf("you can't set both `zone` and `region` parameters")
	}

	if diskProjectID == "" {
		diskProjectID = projectID
	}

	disk := &computepb.Disk{}
	locations := []string{}
	if location != "" {
		locations = append(locations, location)
	}

	if zone != "" {
		disksClient, err := compute.NewDisksRESTClient(ctx)
		if err != nil {
			return fmt.Errorf("NewDisksRESTClient: %w", err)
		}
		defer disksClient.Close()

		getDiskReq := &computepb.GetDiskRequest{
			Project: projectID,
			Zone:    zone,
			Disk:    diskName,
		}

		disk, err = disksClient.Get(ctx, getDiskReq)
		if err != nil {
			return fmt.Errorf("unable to get disk: %w", err)
		}
	} else {
		regionDisksClient, err := compute.NewRegionDisksRESTClient(ctx)
		if err != nil {
			return fmt.Errorf("NewRegionDisksRESTClient: %w", err)
		}
		defer regionDisksClient.Close()

		getDiskReq := &computepb.GetRegionDiskRequest{
			Project: projectID,
			Region:  region,
			Disk:    diskName,
		}

		disk, err = regionDisksClient.Get(ctx, getDiskReq)
		if err != nil {
			return fmt.Errorf("unable to get disk: %w", err)
		}
	}

	req := &computepb.InsertSnapshotRequest{
		Project: projectID,
		SnapshotResource: &computepb.Snapshot{
			Name:             proto.String(snapshotName),
			SourceDisk:       proto.String(disk.GetSelfLink()),
			StorageLocations: locations,
		},
	}

	op, err := snapshotsClient.Insert(ctx, req)
	if err != nil {
		return fmt.Errorf("unable to create 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 created\n")

	return nil
}

Java

Java

Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Java di panduan memulai Compute Engine menggunakan library klien. Untuk informasi selengkapnya, lihat dokumentasi referensi API Java Compute Engine.

Untuk melakukan autentikasi ke Compute Engine, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.


import com.google.cloud.compute.v1.Disk;
import com.google.cloud.compute.v1.DisksClient;
import com.google.cloud.compute.v1.Operation;
import com.google.cloud.compute.v1.RegionDisksClient;
import com.google.cloud.compute.v1.Snapshot;
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 CreateSnapshot {

  public static void main(String[] args)
      throws IOException, ExecutionException, InterruptedException, TimeoutException {
    // TODO(developer): Replace these variables before running the sample.
    // You need to pass `zone` or `region` parameter relevant to the disk you want to
    // snapshot, but not both. Pass `zone` parameter for zonal disks and `region` for
    // regional disks.

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

    // Name of the disk you want to create.
    String diskName = "YOUR_DISK_NAME";

    // Name of the snapshot that you want to create.
    String snapshotName = "YOUR_SNAPSHOT_NAME";

    // The zone of the source disk from which you create the snapshot (for zonal disks).
    String zone = "europe-central2-b";

    // The region of the source disk from which you create the snapshot (for regional disks).
    String region = "your-disk-region";

    // The Cloud Storage multi-region or the Cloud Storage region where you
    // want to store your snapshot.
    // You can specify only one storage location. Available locations:
    // https://cloud.google.com/storage/docs/locations#available-locations
    String location = "europe-central2";

    // Project ID or project number of the Cloud project that
    // hosts the disk you want to snapshot. If not provided, the value will be defaulted
    // to 'projectId' value.
    String diskProjectId = "YOUR_DISK_PROJECT_ID";

    createSnapshot(projectId, diskName, snapshotName, zone, region, location, diskProjectId);
  }

  // Creates a snapshot of a disk.
  public static void createSnapshot(String projectId, String diskName, String snapshotName,
      String zone, String region, String location, String diskProjectId)
      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()) {

      if (zone.isEmpty() && region.isEmpty()) {
        throw new Error("You need to specify 'zone' or 'region' for this function to work");
      }

      if (!zone.isEmpty() && !region.isEmpty()) {
        throw new Error("You can't set both 'zone' and 'region' parameters");
      }

      // If Disk's project id is not specified, then the projectId parameter will be used.
      if (diskProjectId.isEmpty()) {
        diskProjectId = projectId;
      }

      // If zone is not empty, use the DisksClient to create a disk.
      // Else, use the RegionDisksClient.
      Disk disk;
      if (!zone.isEmpty()) {
        DisksClient disksClient = DisksClient.create();
        disk = disksClient.get(projectId, zone, diskName);
      } else {
        RegionDisksClient regionDisksClient = RegionDisksClient.create();
        disk = regionDisksClient.get(diskProjectId, region, diskName);
      }

      // Set the snapshot properties.
      Snapshot snapshotResource;
      if (!location.isEmpty()) {
        snapshotResource = Snapshot.newBuilder()
            .setName(snapshotName)
            .setSourceDisk(disk.getSelfLink())
            .addStorageLocations(location)
            .build();
      } else {
        snapshotResource = Snapshot.newBuilder()
            .setName(snapshotName)
            .setSourceDisk(disk.getSelfLink())
            .build();
      }

      // Wait for the operation to complete.
      Operation operation = snapshotsClient.insertAsync(projectId, snapshotResource)
          .get(3, TimeUnit.MINUTES);

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

      // Retrieve the created snapshot.
      Snapshot snapshot = snapshotsClient.get(projectId, snapshotName);
      System.out.printf("Snapshot created: %s", snapshot.getName());

    }
  }
}

Node.js

Node.js

Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Node.js di panduan memulai Compute Engine menggunakan library klien. Untuk informasi selengkapnya, lihat dokumentasi referensi API Node.js Compute Engine.

Untuk melakukan autentikasi ke Compute Engine, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

/**
 * TODO(developer): Uncomment and replace these variables before running the sample.
 */
// const projectId = 'YOUR_PROJECT_ID';
// const diskName = 'YOUR_DISK_NAME';
// const snapshotName = 'YOUR_SNAPSHOT_NAME';
// const zone = 'europe-central2-b';
// const region = '';
// const location = 'europe-central2';
// let diskProjectId = 'YOUR_DISK_PROJECT_ID';

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

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

  let disk;

  if (!zone && !region) {
    throw new Error(
      'You need to specify `zone` or `region` for this function to work.'
    );
  }

  if (zone && region) {
    throw new Error("You can't set both `zone` and `region` parameters");
  }

  if (!diskProjectId) {
    diskProjectId = projectId;
  }

  if (zone) {
    const disksClient = new compute.DisksClient();
    [disk] = await disksClient.get({
      project: diskProjectId,
      zone,
      disk: diskName,
    });
  } else {
    const regionDisksClient = new compute.RegionDisksClient();
    [disk] = await regionDisksClient.get({
      project: diskProjectId,
      region,
      disk: diskName,
    });
  }

  const snapshotResource = {
    name: snapshotName,
    sourceDisk: disk.selfLink,
  };

  if (location) {
    snapshotResource.storageLocations = [location];
  }

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

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

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

createSnapshot();

Python

Python

Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Python di panduan memulai Compute Engine menggunakan library klien. Untuk informasi selengkapnya, lihat dokumentasi referensi API Python Compute Engine.

Untuk melakukan autentikasi ke Compute Engine, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

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 create_snapshot(
    project_id: str,
    disk_name: str,
    snapshot_name: str,
    *,
    zone: str | None = None,
    region: str | None = None,
    location: str | None = None,
    disk_project_id: str | None = None,
) -> compute_v1.Snapshot:
    """
    Create a snapshot of a disk.

    You need to pass `zone` or `region` parameter relevant to the disk you want to
    snapshot, but not both. Pass `zone` parameter for zonal disks and `region` for
    regional disks.

    Args:
        project_id: project ID or project number of the Cloud project you want
            to use to store the snapshot.
        disk_name: name of the disk you want to snapshot.
        snapshot_name: name of the snapshot to be created.
        zone: name of the zone in which is the disk you want to snapshot (for zonal disks).
        region: name of the region in which is the disk you want to snapshot (for regional disks).
        location: The Cloud Storage multi-region or the Cloud Storage region where you
            want to store your snapshot.
            You can specify only one storage location. Available locations:
            https://cloud.google.com/storage/docs/locations#available-locations
        disk_project_id: project ID or project number of the Cloud project that
            hosts the disk you want to snapshot. If not provided, will look for
            the disk in the `project_id` project.

    Returns:
        The new snapshot instance.
    """
    if zone is None and region is None:
        raise RuntimeError(
            "You need to specify `zone` or `region` for this function to work."
        )
    if zone is not None and region is not None:
        raise RuntimeError("You can't set both `zone` and `region` parameters.")

    if disk_project_id is None:
        disk_project_id = project_id

    if zone is not None:
        disk_client = compute_v1.DisksClient()
        disk = disk_client.get(project=disk_project_id, zone=zone, disk=disk_name)
    else:
        regio_disk_client = compute_v1.RegionDisksClient()
        disk = regio_disk_client.get(
            project=disk_project_id, region=region, disk=disk_name
        )

    snapshot = compute_v1.Snapshot()
    snapshot.source_disk = disk.self_link
    snapshot.name = snapshot_name
    if location:
        snapshot.storage_locations = [location]

    snapshot_client = compute_v1.SnapshotsClient()
    operation = snapshot_client.insert(project=project_id, snapshot_resource=snapshot)

    wait_for_extended_operation(operation, "snapshot creation")

    return snapshot_client.get(project=project_id, snapshot=snapshot_name)

REST

Anda dapat membuat snapshot dalam kebijakan lokasi penyimpanan yang ditentukan oleh setelan snapshot atau menggunakan lokasi penyimpanan alternatif pilihan Anda. Untuk informasi selengkapnya, lihat Memilih lokasi penyimpanan snapshot.

  • Untuk membuat snapshot di lokasi default bawaan atau disesuaikan yang dikonfigurasi di setelan snapshot Anda, buat permintaan POST ke metode snapshots.insert:

    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",
        "snapshotType": "SNAPSHOT_TYPE"
    }
    
  • Atau, untuk mengganti setelan snapshot dan membuat snapshot di lokasi penyimpanan kustom, buat permintaan POST ke metode snapshots.insert dan sertakan properti storageLocations dalam permintaan Anda:

    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",
        "snapshotType": "SNAPSHOT_TYPE",
        "storageLocations": [
            "STORAGE_LOCATION"
        ],
    }
    

Ganti kode berikut:

  • DESTINATION_PROJECT_ID: ID project tempat Anda ingin membuat snapshot.
  • SNAPSHOT_NAME: Nama untuk snapshot.
  • SOURCE_PROJECT_ID: ID project disk sumber.
  • SOURCE_ZONE: Zona disk sumber.
  • SOURCE_DISK_NAME: Nama volume Persistent Disk tempat Anda ingin membuat snapshot.
  • SNAPSHOT_TYPE: Jenis snapshot, baik STANDARD atau ARCHIVE. Jika jenis snapshot tidak ditentukan, snapshot STANDARD akan dibuat.
  • STORAGE_LOCATION: Opsional: Multi-region Cloud Storage atau region Cloud Storage tempat Anda ingin menyimpan snapshot. Anda hanya dapat menentukan satu lokasi penyimpanan.

    Gunakan parameter storageLocations hanya jika Anda ingin mengganti lokasi penyimpanan default yang telah ditentukan sebelumnya atau disesuaikan yang dikonfigurasi di setelan snapshot Anda.

Membuat snapshot volume Persistent Disk regional

Anda dapat membuat snapshot volume Persistent Disk regional dengan salah satu cara berikut:

  • Dengan menggunakan data di disk sumber. Untuk menggunakan metode pembuatan snapshot ini, Anda harus memiliki replika zona yang disinkronkan.
  • Dengan menggunakan titik pemeriksaan pemulihan replika dari disk yang mengalami degradasi. Anda dapat membuat snapshot dari checkpoint hanya dengan menggunakan Google Cloud CLI atau REST.

Setelah menyiapkan disk, Anda dapat membuat snapshot. Saat membuat snapshot Persistent Disk regional, Anda harus menunjukkan region tempat disk sumber berada.

Konsol

  1. Buka halaman Create a Snapshot di Konsol Google Cloud.

    Buka halaman Create a Snapshot
  2. Masukkan Name snapshot.
  3. Pilih Snapshot type. Defaultnya adalah snapshot STANDARD, yang merupakan opsi terbaik untuk pencadangan jangka panjang dan pemulihan dari bencana.

    Pilih Archive snapshot untuk retensi data yang lebih hemat biaya.

  4. Opsional: Masukkan Deskripsi snapshot.
  5. Pada Source disk, pilih disk yang sudah ada yang ingin Anda buat snapshot-nya.
  6. Di bagian Location, pilih lokasi penyimpanan snapshot Anda.

    Lokasi default bawaan atau yang telah disesuaikan dalam setelan snapshot Anda akan otomatis dipilih. Secara opsional, Anda dapat mengganti setelan snapshot dan menyimpan snapshot Anda di lokasi penyimpanan kustom dengan melakukan hal berikut:

    1. Pilih jenis lokasi penyimpanan yang diinginkan untuk snapshot Anda.

      • Pilih Multi-regional untuk ketersediaan yang lebih tinggi dengan biaya lebih tinggi.
      • Pilih Snapshot regional untuk mendapatkan kontrol lebih besar atas lokasi fisik data Anda dengan biaya yang lebih rendah.
    2. Di kolom Select location, pilih region atau multi-region spesifik yang ingin Anda gunakan. Untuk menggunakan region atau multi-region yang paling dekat dengan disk sumber, pilih Berdasarkan lokasi disk.
  7. Klik Create untuk membuat snapshot.

gcloud

Anda dapat membuat snapshot menggunakan data disk sumber atau titik pemeriksaan pemulihan replikanya.

Dari data disk

Anda dapat membuat snapshot dari data disk menggunakan kebijakan lokasi penyimpanan yang ditentukan oleh setelan snapshot atau menggunakan lokasi penyimpanan alternatif pilihan Anda. Untuk informasi selengkapnya, lihat Memilih lokasi penyimpanan snapshot.

  • Untuk membuat snapshot di lokasi default bawaan atau disesuaikan yang dikonfigurasi di setelan snapshot Anda, gunakan perintah gcloud compute snapshots create.

    gcloud compute snapshots create SNAPSHOT_NAME \
        --source-disk-region=SOURCE_REGION \
        --source-disk=SOURCE_DISK_NAME \
        --snapshot-type=SNAPSHOT_TYPE
    
  • Atau, untuk mengganti setelan snapshot dan membuat snapshot di lokasi penyimpanan kustom, sertakan tanda --storage-location untuk menunjukkan tempat penyimpanan snapshot Anda.

    gcloud compute snapshots create SNAPSHOT_NAME \
        --source-disk-region=SOURCE_REGION \
        --source-disk=SOURCE_DISK_NAME \
        --snapshot-type=SNAPSHOT_TYPE \
        --storage-location=STORAGE_LOCATION
    

    Ganti kode berikut:

    • SNAPSHOT_NAME: Nama untuk snapshot.
    • SOURCE_REGION: Region disk sumber.
    • SOURCE_DISK_NAME: Nama volume Persistent Disk Regional atau Hyperdisk Balanced High Availability tempat Anda ingin membuat snapshot.
    • SNAPSHOT_TYPE: Jenis snapshot, baik STANDARD atau ARCHIVE. Jika jenis snapshot tidak ditentukan, snapshot STANDARD akan dibuat.
    • STORAGE_LOCATION: Opsional: Multi-region Cloud Storage atau region Cloud Storage tempat Anda ingin menyimpan snapshot. Anda hanya dapat menentukan satu lokasi penyimpanan.

      Gunakan parameter --storage-location hanya jika Anda ingin mengganti lokasi penyimpanan default yang telah ditentukan sebelumnya atau disesuaikan yang dikonfigurasi di setelan snapshot Anda.

Dari checkpoint

Anda dapat membuat snapshot menggunakan titik pemeriksaan pemulihan replika (Pratinjau) dari disk yang mengalami degradasi . Snapshot Anda akan dibuat selama replika yang tidak lengkap tersedia.

Untuk membuat snapshot menggunakan checkpoint pemulihan replika, gunakan perintah gcloud compute snapshots create . Sertakan flag --source-disk-for-recovery-checkpoint untuk menentukan bahwa Anda ingin membuat snapshot menggunakan checkpoint pemulihan replika. Kecualikan parameter --source-disk dan --source-disk-region.

gcloud compute snapshots create SNAPSHOT_NAME \
    --source-disk-for-recovery-checkpoint=SOURCE_DISK \
    --source-disk-for-recovery-checkpoint-region=SOURCE_REGION \
    --storage-location=STORAGE_LOCATION \
    --snapshot-type=SNAPSHOT_TYPE

Ganti kode berikut:

  • DESTINATION_PROJECT_ID: ID project tempat Anda ingin membuat snapshot.
  • SNAPSHOT_NAME: Nama untuk snapshot.
  • SOURCE_PROJECT_ID: Project ID disk sumber yang checkpoint-nya ingin Anda gunakan untuk membuat snapshot.
  • SOURCE_REGION: Region disk sumber yang checkpoint-nya ingin Anda gunakan untuk membuat snapshot.
  • SOURCE_DISK_NAME: Nama disk sumber yang checkpoint-nya ingin Anda gunakan untuk membuat snapshot.
  • STORAGE_LOCATION: Opsional: Multi-region Cloud Storage atau region Cloud Storage tempat Anda ingin menyimpan snapshot. Anda hanya dapat menentukan satu lokasi penyimpanan.
    Gunakan hanya jika Anda ingin mengganti lokasi penyimpanan default yang telah ditentukan sebelumnya atau disesuaikan yang dikonfigurasi di setelan snapshot Anda.
  • SNAPSHOT_TYPE: Jenis snapshot, baik STANDARD atau ARCHIVE. Jika jenis snapshot tidak ditentukan, snapshot STANDARD akan dibuat.

Anda dapat menggunakan checkpoint pemulihan replika untuk membuat snapshot hanya di disk yang mengalami degradasi. Jika Anda mencoba membuat snapshot dari checkpoint pemulihan replika saat perangkat direplikasi sepenuhnya, Anda akan melihat pesan error berikut:

The device is fully replicated and should not create snapshots out of a recovery checkpoint. Please
create regular snapshots instead.

Google Cloud CLI akan menunggu hingga operasi menampilkan status READY, FAILED, atau mencapai waktu tunggu maksimum dan menampilkan detail snapshot terakhir yang diketahui.

Terraform

Penyedia Terraform untuk Google Cloud tidak mendukung pembuatan snapshot volume Persistent Disk regional. Untuk melacak batasan ini, lihat masalah di GitHub.

Go

Go

Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Go di panduan memulai Compute Engine menggunakan library klien. Untuk informasi selengkapnya, lihat dokumentasi referensi API Go Compute Engine.

Untuk melakukan autentikasi ke Compute Engine, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

import (
	"context"
	"fmt"
	"io"

	compute "cloud.google.com/go/compute/apiv1"
	computepb "cloud.google.com/go/compute/apiv1/computepb"
	"google.golang.org/protobuf/proto"
)

// createSnapshot creates a snapshot of a disk.
func createSnapshot(
	w io.Writer,
	projectID, diskName, snapshotName, zone, region, location, diskProjectID string,
) error {
	// projectID := "your_project_id"
	// diskName := "your_disk_name"
	// snapshotName := "your_snapshot_name"
	// zone := "europe-central2-b"
	// region := "eupore-central2"
	// location = "eupore-central2"
	// diskProjectID = "YOUR_DISK_PROJECT_ID"

	ctx := context.Background()

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

	if zone == "" && region == "" {
		return fmt.Errorf("you need to specify `zone` or `region` for this function to work")
	}

	if zone != "" && region != "" {
		return fmt.Errorf("you can't set both `zone` and `region` parameters")
	}

	if diskProjectID == "" {
		diskProjectID = projectID
	}

	disk := &computepb.Disk{}
	locations := []string{}
	if location != "" {
		locations = append(locations, location)
	}

	if zone != "" {
		disksClient, err := compute.NewDisksRESTClient(ctx)
		if err != nil {
			return fmt.Errorf("NewDisksRESTClient: %w", err)
		}
		defer disksClient.Close()

		getDiskReq := &computepb.GetDiskRequest{
			Project: projectID,
			Zone:    zone,
			Disk:    diskName,
		}

		disk, err = disksClient.Get(ctx, getDiskReq)
		if err != nil {
			return fmt.Errorf("unable to get disk: %w", err)
		}
	} else {
		regionDisksClient, err := compute.NewRegionDisksRESTClient(ctx)
		if err != nil {
			return fmt.Errorf("NewRegionDisksRESTClient: %w", err)
		}
		defer regionDisksClient.Close()

		getDiskReq := &computepb.GetRegionDiskRequest{
			Project: projectID,
			Region:  region,
			Disk:    diskName,
		}

		disk, err = regionDisksClient.Get(ctx, getDiskReq)
		if err != nil {
			return fmt.Errorf("unable to get disk: %w", err)
		}
	}

	req := &computepb.InsertSnapshotRequest{
		Project: projectID,
		SnapshotResource: &computepb.Snapshot{
			Name:             proto.String(snapshotName),
			SourceDisk:       proto.String(disk.GetSelfLink()),
			StorageLocations: locations,
		},
	}

	op, err := snapshotsClient.Insert(ctx, req)
	if err != nil {
		return fmt.Errorf("unable to create 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 created\n")

	return nil
}

Java

Java

Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Java di panduan memulai Compute Engine menggunakan library klien. Untuk informasi selengkapnya, lihat dokumentasi referensi API Java Compute Engine.

Untuk melakukan autentikasi ke Compute Engine, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.


import com.google.cloud.compute.v1.Disk;
import com.google.cloud.compute.v1.DisksClient;
import com.google.cloud.compute.v1.Operation;
import com.google.cloud.compute.v1.RegionDisksClient;
import com.google.cloud.compute.v1.Snapshot;
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 CreateSnapshot {

  public static void main(String[] args)
      throws IOException, ExecutionException, InterruptedException, TimeoutException {
    // TODO(developer): Replace these variables before running the sample.
    // You need to pass `zone` or `region` parameter relevant to the disk you want to
    // snapshot, but not both. Pass `zone` parameter for zonal disks and `region` for
    // regional disks.

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

    // Name of the disk you want to create.
    String diskName = "YOUR_DISK_NAME";

    // Name of the snapshot that you want to create.
    String snapshotName = "YOUR_SNAPSHOT_NAME";

    // The zone of the source disk from which you create the snapshot (for zonal disks).
    String zone = "europe-central2-b";

    // The region of the source disk from which you create the snapshot (for regional disks).
    String region = "your-disk-region";

    // The Cloud Storage multi-region or the Cloud Storage region where you
    // want to store your snapshot.
    // You can specify only one storage location. Available locations:
    // https://cloud.google.com/storage/docs/locations#available-locations
    String location = "europe-central2";

    // Project ID or project number of the Cloud project that
    // hosts the disk you want to snapshot. If not provided, the value will be defaulted
    // to 'projectId' value.
    String diskProjectId = "YOUR_DISK_PROJECT_ID";

    createSnapshot(projectId, diskName, snapshotName, zone, region, location, diskProjectId);
  }

  // Creates a snapshot of a disk.
  public static void createSnapshot(String projectId, String diskName, String snapshotName,
      String zone, String region, String location, String diskProjectId)
      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()) {

      if (zone.isEmpty() && region.isEmpty()) {
        throw new Error("You need to specify 'zone' or 'region' for this function to work");
      }

      if (!zone.isEmpty() && !region.isEmpty()) {
        throw new Error("You can't set both 'zone' and 'region' parameters");
      }

      // If Disk's project id is not specified, then the projectId parameter will be used.
      if (diskProjectId.isEmpty()) {
        diskProjectId = projectId;
      }

      // If zone is not empty, use the DisksClient to create a disk.
      // Else, use the RegionDisksClient.
      Disk disk;
      if (!zone.isEmpty()) {
        DisksClient disksClient = DisksClient.create();
        disk = disksClient.get(projectId, zone, diskName);
      } else {
        RegionDisksClient regionDisksClient = RegionDisksClient.create();
        disk = regionDisksClient.get(diskProjectId, region, diskName);
      }

      // Set the snapshot properties.
      Snapshot snapshotResource;
      if (!location.isEmpty()) {
        snapshotResource = Snapshot.newBuilder()
            .setName(snapshotName)
            .setSourceDisk(disk.getSelfLink())
            .addStorageLocations(location)
            .build();
      } else {
        snapshotResource = Snapshot.newBuilder()
            .setName(snapshotName)
            .setSourceDisk(disk.getSelfLink())
            .build();
      }

      // Wait for the operation to complete.
      Operation operation = snapshotsClient.insertAsync(projectId, snapshotResource)
          .get(3, TimeUnit.MINUTES);

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

      // Retrieve the created snapshot.
      Snapshot snapshot = snapshotsClient.get(projectId, snapshotName);
      System.out.printf("Snapshot created: %s", snapshot.getName());

    }
  }
}

Node.js

Node.js

Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Node.js di panduan memulai Compute Engine menggunakan library klien. Untuk informasi selengkapnya, lihat dokumentasi referensi API Node.js Compute Engine.

Untuk melakukan autentikasi ke Compute Engine, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

/**
 * TODO(developer): Uncomment and replace these variables before running the sample.
 */
// const projectId = 'YOUR_PROJECT_ID';
// const diskName = 'YOUR_DISK_NAME';
// const snapshotName = 'YOUR_SNAPSHOT_NAME';
// const zone = 'europe-central2-b';
// const region = '';
// const location = 'europe-central2';
// let diskProjectId = 'YOUR_DISK_PROJECT_ID';

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

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

  let disk;

  if (!zone && !region) {
    throw new Error(
      'You need to specify `zone` or `region` for this function to work.'
    );
  }

  if (zone && region) {
    throw new Error("You can't set both `zone` and `region` parameters");
  }

  if (!diskProjectId) {
    diskProjectId = projectId;
  }

  if (zone) {
    const disksClient = new compute.DisksClient();
    [disk] = await disksClient.get({
      project: diskProjectId,
      zone,
      disk: diskName,
    });
  } else {
    const regionDisksClient = new compute.RegionDisksClient();
    [disk] = await regionDisksClient.get({
      project: diskProjectId,
      region,
      disk: diskName,
    });
  }

  const snapshotResource = {
    name: snapshotName,
    sourceDisk: disk.selfLink,
  };

  if (location) {
    snapshotResource.storageLocations = [location];
  }

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

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

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

createSnapshot();

Python

Python

Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Python di panduan memulai Compute Engine menggunakan library klien. Untuk informasi selengkapnya, lihat dokumentasi referensi API Python Compute Engine.

Untuk melakukan autentikasi ke Compute Engine, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

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 create_snapshot(
    project_id: str,
    disk_name: str,
    snapshot_name: str,
    *,
    zone: str | None = None,
    region: str | None = None,
    location: str | None = None,
    disk_project_id: str | None = None,
) -> compute_v1.Snapshot:
    """
    Create a snapshot of a disk.

    You need to pass `zone` or `region` parameter relevant to the disk you want to
    snapshot, but not both. Pass `zone` parameter for zonal disks and `region` for
    regional disks.

    Args:
        project_id: project ID or project number of the Cloud project you want
            to use to store the snapshot.
        disk_name: name of the disk you want to snapshot.
        snapshot_name: name of the snapshot to be created.
        zone: name of the zone in which is the disk you want to snapshot (for zonal disks).
        region: name of the region in which is the disk you want to snapshot (for regional disks).
        location: The Cloud Storage multi-region or the Cloud Storage region where you
            want to store your snapshot.
            You can specify only one storage location. Available locations:
            https://cloud.google.com/storage/docs/locations#available-locations
        disk_project_id: project ID or project number of the Cloud project that
            hosts the disk you want to snapshot. If not provided, will look for
            the disk in the `project_id` project.

    Returns:
        The new snapshot instance.
    """
    if zone is None and region is None:
        raise RuntimeError(
            "You need to specify `zone` or `region` for this function to work."
        )
    if zone is not None and region is not None:
        raise RuntimeError("You can't set both `zone` and `region` parameters.")

    if disk_project_id is None:
        disk_project_id = project_id

    if zone is not None:
        disk_client = compute_v1.DisksClient()
        disk = disk_client.get(project=disk_project_id, zone=zone, disk=disk_name)
    else:
        regio_disk_client = compute_v1.RegionDisksClient()
        disk = regio_disk_client.get(
            project=disk_project_id, region=region, disk=disk_name
        )

    snapshot = compute_v1.Snapshot()
    snapshot.source_disk = disk.self_link
    snapshot.name = snapshot_name
    if location:
        snapshot.storage_locations = [location]

    snapshot_client = compute_v1.SnapshotsClient()
    operation = snapshot_client.insert(project=project_id, snapshot_resource=snapshot)

    wait_for_extended_operation(operation, "snapshot creation")

    return snapshot_client.get(project=project_id, snapshot=snapshot_name)

REST

Anda dapat membuat snapshot menggunakan data disk sumber atau titik pemeriksaan pemulihan replikanya.

Dari data disk

Anda dapat membuat snapshot dari data disk menggunakan kebijakan lokasi penyimpanan yang ditentukan oleh setelan snapshot atau menggunakan lokasi penyimpanan alternatif pilihan Anda. Untuk informasi selengkapnya, lihat Memilih lokasi penyimpanan snapshot.

  • Untuk membuat snapshot di lokasi default bawaan atau disesuaikan yang dikonfigurasi di setelan snapshot Anda, buat permintaan POST ke metode snapshots.insert:

    POST https://compute.googleapis.com/compute/v1/projects/DESTINATION_PROJECT_ID/global/snapshots
    {
      "name": "SNAPSHOT_NAME",
      "sourceDisk": "projects/SOURCE_PROJECT_ID/regions/SOURCE_REGION/disks/SOURCE_DISK_NAME",
      "snapshotType": "SNAPSHOT_TYPE"
    }
    
  • Atau, untuk mengganti setelan snapshot dan membuat snapshot di lokasi penyimpanan kustom, buat permintaan POST ke metode snapshots.insert dan sertakan properti storageLocations dalam permintaan Anda:

    POST https://compute.googleapis.com/compute/v1/projects/DESTINATION_PROJECT_ID/global/snapshots
    {
      "name": "SNAPSHOT_NAME",
      "sourceDisk": "projects/SOURCE_PROJECT_ID/regions/SOURCE_REGION/disks/SOURCE_DISK_NAME",
      "snapshotType": "SNAPSHOT_TYPE",
      "storageLocations": [
          "STORAGE_LOCATION"
      ],
    }
    

Ganti kode berikut:

  • DESTINATION_PROJECT_ID: ID project tempat Anda ingin membuat snapshot.
  • SNAPSHOT_NAME: Nama untuk snapshot.
  • SOURCE_PROJECT_ID: ID project disk sumber.
  • SOURCE_REGION: Region disk sumber.
  • SOURCE_DISK_NAME: Nama volume Persistent Disk Regional atau Hyperdisk Balanced High Availability tempat Anda ingin membuat snapshot.
  • SNAPSHOT_TYPE: Jenis snapshot, baik STANDARD atau ARCHIVE. Jika jenis snapshot tidak ditentukan, snapshot STANDARD akan dibuat.
  • STORAGE_LOCATION: Opsional: Multi-region Cloud Storage atau region Cloud Storage tempat Anda ingin menyimpan snapshot. Anda hanya dapat menentukan satu lokasi penyimpanan.

    Gunakan parameter storageLocations hanya jika Anda ingin mengganti lokasi penyimpanan default yang telah ditentukan sebelumnya atau disesuaikan yang dikonfigurasi di setelan snapshot Anda.

Dari checkpoint

Atau, Anda dapat membuat snapshot menggunakan titik pemeriksaan pemulihan replika dari disk yang mengalami degradasi. Snapshot Anda akan dibuat selama replika yang tidak lengkap tersedia.

Untuk membuat snapshot menggunakan checkpoint pemulihan replika, buat permintaan POST ke metode snapshots.insert. Kecualikan parameter sourceDisk dan sertakan parameter sourceDiskForRecoveryCheckpoint untuk menentukan bahwa Anda ingin membuat snapshot menggunakan checkpoint.

POST https://compute.googleapis.com/compute/v1/projects/DESTINATION_PROJECT_ID/global/snapshots

{
  "name": "SNAPSHOT_NAME",
  "sourceDiskForRecoveryCheckpoint": "projects/SOURCE_PROJECT_ID/regions/SOURCE_REGION/disks/SOURCE_DISK_NAME",
  "storageLocations": "STORAGE_LOCATION",
  "snapshotType": "SNAPSHOT_TYPE"
}

Ganti kode berikut:

  • DESTINATION_PROJECT_ID: ID project tempat Anda ingin membuat snapshot.
  • SNAPSHOT_NAME: Nama untuk snapshot.
  • SOURCE_PROJECT_ID: Project ID disk sumber yang checkpoint-nya ingin Anda gunakan untuk membuat snapshot.
  • SOURCE_REGION: Region disk sumber yang checkpoint-nya ingin Anda gunakan untuk membuat snapshot.
  • SOURCE_DISK_NAME: Nama disk sumber yang checkpoint-nya ingin Anda gunakan untuk membuat snapshot.
  • STORAGE_LOCATION: Opsional: Multi-region Cloud Storage atau region Cloud Storage tempat Anda ingin menyimpan snapshot. Anda hanya dapat menentukan satu lokasi penyimpanan.
    Gunakan parameter storageLocations hanya jika Anda ingin mengganti lokasi penyimpanan default yang telah ditentukan sebelumnya atau disesuaikan yang dikonfigurasi di setelan snapshot Anda.
  • SNAPSHOT_TYPE: Jenis snapshot, baik STANDARD atau ARCHIVE. Jika jenis snapshot tidak ditentukan, snapshot STANDARD akan dibuat.

Anda dapat menggunakan checkpoint pemulihan replika untuk membuat snapshot hanya di disk yang mengalami degradasi. Jika Anda mencoba membuat snapshot dari checkpoint pemulihan replika saat perangkat direplikasi sepenuhnya, Anda akan melihat pesan error berikut:

The device is fully replicated and should not create snapshots out of a recovery checkpoint. Please
create regular snapshots instead.

Membuat snapshot Hyperdisk

Konsol

  1. Di konsol Google Cloud, buka halaman Instance VM.

    Buka halaman VM instances

  2. Pilih project yang berisi instance VM Anda.

  3. Di kolom Name, klik nama VM yang memiliki Hyperdisk untuk dicadangkan.

  4. Di Storage, di Additional disks, klik Name dari Hyperdisk yang terpasang.

  5. Klik Create snapshot.

  6. Di bagian Name, masukkan nama unik untuk membantu mengidentifikasi tujuan snapshot, misalnya hyperdisk-data-snapshot.

  7. Di Type, defaultnya adalah snapshot reguler, yang paling baik untuk pencadangan jangka panjang dan pemulihan dari bencana (disaster recovery).

  8. Di bagian Location, pilih lokasi penyimpanan snapshot Anda.

    Lokasi default bawaan atau yang telah disesuaikan dalam setelan snapshot Anda akan otomatis dipilih. Secara opsional, Anda dapat mengganti setelan snapshot dan menyimpan snapshot Anda di lokasi penyimpanan kustom dengan melakukan hal berikut:

    1. Pilih jenis lokasi penyimpanan yang diinginkan untuk snapshot Anda.

      • Pilih Multi-regional untuk ketersediaan yang lebih tinggi dengan biaya lebih tinggi.
      • Pilih Regional snapshots untuk mendapatkan kontrol lebih atas lokasi fisik data Anda dengan biaya yang lebih rendah.
    2. Di kolom Select location, pilih region atau multi-region spesifik yang ingin Anda gunakan. Untuk menggunakan region atau multi-region yang terdekat dengan disk sumber, pilih Based on disk's location.

  9. Klik Create.

gcloud

Anda dapat membuat snapshot dalam kebijakan lokasi penyimpanan yang ditentukan oleh setelan snapshot atau menggunakan lokasi penyimpanan alternatif pilihan Anda. Untuk informasi selengkapnya, lihat Memilih lokasi penyimpanan snapshot.

Anda harus menentukan nama snapshot. Nama harus terdiri dari 1-63 karakter, dan mematuhi RFC 1035.

  • Untuk membuat snapshot di lokasi default bawaan atau disesuaikan yang dikonfigurasi di setelan snapshot Anda, gunakan perintah gcloud compute snapshots create.

    gcloud compute snapshots create SNAPSHOT_NAME \
        --source-disk-zone=SOURCE_ZONE \
        --source-disk=SOURCE_DISK_NAME \
        --snapshot-type=SNAPSHOT_TYPE
    
  • Atau, untuk mengganti setelan snapshot dan membuat snapshot di lokasi penyimpanan kustom, sertakan tanda --storage-location untuk menunjukkan tempat penyimpanan snapshot Anda.

    gcloud compute snapshots create SNAPSHOT_NAME \
        --source-disk-zone=SOURCE_ZONE \
        --source-disk=SOURCE_DISK_NAME \
        --snapshot-type=SNAPSHOT_TYPE \
        --storage-location=STORAGE_LOCATION
    

    Ganti kode berikut:

    • SNAPSHOT_NAME: Nama untuk snapshot.
    • SOURCE_ZONE: Zona disk sumber.
    • SOURCE_DISK_NAME: Nama volume Hyperdisk tempat Anda ingin membuat snapshot.
    • SNAPSHOT_TYPE: Jenis snapshot, baik STANDARD atau ARCHIVE. Jika jenis snapshot tidak ditentukan, snapshot STANDARD akan dibuat.
    • STORAGE_LOCATION: Opsional: Multi-region Cloud Storage atau region Cloud Storage tempat Anda ingin menyimpan snapshot. Anda hanya dapat menentukan satu lokasi penyimpanan.

      Gunakan parameter --storage-location hanya jika Anda ingin mengganti lokasi penyimpanan default yang telah ditentukan sebelumnya atau disesuaikan yang dikonfigurasi di setelan snapshot Anda.

    gcloud CLI akan menunggu hingga operasi menampilkan status READY atau FAILED, atau mencapai waktu tunggu maksimum dan menampilkan detail snapshot terakhir yang diketahui.

REST

Anda dapat membuat snapshot dalam kebijakan lokasi penyimpanan yang ditentukan oleh setelan snapshot atau menggunakan lokasi penyimpanan alternatif pilihan Anda. Untuk informasi selengkapnya, lihat Memilih lokasi penyimpanan snapshot.

Anda harus menentukan nama snapshot. Nama harus terdiri dari 1-63 karakter, dan mematuhi RFC 1035.

  • Untuk membuat snapshot di lokasi default bawaan atau disesuaikan yang dikonfigurasi di setelan snapshot Anda, buat permintaan POST ke metode snapshots.insert:

    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",
        "snapshotType": "SNAPSHOT_TYPE"
    }
    
  • Atau, untuk mengganti setelan snapshot dan membuat snapshot di lokasi penyimpanan kustom, buat permintaan POST ke metode snapshots.insert dan sertakan properti storageLocations dalam permintaan Anda:

    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",
        "snapshotType": "SNAPSHOT_TYPE",
        "storageLocations": [
            "STORAGE_LOCATION"
        ],
    }
    

Ganti kode berikut:

  • DESTINATION_PROJECT_ID: ID project tempat Anda ingin membuat snapshot.
  • SNAPSHOT_NAME: Nama untuk snapshot.
  • SOURCE_PROJECT_ID: ID project disk sumber.
  • SOURCE_ZONE: Zona disk sumber.
  • SOURCE_DISK_NAME: Nama volume Hyperdisk tempat Anda ingin membuat snapshot.
  • SNAPSHOT_TYPE: Jenis snapshot, baik STANDARD atau ARCHIVE. Jika jenis snapshot tidak ditentukan, snapshot STANDARD akan dibuat.
  • STORAGE_LOCATION: Opsional: Multi-region Cloud Storage atau region Cloud Storage tempat Anda ingin menyimpan snapshot. Anda hanya dapat menentukan satu lokasi penyimpanan.

    Gunakan parameter storageLocations hanya jika Anda ingin mengganti lokasi penyimpanan default yang telah ditentukan sebelumnya atau disesuaikan yang dikonfigurasi di setelan snapshot Anda.

Langkah selanjutnya