Mencadangkan data menggunakan snapshot

Halaman ini menunjukkan cara mencadangkan data yang tersimpan di instance notebook yang dikelola pengguna Vertex AI Workbench dengan membuat snapshot.

Data di instance Anda disimpan di persistent disk zona. Anda dapat membuat dan menggunakan snapshot disk ini untuk mencadangkan data, membuat jadwal pencadangan berulang, dan memulihkan data ke instance baru.

Membuat snapshot

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 disk atau instance baru dalam project yang sama. Anda juga dapat membagikan snapshot di seluruh project.

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

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Buat snapshot Anda menggunakan kebijakan lokasi penyimpanan yang ditentukan oleh setelan snapshot atau menggunakan lokasi penyimpanan alternatif pilihan Anda. Untuk mengetahui 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 volume Persistent Disk di lokasi default yang telah ditentukan atau disesuaikan yang dikonfigurasi di setelan snapshot Anda, gunakan perintah gcloud compute snapshots create.

      gcloud compute snapshots create SNAPSHOT_NAME \
          --source-disk SOURCE_DISK \
          --snapshot-type SNAPSHOT_TYPE \
          --source-disk-zone SOURCE_DISK_ZONE
      

    • Atau, untuk mengganti setelan snapshot dan membuat snapshot di lokasi penyimpanan kustom, sertakan flag --storage-location untuk menunjukkan tempat menyimpan snapshot Anda:

      gcloud compute snapshots create SNAPSHOT_NAME \
        --source-disk SOURCE_DISK \
        --source-disk-zone SOURCE_DISK_ZONE \
        --storage-location STORAGE_LOCATION \
        --snapshot-type SNAPSHOT_TYPE

      Ganti kode berikut:

      • SNAPSHOT_NAME: Nama untuk snapshot.
      • SOURCE_DISK: Nama volume Persistent Disk zona tempat Anda ingin membuat snapshot.
      • SNAPSHOT_TYPE: Jenis snapshot, baik STANDARD atau ARCHIVE. Jika jenis snapshot tidak ditentukan, snapshot STANDARD akan dibuat. Pilih Archive untuk retensi data yang lebih hemat biaya.
      • SOURCE_DISK_ZONE: Zona volume Persistent Disk zona tempat Anda ingin membuat snapshot.

      Gunakan flag --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.

Terraform

Untuk membuat snapshot 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.

API

Buat snapshot Anda menggunakan kebijakan lokasi penyimpanan yang ditentukan oleh setelan snapshot atau menggunakan lokasi penyimpanan alternatif pilihan Anda. Untuk mengetahui 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
    }
    

    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 persistent disk tempat Anda ingin membuat snapshot.
    • SNAPSHOT_TYPE: Jenis snapshot, baik STANDARD atau ARCHIVE. Jika jenis snapshot tidak ditentukan, snapshot STANDARD akan dibuat.
  • 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 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: 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 atau disesuaikan yang dikonfigurasi di setelan snapshot Anda.

Go

Go

Sebelum mencoba contoh ini, ikuti petunjuk penyiapan di Panduan memulai Compute Engine menggunakan library klien.

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 di Panduan memulai Compute Engine menggunakan library klien.

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 di Panduan memulai Compute Engine menggunakan library klien.

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 di Panduan memulai Compute Engine menggunakan library klien.

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)

Menjadwalkan pencadangan berulang

Saat membuat jadwal snapshot, buat kebijakan resource yang dapat Anda terapkan ke satu atau beberapa persistent disk. Anda dapat membuat jadwal snapshot dengan cara berikut:

Jadwal snapshot mencakup properti berikut:

  • Nama jadwal
  • Deskripsi jadwal
  • Frekuensi snapshot (per jam, harian, mingguan)
  • Waktu mulai snapshot
  • Wilayah tempat jadwal snapshot tersedia
  • Kebijakan penghapusan disk sumber untuk menangani snapshot yang dibuat secara otomatis jika disk sumber dihapus
  • Kebijakan retensi untuk menentukan durasi penyimpanan snapshot yang dihasilkan dari jadwal snapshot

Pembatasan

  • Persistent disk dapat memiliki maksimal 10 jadwal snapshot yang terpasang sekaligus.
  • Anda tidak dapat membuat snapshot arsip menggunakan jadwal snapshot.
  • Anda dapat membuat maksimum 1.000 jadwal snapshot yang sedang digunakan per region.
  • Jadwal snapshot hanya berlaku dalam project tempat snapshot tersebut dibuat. Jadwal snapshot tidak dapat digunakan dalam project atau organisasi lain.
  • Anda mungkin perlu meminta peningkatan kuota resource melalui konsol jika memerlukan resource tambahan di region Anda.
  • Anda tidak dapat menghapus jadwal snapshot jika jadwal tersebut terpasang ke disk. Anda harus melepaskan jadwal dari semua disk, lalu menghapus jadwal.
  • Anda dapat memperbarui jadwal snapshot yang ada untuk mengubah deskripsi, jadwal, dan label. Untuk memperbarui nilai lain untuk jadwal snapshot, Anda harus menghapus jadwal snapshot dan membuat jadwal baru.
  • Untuk persistent disk yang menggunakan kunci enkripsi yang disediakan pelanggan (CSEK), Anda tidak dapat membuat jadwal snapshot.
  • Untuk persistent disk yang menggunakan kunci enkripsi yang dikelola pelanggan (CMEK), semua snapshot yang dibuat dengan jadwal snapshot akan otomatis dienkripsi dengan kunci yang sama.

Membuat jadwal

Buat jadwal snapshot untuk persistent disk menggunakan Konsol Google Cloud, Google Cloud CLI, atau Compute Engine API. Anda harus membuat jadwal snapshot di region yang sama dengan tempat persistent disk berada. Misalnya, jika persistent disk Anda berada di zona us-west1-a, jadwal snapshot Anda harus berada di region us-west1. Untuk mengetahui informasi selengkapnya, lihat Memilih lokasi penyimpanan.

Konsol

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

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

  2. Pilih project yang berisi instance VM Anda.
  3. Di kolom Nama, klik nama VM yang memiliki persistent disk untuk membuat jadwal snapshot.
  4. Di beberapa Penyimpanan, klik nama Boot disk atau Disk tambahan untuk membuat jadwal snapshot.
  5. Klik Edit. Anda mungkin perlu mengklik menu Tindakan lainnya, lalu Edit.
  6. Di Jadwal snapshot, pilih Buat jadwal.
  7. Di bagian Name, masukkan salah satu nama berikut untuk jadwal snapshot:
    • boot-disk-snapshot-schedule
    • attached-persistent-disk-snapshot-schedule
  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 Snapshot regional untuk mendapatkan kontrol lebih besar atas lokasi fisik data Anda dengan biaya yang lebih rendah.
    2. Di kolom Pilih lokasi, 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.

  9. Untuk menyelesaikan pembuatan jadwal snapshot, klik Buat.
  10. Untuk melampirkan jadwal snapshot ini ke persistent disk, klik Simpan.

gcloud

Untuk membuat jadwal snapshot bagi persistent disk, gunakan perintah gcloud compute resource-policies create snapshot-schedule. Tetapkan frekuensi jadwal Anda ke per jam, harian, atau mingguan.

  gcloud compute resource-policies create snapshot-schedule [SCHEDULE_NAME] \
      --description "[SCHEDULE_DESCRIPTION]" \
      --max-retention-days [MAX_RETENTION_DAYS] \
      --start-time [START_TIME] \
      --hourly-schedule [SNAPSHOT_INTERVAL] \
      --daily-schedule \
      --weekly-schedule [SNAPSHOT_INTERVAL] \
      --weekly-schedule-from-file [FILE_NAME] \
      --on-source-disk-delete [DELETION_OPTION]

dengan:

  • [SCHEDULE_NAME] adalah nama dari jadwal snapshot baru.
  • "[SCHEDULE_DESCRIPTION]" adalah deskripsi jadwal snapshot. Gunakan kutipan untuk deskripsi Anda.
  • [MAX_RETENTION_DAYS] adalah jumlah hari untuk mempertahankan snapshot. Misalnya, menyetel 3 akan berarti snapshot dipertahankan selama 3 hari sebelum dihapus. Anda harus menetapkan kebijakan retensi setidaknya 1 hari.
  • [START_TIME] adalah waktu mulai UTC. Waktu harus dimulai di awal jam. Misalnya:
    • 14.00 PST adalah 22:00.
    • Jika Anda menetapkan waktu mulai 22:13, Anda akan menerima error.
  • [SNAPSHOT_INTERVAL] menentukan interval saat Anda ingin snapshot terjadi. Tetapkan jadwal per jam menggunakan bilangan bulat antara 1 dan 23. Pilih nomor per jam yang dibagi merata menjadi 24. Misalnya, menetapkan --hourly-schedule ke 12, berarti snapshot dibuat setiap 12 jam. Untuk jadwal mingguan, tentukan hari-hari yang Anda inginkan untuk membuat snapshot. Anda harus menguraikan hari kerja, hari tersebut tidak peka huruf besar/kecil. Flag frekuensi snapshot hourly-schedule, daily-schedule, dan weekly-schedule bersifat eksklusif satu sama lain. Anda harus memilih salah satu untuk jadwal snapshot Anda.

  • [FILE_NAME] adalah nama file yang berisi jadwal snapshot mingguan, jika Anda memilih untuk memberikan jadwal dalam format ini. Perhatikan bahwa Anda dapat menentukan jadwal mingguan pada hari lain dalam seminggu dan pada waktu yang berbeda menggunakan file (tetapi Anda tidak dapat menentukan beberapa jadwal mingguan secara langsung di command line). Misalnya, file Anda mungkin menentukan jadwal snapshot pada hari Senin dan Rabu: [{"day": "MONDAY", "startTime": "04:00"}, {"day": "WEDNESDAY", "startTime": "02:00"}] Jika Anda menyertakan waktu mulai dalam file, Anda tidak perlu menetapkan --start-time. Jadwal menggunakan standar waktu UTC.

  • [DELETION_OPTION] menentukan apa yang terjadi pada snapshot Anda jika disk sumber dihapus. Pilih keep-auto-snapshots default dengan menghapus tanda ini, atau gunakan apply-retention-policy untuk menerapkan kebijakan retensi.

Ini adalah contoh tambahan untuk menyiapkan jadwal snapshot. Di semua contoh berikut:

  • Aturan penghapusan disk disertakan; flag --on-source-disk-delete disetel ke default keep-auto-snapshots untuk menyimpan secara permanen semua snapshot yang dihasilkan secara otomatis. Alternatifnya adalah menetapkan flag ini ke apply-retention-policy untuk menggunakan kebijakan retensi snapshot Anda.
  • Lokasi penyimpanan ditetapkan US sehingga semua snapshot yang dihasilkan akan disimpan di multi-region AS.
  • Label env=dev dan media=images diterapkan ke semua snapshot yang dihasilkan.
  • Kebijakan retensi disetel ke 10 hari.

Jadwal per jam: Dalam contoh ini, jadwal snapshot dimulai pada pukul 22.00 UTC dan terjadi setiap 4 jam.

  gcloud compute resource-policies create snapshot-schedule SCHEDULE_NAME \
      --description "MY HOURLY SNAPSHOT SCHEDULE" \
      --max-retention-days 10 \
      --start-time 22:00 \
      --hourly-schedule 4 \
      --region us-west1 \
      --on-source-disk-delete keep-auto-snapshots \
      --snapshot-labels env=dev,media=images \
      --storage-location US

Jadwal harian: Dalam contoh ini, jadwal snapshot dimulai pada pukul 22.00 UTC dan terjadi setiap hari pada waktu yang sama. Flag --daily-schedule harus ada, tetapi tidak boleh ditetapkan ke apa pun.

gcloud compute resource-policies create snapshot-schedule SCHEDULE_NAME \
    --description "MY DAILY SNAPSHOT SCHEDULE" \
    --max-retention-days 10 \
    --start-time 22:00 \
    --daily-schedule \
    --region us-west1 \
    --on-source-disk-delete keep-auto-snapshots \
    --snapshot-labels env=dev,media=images \
    --storage-location US

Jadwal mingguan: Dalam contoh ini, jadwal snapshot dimulai pada pukul 22.00 UTC dan terjadi setiap minggu pada hari Selasa dan Kamis.

gcloud compute resource-policies create snapshot-schedule SCHEDULE_NAME \
    --description "MY WEEKLY SNAPSHOT SCHEDULE" \
    --max-retention-days 10 \
    --start-time 22:00 \
    --weekly-schedule tuesday,thursday \
    --region us-west1 \
    --on-source-disk-delete keep-auto-snapshots \
    --snapshot-labels env=dev,media=images \
    --storage-location US

API

Di API, buat permintaan POST ke resourcePolicies.insert untuk membuat jadwal snapshot. Setidaknya, Anda harus menyertakan nama jadwal snapshot, lokasi regional penyimpanan snapshot, dan frekuensi snapshot.

Secara default, parameter onSourceDiskDelete disetel ke keepAutoSnapshots. Artinya, jika disk sumber dihapus, snapshot yang dihasilkan secara otomatis untuk disk tersebut akan dipertahankan tanpa batas waktu. Atau, Anda dapat menetapkan tanda ke applyRetentionPolicy untuk menerapkan kebijakan retensi.

Contoh berikut menetapkan jadwal snapshot harian yang dimulai pada pukul 12.00 UTC dan berulang setiap hari. Contoh ini juga menetapkan kebijakan retensi 5 hari; setelah 5 hari, snapshot akan otomatis dihapus.

Anda juga dapat menyertakan opsi lokalitas snapshot dan label snapshot dalam permintaan untuk memastikan snapshot Anda disimpan di lokasi tersebut pilihan.

POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/[REGION]/resourcePolicies

{
 "name": "[SCHEDULE_NAME]",
 "description": "[SCHEDULE_DESCRIPTION]",
 "snapshotSchedulePolicy": {
   "schedule": {
     "dailySchedule": {
       "startTime": "12:00",
       "daysInCycle": "1"
     }
   },
   "retentionPolicy": {
     "maxRetentionDays": "5"
   },
   "snapshotProperties": {
     "guestFlush": "False",
     "labels": {
       "env": "dev",
       "media": "images"
     },
     "storageLocations": ["US"]
   }
 }
}

dengan:

  • [PROJECT_ID] adalah nama project.
  • [REGION] adalah lokasi kebijakan resource jadwal snapshot.
  • [SCHEDULE_DESCRIPTION] adalah deskripsi jadwal snapshot.
  • [SCHEDULE_NAME] adalah nama jadwal snapshot.

Demikian pula, Anda dapat membuat jadwal mingguan atau bulanan. Tinjau referensi API untuk mengetahui detail khusus terkait menyetel jadwal mingguan atau bulanan.

Misalnya, permintaan berikut membuat jadwal mingguan yang berjalan pada hari Selasa dan Kamis, masing-masing pukul 09.00 dan 02.00.

POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/[REGION]/resourcePolicies

{
 "name": "[SCHEDULE_NAME]",
 "description": "[SCHEDULE_DESCRIPTION]",
 "snapshotSchedulePolicy": {
   "schedule": {
     "weeklySchedule": {
       "dayOfWeeks": [
       {
         "day": "Monday",
         "startTime": "9:00"
       },
       {
         "day": "Thursday",
         "startTime": "2:00"
       }
       ]
     }
   },
  "retentionPolicy": {
    "maxRetentionDays": "5"
  },
  "snapshotProperties": {
    "guestFlush": "False",
    "labels": {
      "production": "webserver"
    },
    "storageLocations": ["US"]
  }
 }
}

Melampirkan jadwal snapshot ke disk

Setelah memiliki jadwal, pasang ke disk yang ada. Gunakan konsol, perintah gcloud, atau metode Compute Engine API.

Konsol

Lampirkan jadwal snapshot ke disk yang ada.

  1. Di konsol Google Cloud, buka halaman Disk.

    Buka halaman Disks

  2. Pilih nama disk tempat Anda ingin melampirkan jadwal snapshot. Tindakan ini akan membuka halaman Kelola disk.
  3. Di halaman Manage disk, arahkan kursor ke menu More actions, lalu pilih Edit ini.
  4. Gunakan menu drop-down Snapshot schedule untuk menambahkan jadwal ke disk. Atau buat jadwal baru.
  5. Jika Anda membuat jadwal baru, klik Create.
  6. Klik Save untuk menyelesaikan tugas.

gcloud

Untuk menyertakan jadwal snapshot ke disk, gunakan perintah gcloud disks add-resource-policies.

gcloud compute disks add-resource-policies [DISK_NAME] \
    --resource-policies [SCHEDULE_NAME] \
    --zone [ZONE]

dengan:

  • [DISK_NAME] adalah nama disk yang ada.
  • [SCHEDULE_NAME] adalah nama jadwal snapshot.
  • [ZONE] adalah lokasi disk Anda.

API

Di API, buat permintaan POST ke disks.addResourcePolicies untuk melampirkan jadwal snapshot ke disk yang ada.

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

{
  "resourcePolicies": [
    "regions/[REGION]/resourcePolicies/[SCHEDULE_NAME]"
  ]
}

dengan:

  • [PROJECT_ID] adalah nama project.
  • [ZONE] adalah lokasi disk.
  • [REGION] adalah lokasi jadwal snapshot.
  • [DISK_NAME] adalah nama disk.
  • [SCHEDULE_NAME] adalah nama jadwal snapshot di region tempat Anda menerapkan disk ini.

Memulihkan data dari snapshot

Jika Anda mencadangkan boot disk atau non-boot disk dengan snapshot, Anda dapat membuat disk baru berdasarkan snapshot tersebut.

Pembatasan

  • Disk baru setidaknya harus berukuran sama dengan disk sumber asli untuk snapshot. Jika Anda membuat disk yang lebih besar dari disk sumber asli untuk snapshot, Anda harus mengubah ukuran sistem file pada persistent disk tersebut untuk menyertakan kapasitas disk tambahan. Bergantung pada sistem operasi dan jenis sistem file, Anda mungkin perlu menggunakan alat pengubahan ukuran sistem file yang berbeda. Untuk mengetahui informasi selengkapnya, lihat dokumentasi sistem operasi.

Membuat disk dari snapshot dan melampirkannya ke VM

Konsol

  1. Di Konsol Google Cloud, buka halaman Snapshots.

    Buka Snapshots

  2. Temukan nama snapshot yang ingin Anda pulihkan.

  3. Buka halaman Disks.

    Buka halaman Disks

  4. Klik Create new disk.

  5. Tetapkan parameter konfigurasi berikut:

    • Nama untuk disk.
    • Jenis untuk disk.
    • Secara opsional, Anda dapat mengganti pilihan region dan zona default. Anda dapat memilih region dan zona mana pun, terlepas dari lokasi penyimpanan snapshot sumber.
  6. Di bagian Source type, klik Snapshot.

  7. Pilih nama snapshot yang akan dipulihkan.

  8. Pilih ukuran disk baru, dalam gigabyte. Jumlah ini harus sama dengan atau lebih besar dari disk sumber asli untuk snapshot.

  9. Klik Create untuk membuat disk.

Selanjutnya, Anda dapat memasang disk baru ke instance yang ada.

  1. Buka halaman Instance VM.

    Buka halaman Instance VM

  2. Klik nama instance tempat Anda ingin memulihkan disk non-booting.
  3. Di bagian atas halaman detail instance, klik Edit.
  4. Di bagian Additional disks, klik Attach existing disk.
  5. Pilih nama disk baru yang dibuat dari snapshot Anda.
  6. Klik Done untuk memasang disk.
  7. Di bagian bawah halaman detail instance, klik Save untuk menerapkan perubahan pada instance.

gcloud

  1. Gunakan perintah perintah gcloud compute snapshots list untuk menemukan nama snapshot yang ingin Anda pulihkan:

    gcloud compute snapshots list
    
  2. Gunakan perintah perintah gcloud compute snapshots describe untuk menemukan ukuran snapshot yang ingin Anda pulihkan:

    gcloud compute snapshots describe SNAPSHOT_NAME
    

    Ganti SNAPSHOT_NAME dengan nama snapshot yang sedang dipulihkan.

  3. Gunakan gcloud compute disks create perintah untuk membuat disk regional atau zona baru dari snapshot Anda. Jika Anda memerlukan persistent disk SSD untuk throughput atau IOPS tambahan, sertakan flag --type dan tentukan pd-ssd.

    gcloud compute disks create DISK_NAME \
        --size=DISK_SIZE \
        --source-snapshot=SNAPSHOT_NAME \
        --type=DISK_TYPE
    

    Ganti kode berikut:

    • DISK_NAME: nama disk baru.
    • DISK_SIZE: Ukuran disk baru, dalam gigabyte. Jumlah ini harus sama dengan atau lebih besar dari disk sumber asli untuk snapshot.
    • SNAPSHOT_NAME: nama snapshot yang dipulihkan.
    • DISK_TYPE: URL lengkap atau sebagian untuk jenis persistent disk. Misalnya, https://www.googleapis.com/compute/v1/projects/PROJECT_ID /zones/ZONE/diskTypes/pd-ssd.
  4. Pasang disk baru ke instance yang ada menggunakan perintah gcloud compute instances attach-disk:

    gcloud compute instances attach-disk INSTANCE_NAME \
        --disk DISK_NAME
    

    Ganti kode berikut:

    • INSTANCE_NAME adalah nama instance.
    • DISK_NAME adalah nama disk yang dibuat dari snapshot Anda.

API

  1. Buat permintaan GET ke snapshots.list untuk menampilkan daftar snapshot di project Anda.

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

    Ganti PROJECT_ID dengan project ID Anda.

  2. Buat permintaan POST untuk membuat disk zona menggunakan metode disks.insert. Sertakan properti name, sizeGb, dan type. Untuk memulihkan disk menggunakan snapshot, Anda harus menyertakan properti sourceSnapshot.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/disks
    
    {
     "name": "DISK_NAME",
     "sizeGb": "DISK_SIZE",
     "type": "zones/ZONE/diskTypes/DISK_TYPE"
     "sourceSnapshot": "SNAPSHOT_NAME"
    }
    

    Ganti kode berikut:

    • PROJECT_ID: project ID Anda.
    • ZONE zona tempat instance dan disk baru berada.
    • DISK_NAME: nama disk baru.
    • DISK_SIZE: ukuran disk baru, dalam gigabyte. Jumlah ini harus sama dengan atau lebih besar dari disk sumber asli untuk snapshot.
    • DISK_TYPE: URL lengkap atau sebagian untuk jenis persistent disk. Contohnya, https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ ZONE/diskTypes/pd-ssd.
    • SNAPSHOT_NAME: snapshot sumber untuk disk yang sedang Anda pulihkan.
  3. Anda dapat memasang disk baru ke instance yang ada dengan membuat permintaan POST ke metode instances.attachDisk, dan menyertakan URL untuk disk yang baru saja dibuat dari snapsho Anda.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME/attachDisk
    
    {
     "source": "/compute/v1/projects/PROJECT_ID/zones/ZONE/disks/DISK_NAME"
    }
    

    Ganti kode berikut:

    • PROJECT_ID adalah project ID Anda.
    • ZONE adalah zona tempat instance dan disk baru Anda berada.
    • INSTANCE_NAME adalah nama instance tempat Anda menambahkan disk baru.
    • DISK_NAME adalah nama disk baru.

Go

Go

Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Go di Panduan memulai Vertex AI menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi API Go Vertex AI.

Untuk melakukan autentikasi ke Vertex AI, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat 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"
)

// createDiskFromSnapshot creates a new disk in a project in given zone.
func createDiskFromSnapshot(
	w io.Writer,
	projectID, zone, diskName, diskType, snapshotLink string,
	diskSizeGb int64,
) error {
	// projectID := "your_project_id"
	// zone := "us-west3-b" // should match diskType below
	// diskName := "your_disk_name"
	// diskType := "zones/us-west3-b/diskTypes/pd-ssd"
	// snapshotLink := "projects/your_project_id/global/snapshots/snapshot_name"
	// diskSizeGb := 120

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

	req := &computepb.InsertDiskRequest{
		Project: projectID,
		Zone:    zone,
		DiskResource: &computepb.Disk{
			Name:           proto.String(diskName),
			Zone:           proto.String(zone),
			Type:           proto.String(diskType),
			SourceSnapshot: proto.String(snapshotLink),
			SizeGb:         proto.Int64(diskSizeGb),
		},
	}

	op, err := disksClient.Insert(ctx, req)
	if err != nil {
		return fmt.Errorf("unable to create disk: %w", err)
	}

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

	fmt.Fprintf(w, "Disk created\n")

	return nil
}

Java

Java

Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Java di Panduan memulai Vertex AI menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi API Java Vertex AI.

Untuk melakukan autentikasi ke Vertex AI, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat 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.InsertDiskRequest;
import com.google.cloud.compute.v1.Operation;
import java.io.IOException;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

public class CreateDiskFromSnapshot {

  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 zone in which you want to create the disk.
    String zone = "europe-central2-b";

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

    // The type of disk you want to create. This value uses the following format:
    // "zones/{zone}/diskTypes/(pd-standard|pd-ssd|pd-balanced|pd-extreme)".
    // For example: "zones/us-west3-b/diskTypes/pd-ssd"
    String diskType = String.format("zones/%s/diskTypes/pd-ssd", zone);

    // Size of the new disk in gigabytes.
    long diskSizeGb = 10;

    // The full path and name of the snapshot that you want to use as the source for the new disk.
    // This value uses the following format:
    // "projects/{projectName}/global/snapshots/{snapshotName}"
    String snapshotLink = String.format("projects/%s/global/snapshots/%s", projectId,
        "SNAPSHOT_NAME");

    createDiskFromSnapshot(projectId, zone, diskName, diskType, diskSizeGb, snapshotLink);
  }

  // Creates a new disk in a project in given zone, using a snapshot.
  public static void createDiskFromSnapshot(String projectId, String zone, String diskName,
      String diskType, long diskSizeGb, String snapshotLink)
      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 `disksClient.close()` method on the client to safely
    // clean up any remaining background resources.
    try (DisksClient disksClient = DisksClient.create()) {

      // Set the disk properties and the source snapshot.
      Disk disk = Disk.newBuilder()
          .setName(diskName)
          .setZone(zone)
          .setSizeGb(diskSizeGb)
          .setType(diskType)
          .setSourceSnapshot(snapshotLink)
          .build();

      // Create the insert disk request.
      InsertDiskRequest insertDiskRequest = InsertDiskRequest.newBuilder()
          .setProject(projectId)
          .setZone(zone)
          .setDiskResource(disk)
          .build();

      // Wait for the create disk operation to complete.
      Operation response = disksClient.insertAsync(insertDiskRequest)
          .get(3, TimeUnit.MINUTES);

      if (response.hasError()) {
        System.out.println("Disk creation failed!" + response);
        return;
      }
      System.out.println("Disk created. Operation Status: " + response.getStatus());
    }
  }
}

Node.js

Node.js

Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Node.js di Panduan memulai Vertex AI menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi API Node.js Vertex AI.

Untuk melakukan autentikasi ke Vertex AI, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

/**
 * TODO(developer): Uncomment and replace these variables before running the sample.
 */
// const projectId = 'YOUR_PROJECT_ID';
// const zone = 'europe-central2-b';
// const diskName = 'YOUR_DISK_NAME';
// const diskType = 'zones/us-west3-b/diskTypes/pd-ssd';
// const diskSizeGb = 10;
// const snapshotLink = 'projects/project_name/global/snapshots/snapshot_name';

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

async function createDiskFromSnapshot() {
  const disksClient = new compute.DisksClient();

  const [response] = await disksClient.insert({
    project: projectId,
    zone,
    diskResource: {
      sizeGb: diskSizeGb,
      name: diskName,
      zone,
      type: diskType,
      sourceSnapshot: snapshotLink,
    },
  });
  let operation = response.latestResponse;
  const operationsClient = new compute.ZoneOperationsClient();

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

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

createDiskFromSnapshot();

Python

Python

Untuk mempelajari cara menginstal atau mengupdate Vertex AI SDK untuk Python, lihat Menginstal Vertex AI SDK untuk Python. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi Python API.

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_disk_from_snapshot(
    project_id: str,
    zone: str,
    disk_name: str,
    disk_type: str,
    disk_size_gb: int,
    snapshot_link: str,
) -> compute_v1.Disk:
    """
    Creates a new disk in a project in given zone.

    Args:
        project_id: project ID or project number of the Cloud project you want to use.
        zone: name of the zone in which you want to create the disk.
        disk_name: name of the disk you want to create.
        disk_type: the type of disk you want to create. This value uses the following format:
            "zones/{zone}/diskTypes/(pd-standard|pd-ssd|pd-balanced|pd-extreme)".
            For example: "zones/us-west3-b/diskTypes/pd-ssd"
        disk_size_gb: size of the new disk in gigabytes
        snapshot_link: a link to the snapshot you want to use as a source for the new disk.
            This value uses the following format: "projects/{project_name}/global/snapshots/{snapshot_name}"

    Returns:
        An unattached Disk instance.
    """
    disk_client = compute_v1.DisksClient()
    disk = compute_v1.Disk()
    disk.zone = zone
    disk.size_gb = disk_size_gb
    disk.source_snapshot = snapshot_link
    disk.type_ = disk_type
    disk.name = disk_name
    operation = disk_client.insert(project=project_id, zone=zone, disk_resource=disk)

    wait_for_extended_operation(operation, "disk creation")

    return disk_client.get(project=project_id, zone=zone, disk=disk_name)

Memasang disk

  1. Di terminal, gunakan perintah lsblk untuk mencantumkan disk yang terpasang ke instance dan menemukan disk yang ingin dipasang.

    $ sudo lsblk
    
    NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    sda      8:0    0   10G  0 disk
    └─sda1   8:1    0   10G  0 part /
    sdb      8:16   0  250G  0 disk
    

    Dalam contoh ini, sdb adalah nama perangkat untuk persistent disk kosong yang baru.

  2. Gunakan alat pemasangan untuk memasang disk ke instance, dan aktifkan opsi discard:

    $ sudo mount -o discard,defaults /dev/DEVICE_NAME /home/jupyter

    Ganti kode berikut:

    • DEVICE_NAME: nama perangkat disk yang akan dipasang.
  3. Konfigurasikan izin baca dan tulis pada disk. Untuk contoh ini, berikan akses tulis ke disk untuk semua pengguna.

    $ sudo chmod a+w /home/jupyter

Langkah berikutnya