Daten über einen Snapshot sichern

Auf dieser Seite wird gezeigt, wie Sie Daten auf Ihrer nutzerverwalteten Notebooks-Instanz von Vertex AI Workbench sichern. Dazu erstellen Sie einen Snapshot.

Die Daten auf Ihrer Instanz werden auf einem zonalen nichtflüchtigen Speicher gespeichert. Sie können Snapshots dieses Laufwerks erstellen und verwenden, um Ihre Daten zu sichern, einen wiederkehrenden Sicherungszeitplan zu erstellen und Daten in einer neuen Instanz wiederherzustellen.

Snapshot erstellen

Sie können auch Snapshots von Laufwerken erstellen, die ausgeführten Instanzen zugeordnet sind. Snapshots sind globale Ressourcen, sodass Sie sie zur Wiederherstellung von Daten auf einem neuen Laufwerk oder einer neuen Instanz innerhalb desselben Projekts verwenden können. Außerdem ist eine projektübergreifende Freigabe von Snapshots möglich.

Console

  1. Rufen Sie in der Google Cloud Console die Seite VM-Instanzen auf.

    Zu "VM-Instanzen"
    Die verbleibenden Schritte werden automatisch in der Google Cloud Console angezeigt.

  2. Wählen Sie das Projekt aus, das Ihre VM-Instanzen enthält.
  3. Klicken Sie in der Spalte Name auf den Namen der VM mit dem zu sichernden Laufwerk.
  4. Unter Speicher:
    • Klicken Sie im Abschnitt Bootlaufwerk auf Name, um das Bootlaufwerk zu sichern.
    • Klicken Sie unter Zusätzliche Laufwerke auf Name für das Laufwerk, um ein angehängtes Datenlaufwerk zu sichern.
  5. Klicken Sie auf Snapshot erstellen.
  6. Geben Sie unter Name einen eindeutigen Namen ein, um den Zweck des Snapshots zu identifizieren. Beispiel:
    • boot-disk-snapshot
    • attached-data-disk-snapshot
  7. Unter Typ ist standardmäßig ein Standard-Snapshot ausgewählt. Standard-Snapshots eignen sich am besten für eine langfristige Sicherung und Notfallwiederherstellung.

    Wählen Sie Archiv-Snapshot aus, um eine kostengünstigere Sicherung als bei Standard-Snapshots zu erstellen, die aber eine längere Datenwiederherstellungszeit hat.

    Weitere Informationen finden Sie unter Vergleich der Snapshot-Typen.

  8. Wählen Sie im Bereich Standort den Snapshot-Speicherort aus. Der vordefinierte oder benutzerdefinierte Standardspeicherort, der in Ihren Snapshot-Einstellungen definiert ist, wird automatisch ausgewählt. Optional können Sie die Snapshot-Einstellungen überschreiben und die Snapshots an einem benutzerdefinierten Standort speichern. Gehen Sie dazu so vor:

    1. Wählen Sie die Art des gewünschten Speicherorts für den Snapshot aus.

      • Wählen Sie Multiregional aus, um eine höhere Verfügbarkeit zu höheren Kosten zu erreichen.
      • Wählen Sie Regionale Snapshots aus, um den physischen Standort Ihrer Daten zu geringeren Kosten besser steuern zu können.
    2. Wählen Sie im Feld Standort auswählen die Region oder Multiregion aus, die Sie verwenden möchten. Wenn Sie die Region oder Multiregion mit der geringsten Entfernung zu Ihrem Quelllaufwerk verwenden möchten, wählen Sie einen Speicherort im Abschnitt Je nach Standort des Laufwerks aus.

  9. Klicken Sie auf Erstellen, um einen Snapshot zu erstellen.

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. Erstellen Sie den Snapshot mithilfe der Richtlinie für den Speicherort, die in Ihren Snapshot-Einstellungen definiert ist, oder verwenden Sie einen alternativen Speicherort Ihrer Wahl. Weitere Informationen finden Sie unter Snapshot-Speicherort für Snapshots auswählen. Sie müssen einen Snapshot-Namen angeben. Der Name muss zwischen 1 und 63 Zeichen lang sein und RFC 1035 entsprechen.

    • Verwenden Sie den Befehl gcloud compute snapshots create, um einen Snapshot eines nichtflüchtigen Speicher-Volumes am vordefinierten oder benutzerdefinierten Standardspeicherort zu erstellen, der in Ihren Snapshot-Einstellungen konfiguriert ist.

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

    • Alternativ können Sie die Snapshot-Einstellungen überschreiben und einen Snapshot an einem benutzerdefinierten Speicherort erstellen. Geben Sie dazu das Flag --storage-location an, um festzulegen, wo der Snapshot gespeichert werden soll:

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

      Ersetzen Sie Folgendes:

      • SNAPSHOT_NAME: Ein Name für den Snapshot.
      • SOURCE_DISK: Der Name des zonalen Persistent Disk-Volumes, von dem Sie einen Snapshot erstellen möchten.
      • SNAPSHOT_TYPE: Der Snapshot-Typ, entweder STANDARD oder ARCHIVE. Wenn kein Snapshot-Typ angegeben ist, wird ein STANDARD-Snapshot erstellt. Wählen Sie „Archive“ aus, um eine kostengünstigere Datenaufbewahrung zu ermöglichen.
      • SOURCE_DISK_ZONE: Die Zone des zonalen Persistent Disk-Volumes, von dem Sie einen Snapshot erstellen möchten.

      Verwenden Sie das Flag --storage-location nur, wenn Sie den vordefinierten oder benutzerdefinierten Standardspeicherort überschreiben möchten, der in Ihren Snapshot-Einstellungen konfiguriert ist.

    Die gcloud CLI wartet bis der Vorgang den Status READY oder FAILED zurückgibt oder das Zeitlimit erreicht und die letzten bekannten Details des Snapshots zurückgibt.

Terraform

Verwenden Sie die Ressource google_compute_snapshot, um einen Snapshot des zonalen nichtflüchtigen Speichers zu erstellen.

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

Informationen zum Anwenden oder Entfernen einer Terraform-Konfiguration finden Sie unter Grundlegende Terraform-Befehle.

API

Erstellen Sie den Snapshot in der Richtlinie für den Speicherort, die in Ihren Snapshot-Einstellungen definiert ist, oder verwenden Sie einen alternativen Speicherort Ihrer Wahl. Weitere Informationen finden Sie unter Snapshot-Speicherort für Snapshots auswählen.

  • Zum Erstellen eines Snapshots am vordefinierten oder benutzerdefinierten Standardspeicherort, der in Ihren Snapshot-Einstellungen konfiguriert ist, senden Sie eine POST-Anfrage an die Methode 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
    }
    

    Ersetzen Sie Folgendes:

    • DESTINATION_PROJECT_ID: Die ID des Projekts, in dem Sie den Snapshot erstellen möchten.
    • SNAPSHOT_NAME: Ein Name für den Snapshot.
    • SOURCE_PROJECT_ID: Die ID des Projekts des Quelllaufwerks.
    • SOURCE_ZONE: Die Zone des Quelllaufwerks.
    • SOURCE_DISK_NAME: Der Name des nichtflüchtigen Speichers, von dem Sie einen Snapshot erstellen möchten.
    • SNAPSHOT_TYPE: Der Snapshot-Typ, entweder STANDARD oder ARCHIVE. Wenn kein Snapshot-Typ angegeben ist, wird ein STANDARD-Snapshot erstellt.
  • Wenn Sie alternativ die Snapshot-Einstellungen überschreiben und einen Snapshot an einem benutzerdefinierten Speicherort erstellen möchten, senden Sie eine POST-Anfrage an die Methode snapshots.insert und fügen Sie das Attribut storageLocations in Ihre Anfrage ein:

    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
    }
    

    Ersetzen Sie Folgendes:

    • DESTINATION_PROJECT_ID: Die ID des Projekts, in dem Sie den Snapshot erstellen möchten.
    • SNAPSHOT_NAME: Ein Name für den Snapshot.
    • SOURCE_PROJECT_ID: Die ID des Projekts des Quelllaufwerks.
    • SOURCE_ZONE: Die Zone des Quelllaufwerks.
    • SOURCE_DISK_NAME: Der Name des nichtflüchtigen Speichers, von dem Sie einen Snapshot erstellen möchten.
    • SNAPSHOT_TYPE: Der Snapshot-Typ, entweder STANDARD oder ARCHIVE. Wenn kein Snapshot-Typ angegeben ist, wird ein STANDARD-Snapshot erstellt.
    • STORAGE_LOCATION: Der multiregionale Cloud Storage-Speicherort oder die Cloud Storage-Region, in der Sie den Snapshot speichern möchten. Sie können nur einen Speicherort angeben.

      Verwenden Sie den Parameter storageLocations nur, wenn Sie den vordefinierten oder benutzerdefinierten Standardspeicherort überschreiben möchten, der in Ihren Snapshot-Einstellungen konfiguriert ist.

Go

Go

Bevor Sie dieses Beispiel anwenden, folgen Sie den Einrichtungsschritten in der Compute Engine-Kurzanleitung zur Verwendung von Clientbibliotheken.

Richten Sie die Standardanmeldedaten für Anwendungen ein, um sich bei Compute Engine zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

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

Bevor Sie dieses Beispiel anwenden, folgen Sie den Einrichtungsschritten in der Compute Engine-Kurzanleitung zur Verwendung von Clientbibliotheken.

Richten Sie die Standardanmeldedaten für Anwendungen ein, um sich bei Compute Engine zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.


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

Bevor Sie dieses Beispiel anwenden, folgen Sie den Einrichtungsschritten in der Compute Engine-Kurzanleitung zur Verwendung von Clientbibliotheken.

Richten Sie die Standardanmeldedaten für Anwendungen ein, um sich bei Compute Engine zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

/**
 * 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

Bevor Sie dieses Beispiel anwenden, folgen Sie den Einrichtungsschritten in der Compute Engine-Kurzanleitung zur Verwendung von Clientbibliotheken.

Richten Sie die Standardanmeldedaten für Anwendungen ein, um sich bei Compute Engine zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

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)

Wiederkehrende Sicherung planen

Wenn Sie einen Snapshot-Zeitplan erstellen, erstellen Sie eine Ressourcenrichtlinie, die Sie auf einen oder mehrere nichtflüchtige Speicher anwenden können. So erstellen Sie einen Snapshot-Zeitplan:

Ein Snapshot-Zeitplan umfasst die folgenden Attribute:

  • Name des Zeitplans
  • Beschreibung des Zeitplans
  • Häufigkeit des Snapshots (stündlich, täglich, wöchentlich)
  • Beginn des Snapshots
  • Region, in der der Snapshot-Zeitplan verfügbar ist
  • Richtlinie zu gelöschtem Quelllaufwerk für die Verarbeitung automatisch generierter Snapshots, wenn das Quelllaufwerk gelöscht wird
  • Aufbewahrungsrichtlinie, mit der Sie definieren können, wie lange über den Snapshot-Zeitplan generierte Snapshots aufbewahrt werden

Beschränkungen

  • Ein nichtflüchtiger Speicher kann maximal mit zehn Snapshot-Zeitplänen gleichzeitig verknüpft sein.
  • Sie können keine Archiv-Snapshots mit einem Snapshot-Zeitplan erstellen.
  • Pro Region können maximal 1.000 verwendete Snapshot-Zeitpläne erstellt werden.
  • Snapshot-Zeitpläne gelten nur für das Projekt, in dem sie erstellt wurden. Snapshot-Zeitpläne können nicht in anderen Projekten oder Organisationen verwendet werden.
  • Möglicherweise müssen Sie eine Erhöhung der Ressourcenkontingente über die Konsole anfordern, wenn Sie zusätzliche Ressourcen in Ihrer Region benötigen.
  • Mit einem Laufwerk verknüpfte Snapshot-Zeitpläne können nicht gelöscht werden. Sie müssen einen Zeitplan zuerst von allen Laufwerken trennen, bevor Sie ihn löschen können.
  • Sie können einen vorhandenen Snapshot-Zeitplan aktualisieren, um die Beschreibung, den Zeitplan und die Labels zu ändern. Zum Aktualisieren anderer Werte für einen Snapshot-Zeitplan müssen Sie den Snapshot-Zeitplan löschen und einen neuen erstellen.
  • Für nichtflüchtige Speicher, die einen vom Kunden bereitgestellten Verschlüsselungsschlüssel (CSEK) verwenden, können Sie keine Snapshot-Zeitpläne erstellen.
  • Bei nichtflüchtigen Speichern, die einen vom Kunden verwalteten Verschlüsselungsschlüssel (CMEK) verwenden, werden alle mit einem Snapshot-Zeitplan erstellten Snapshots automatisch mit demselben Schlüssel verschlüsselt.

Zeitplan erstellen

Erstellen Sie einen Snapshot-Zeitplan für Ihre nichtflüchtigen Speicher mit der Google Cloud Console, der Google Cloud CLI oder der Compute Engine API. Sie müssen den Snapshot-Zeitplan in derselben Region erstellen, in der sich der nichtflüchtige Speicher befindet. Wenn sich der nichtflüchtiger Speicher beispielsweise in der Zone us-west1-a befindet, muss sich der Snapshot-Zeitplan in der Region us-west1 befinden. Weitere Informationen finden Sie unter Speicherort auswählen.

Console

  1. Rufen Sie in der Google Cloud Console die Seite VM-Instanzen auf.

    Zu „VM-Instanzen”
    Die verbleibenden Schritte werden automatisch in der Google Cloud Console angezeigt.

  2. Wählen Sie das Projekt aus, das Ihre VM-Instanzen enthält.
  3. Klicken Sie in der Spalte Name auf den Namen der VM mit dem nichtflüchtigen Speicher, für den Sie einen Snapshot-Zeitplan erstellen möchten.
  4. Unter Speicher klicken Sie auf den Namen des Bootlaufwerks oder des zusätzlichen Laufwerks, um dafür einen Snapshot-Zeitplan zu erstellen.
  5. Klicken Sie auf  Bearbeiten. Möglicherweise müssen Sie auf das Menü  Weitere Aktionen und dann auf  Bearbeiten klicken.
  6. Wählen Sie unter Snapshot-Zeitplan die Option Zeitplan erstellen aus.
  7. Geben Sie unter Name einen der folgenden Namen für den Snapshot-Zeitplan ein:
    • boot-disk-snapshot-schedule
    • attached-persistent-disk-snapshot-schedule
  8. Wählen Sie im Bereich Standort den Snapshot-Speicherort aus. Der vordefinierte oder benutzerdefinierte Standardspeicherort, der in Ihren Snapshot-Einstellungen definiert ist, wird automatisch ausgewählt. Optional können Sie die Snapshot-Einstellungen überschreiben und die Snapshots an einem benutzerdefinierten Standort speichern. Gehen Sie dazu so vor:

    1. Wählen Sie die Art des gewünschten Speicherorts für den Snapshot aus.

      • Wählen Sie Multiregional aus, um eine höhere Verfügbarkeit zu höheren Kosten zu erreichen.
      • Wählen Sie Regionale Snapshots aus, um den physischen Standort Ihrer Daten zu geringeren Kosten besser steuern zu können.
    2. Wählen Sie im Feld Standort auswählen die Region oder Multiregion aus, die Sie verwenden möchten. Wählen Sie Je nach Standort des Laufwerks aus, um die Region bzw. Multiregion mit der geringsten Entfernung zu Ihrem Quelllaufwerk zu verwenden.

  9. Klicken Sie auf Erstellen, um die Erstellung des Snapshot-Zeitplans abzuschließen.
  10. Klicken Sie auf Speichern, um diesen Snapshot-Zeitplan an den nichtflüchtigen Speicher anzuhängen.

gcloud

Verwenden Sie zum Erstellen eines Snapshot-Zeitplans für nichtflüchtige Speicher den gcloud-Befehl compute resource-policies create snapshot-schedule . Legen Sie die Häufigkeit des Zeitplans auf stündlich, täglich oder wöchentlich fest.

  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]

Dabei gilt:

  • [SCHEDULE_NAME] ist der Name des neuen Snapshot-Zeitplans.
  • "[SCHEDULE_DESCRIPTION]" ist die Beschreibung des Snapshot-Zeitplans. Setzen Sie die Beschreibung in Anführungszeichen.
  • [MAX_RETENTION_DAYS] ist die Anzahl der Tage für die Aufbewahrung des Snapshots. Der Wert 3 bedeutet beispielsweise, dass Snapshots 3 Tage lang aufbewahrt werden, bevor sie gelöscht werden. Sie müssen eine Aufbewahrungsrichtlinie von mindestens 1 Tag festlegen.
  • [START_TIME] ist die UTC-Startzeit. Sie müssen die Uhrzeit als volle Stunde angeben. Beispiel:
    • 14:00 Uhr PST ist 22:00.
    • Wenn Sie als Startzeit 22:13 festlegen, erhalten Sie eine Fehlermeldung.
  • [SNAPSHOT_INTERVAL] definiert das Intervall, in dem die Snapshots generiert werden sollen. Legen Sie den stündlichen Zeitplan mit einer Ganzzahl zwischen 1 und 23 fest. Legen Sie für die Stunde eine Zahl fest, durch die 24 teilbar ist. Beispiel: Wenn Sie --hourly-schedule auf 12 setzen, bedeutet dies, dass der Snapshot alle 12 Stunden generiert wird. Definieren Sie für einen wöchentlichen Zeitplan die Tage, an denen der Snapshot generiert werden soll. Wochentage werden ausgeschrieben; die Groß-/Kleinschreibung wird nicht berücksichtigt. Die Flags der Snapshot-Häufigkeit hourly-schedule, daily-schedule und weekly-schedule schließen sich gegenseitig aus. Wählen Sie jeweils nur ein Flag für den Snapshot-Zeitplan aus.

  • [FILE_NAME] ist der Name der Datei, die den wöchentlichen Snapshot-Zeitplan enthält, wenn Sie den Zeitplan in diesem Format angeben möchten. Beachten Sie, dass wöchentliche Zeitpläne an unterschiedlichen Wochentagen und zu unterschiedlichen Zeiten mithilfe einer Datei angegeben werden können. Sie können jedoch nicht mehrere wöchentliche Zeitpläne direkt in der Befehlszeile angeben. Beispiel: Sie können in der Datei einen Snapshot-Zeitplan für jeweils Montag und Mittwoch festlegen: [{"day": "MONDAY", "startTime": "04:00"}, {"day": "WEDNESDAY", "startTime": "02:00"}] Wenn Sie in der Datei eine Startzeit angeben, wird das Flag --start-time nicht benötigt. Der Zeitplan verwendet den Zeitstandard UTC.

  • [DELETION_OPTION] legt fest, was mit den Snapshots geschieht, wenn das Quelllaufwerk gelöscht wird. Wählen Sie entweder die Standardeinstellung keep-auto-snapshots aus, indem Sie dieses Flag auslassen, oder wenden Sie mit apply-retention-policy eine Aufbewahrungsrichtlinie an.

Dies sind zusätzliche Beispiele zum Einrichten eines Snapshot-Zeitplans. Für alle folgenden Beispiele gilt:

  • Die Regel für gelöschtes Laufwerk ist enthalten. Das Flag --on-source-disk-delete wird auf den Standardwert keep-auto-snapshots gesetzt, damit alle automatisch generierten Snapshots dauerhaft gespeichert werden. Alternativ können Sie dieses Flag auf apply-retention-policy festlegen, um Ihre Snapshot-Aufbewahrungsrichtlinie zu verwenden.
  • Der Speicherort ist auf US festgelegt, sodass alle generierten Snapshots am multiregionalen Standort "US" gespeichert werden.
  • Die Labels env=dev und media=images werden auf alle generierten Snapshots angewendet.
  • Die Aufbewahrungsrichtlinie ist auf 10 Tage festgelegt.

Stündlicher Zeitplan: In diesem Beispiel beginnt der Snapshot-Zeitplan um 22:00 Uhr UTC und wird alle vier Stunden ausgeführt.

  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

Täglicher Zeitplan: In diesem Beispiel beginnt der Snapshot-Zeitplan um 22:00 Uhr UTC und wird jeden Tag zur selben Zeit ausgeführt. Das Flag --daily-schedule muss vorhanden sein, darf aber auf keinen Wert gesetzt sein.

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

Wöchentlicher Zeitplan: In diesem Beispiel beginnt der Snapshot-Zeitplan um 22:00 Uhr UTC und wird jeden Dienstag und Donnerstag ausgeführt.

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

Erstellen Sie in der API eine POST-Anfrage an resourcePolicies.insert, um einen Snapshot-Zeitplan zu erstellen. Sie müssen mindestens den Namen des Snapshot-Zeitplans, den regionalen Snapshot-Speicherort und die Snapshot-Häufigkeit angeben.

Standardmäßig ist der Parameter onSourceDiskDelete auf keepAutoSnapshots eingestellt. Diese Einstellung gibt an, dass die automatisch generierten Snapshots für dieses Laufwerk auf unbestimmte Zeit beibehalten werden, wenn das Quelllaufwerk gelöscht wird. Alternativ können Sie das Flag auf applyRetentionPolicy setzen, um die Aufbewahrungsrichtlinie anzuwenden.

Im folgenden Beispiel wird ein täglicher Snapshot-Zeitplan festgelegt, der um 12:00 UTC beginnt und täglich wiederholt wird. In diesem Beispiel wird außerdem eine Aufbewahrungsrichtlinie von 5 Tagen festgelegt. Nach 5 Tagen werden die Snapshots automatisch entfernt.

Sie können auch den Snapshot-Speicherort und Snapshot-Labels in Ihre Anfrage aufnehmen, damit Snapshots am Ort Ihrer Wahl gespeichert werden:

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"]
   }
 }
}

Dabei gilt:

  • [PROJECT_ID] ist der Projektname.
  • [REGION] ist der Standort der Ressourcenrichtlinie für den Snapshot-Zeitplan.
  • [SCHEDULE_DESCRIPTION] ist die Beschreibung des Snapshot-Zeitplans.
  • [SCHEDULE_NAME] ist der Name des Snapshot-Zeitplans.

Auf ähnliche Weise können Sie einen wöchentlichen oder monatlichen Zeitplan erstellen. In der API-Referenz finden Sie Informationen zum Festlegen von wöchentlichen und monatlichen Zeitplänen.

Die folgende Anfrage erstellt beispielsweise einen wöchentlichen Zeitplan, der dienstags und donnerstags um 9:00 Uhr bzw. um 2:00 Uhr ausgeführt wird.

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"]
  }
 }
}

Snapshot-Zeitplan mit Laufwerk verknüpfen

Nachdem Sie einen Zeitplan erstellt haben, können Sie ihn mit einem vorhandenen Laufwerk verknüpfen. Verwenden Sie die Console, den gcloud-Befehl oder die Compute Engine API.

Console

So verknüpfen Sie einen Snapshot-Zeitplan mit einem vorhandenen Laufwerk:

  1. Rufen Sie in der Google Cloud Console die Seite Laufwerke auf.

    Zur Seite "Laufwerke"

  2. Klicken Sie auf den Namen des Laufwerks, an das Sie einen Snapshot-Zeitplan anhängen möchten. Dadurch wird die Seite Laufwerk verwalten geöffnet.
  3. Auf der Seite Laufwerk verwalten klicken Sie auf das Menü Weitere Aktionen und wählen Bearbeiten aus.
  4. Verwenden Sie das Drop-down-Menü Snapshot-Zeitplan, um den Zeitplan zum Laufwerk hinzuzufügen. Alternativ erstellen Sie einen neuen Zeitplan.
  5. Wenn Sie einen neuen Zeitplan erstellt haben, klicken Sie auf Erstellen.
  6. Klicken Sie auf Speichern, um die Aufgabe abzuschließen.

gcloud

Verwenden Sie den gcloud-Befehl disks add-resource-policies, um einen Snapshot-Zeitplan an ein Laufwerk anzuhängen.

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

Dabei gilt:

  • [DISK_NAME] ist der Name des vorhandenen Laufwerks.
  • [SCHEDULE_NAME] ist der Name des Snapshot-Zeitplans.
  • [ZONE] ist der Standort des Laufwerks.

API

Senden Sie in der API eine POST-Anfrage an disks.addResourcePolicies, um einen Snapshot-Zeitplan an ein vorhandenes Laufwerk anzuhängen:

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

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

Dabei gilt:

  • [PROJECT_ID] ist der Projektname.
  • [ZONE] ist der Standort des Laufwerks.
  • [REGION] ist der Standort des Snapshot-Zeitplans.
  • [DISK_NAME] ist der Name des Laufwerks.
  • [SCHEDULE_NAME] ist der Name des Snapshot-Zeitplans in dieser Region, den Sie auf dieses Laufwerk anwenden.

Daten aus einem Snapshot wiederherstellen

Wenn Sie ein Boot- oder Nicht-Bootlaufwerk mit einem Snapshot gesichert haben, können Sie anhand des Snapshots ein neues Laufwerk erstellen.

Beschränkungen

  • Das neue Laufwerk muss mindestens die Größe des ursprünglichen Quelllaufwerks für den Snapshot haben. Wenn Sie ein Laufwerk erstellen, das größer als das ursprüngliche Quelllaufwerk für den Snapshot ist, müssen Sie die Größe des Dateisystems auf diesem nichtflüchtigen Laufwerk anpassen, damit der zusätzliche Speicherplatz berücksichtigt wird. Je nach Betriebssystem und Dateisystemtyp müssen Sie möglicherweise ein anderes Tool zur Anpassung der Dateisystemgröße verwenden. Weitere Informationen finden Sie in der Dokumentation Ihres Betriebssystems.

Laufwerk aus einem Snapshot erstellen und an eine VM anhängen

Console

  1. Rufen Sie in der Google Cloud Console die Seite Snapshots auf.

    Zu den Snapshots

  2. Suchen Sie den Namen des Snapshots, den Sie wiederherstellen möchten.

  3. Gehen Sie zur Seite Laufwerke.

    Zur Seite "Laufwerke"

  4. Klicken Sie auf Neues Laufwerk erstellen.

  5. Geben Sie die folgenden Konfigurationsparameter an:

    • Name für das Laufwerk.
    • Typ für das Laufwerk.
    • Optional können Sie die Auswahl der Standardregion und -zone überschreiben. Sie haben die Möglichkeit, eine beliebige Region und Zone auszuwählen, unabhängig vom Speicherort des Quell-Snapshots.
  6. Klicken Sie unter Quelltyp auf Snapshot.

  7. Wählen Sie den Namen des wiederherzustellenden Snapshots aus.

  8. Wählen Sie die Größe des neuen Laufwerks in GB. Diese Zahl muss größer oder gleich dem ursprünglichen Quelllaufwerk für den Snapshot sein.

  9. Klicken Sie auf Erstellen, um das Laufwerk anzulegen.

Sie können das neue Laufwerk an eine vorhandene Instanz anhängen.

  1. Rufen Sie die Seite VM-Instanzen auf.

    Zur Seite "VM-Instanzen"

  2. Klicken Sie auf den Namen der Instanz, in der Sie das Nicht-Bootlaufwerk wiederherstellen möchten.
  3. Klicken Sie oben auf der Seite Instanzdetails auf Bearbeiten.
  4. Klicken Sie unter Zusätzliche Laufwerke auf Vorhandenes Laufwerk hinzufügen.
  5. Wählen Sie den Namen des neuen Laufwerks aus, das aus dem Snapshot erstellt wurde.
  6. Klicken Sie auf Fertig, um das Laufwerk anzuhängen.
  7. Klicken Sie unten auf der Seite "Instanzdetails" auf Speichern, um die Änderungen für die Instanz zu übernehmen.

gcloud

  1. Verwenden Sie den Befehl gcloud compute snapshots list, um den Namen des Snapshots zu finden, den Sie wiederherstellen möchten:

    gcloud compute snapshots list
    
  2. Verwenden Sie den Befehl gcloud compute snapshots describe, um die Größe des Snapshots zu ermitteln, den Sie wiederherstellen möchten:

    gcloud compute snapshots describe SNAPSHOT_NAME
    

    Ersetzen Sie SNAPSHOT_NAME durch den Namen des wiederherzustellenden Snapshots.

  3. Verwenden Sie den Befehl gcloud compute disks create, um ein neues regionales oder zonales Laufwerk aus dem Snapshot zu erstellen. Wenn Sie nichtflüchtigen SSD-Speicher für zusätzlichen Durchsatz oder mehr IOPS benötigen, fügen Sie das Flag --type ein und geben Sie pd-ssd an.

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

    Ersetzen Sie Folgendes:

    • DISK_NAME: der Name des neuen Laufwerks.
    • DISK_SIZE: die Größe des neuen Laufwerks in GB. Diese Zahl muss größer oder gleich dem ursprünglichen Quelllaufwerk für den Snapshot sein.
    • SNAPSHOT_NAME: der Name des wiederherzustellenden Snapshots.
    • DISK_TYPE: Vollständige oder partielle URL für den Typ des Laufwerks. Beispiel: https://www.googleapis.com/compute/v1/projects/PROJECT_ID /zones/ZONE/diskTypes/pd-ssd
  4. Hängen Sie das neue Laufwerk mit dem gcloud compute instances attach-disk-Befehl an eine vorhandene Instanz an:

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

    Ersetzen Sie Folgendes:

    • INSTANCE_NAME ist der Name der Instanz.
    • DISK_NAME ist der Name des aus dem Snapshot erstellten Laufwerks.

API

  1. Erstellen Sie eine GET-Anfrage an snapshots.list, um die Liste der Snapshots in Ihrem Projekt anzuzeigen.

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

    Ersetzen Sie PROJECT_ID durch Ihre Projekt-ID.

  2. Erstellen Sie eine POST-Anfrage, um mit der Methode disks.insert ein zonales Laufwerk zu erstellen. Fügen Sie die Attribute name, sizeGb und type hinzu. Damit ein Laufwerk mithilfe eines Snapshots wiederhergestellt werden kann, muss das Attribut sourceSnapshot eingefügt werden.

    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"
    }
    

    Ersetzen Sie Folgendes:

    • PROJECT_ID: Ihre Projekt-ID.
    • ZONE ist die Zone, in der sich Ihre Instanz und das neue Laufwerk befinden.
    • DISK_NAME: durch den Namen des neuen Laufwerks.
    • DISK_SIZE ist die Größe des neuen Laufwerks in GB. Diese Zahl muss größer oder gleich dem ursprünglichen Quelllaufwerk für den Snapshot sein.
    • DISK_TYPE: Vollständige oder partielle URL für den Typ des Laufwerks. Beispiel: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ ZONE/diskTypes/pd-ssd.
    • SNAPSHOT_NAME ist der Quell-Snapshot für das Laufwerk, das Sie wiederherstellen.
  3. Sie können das neue Laufwerk dann an eine vorhandene Instanz anhängen. Dazu erstellen Sie eine POST-Anfrage an die Methode instances.attachDisk und geben dabei den URL zu dem zonale Laufwerk an, das Sie gerade aus Ihrem Snapshot erstellt haben.

    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"
    }
    

    Ersetzen Sie Folgendes:

    • PROJECT_ID ist die Projekt-ID.
    • ZONE ist die Zone, in der sich Ihre Instanz und das neue Laufwerk befinden.
    • INSTANCE_NAME: Name der Instanz, der Sie das neue Laufwerk hinzufügen.
    • DISK_NAME ist der Name des neuen Laufwerks.

Go

Go

Bevor Sie dieses Beispiel anwenden, folgen Sie den Go Schritten zur Einrichtung in der Vertex AI-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur Vertex AI Go API.

Richten Sie zur Authentifizierung bei Vertex AI Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

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

Bevor Sie dieses Beispiel anwenden, folgen Sie den Java Schritten zur Einrichtung in der Vertex AI-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur Vertex AI Java API.

Richten Sie zur Authentifizierung bei Vertex AI Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.


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

Bevor Sie dieses Beispiel anwenden, folgen Sie den Node.js Schritten zur Einrichtung in der Vertex AI-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur Vertex AI Node.js API.

Richten Sie zur Authentifizierung bei Vertex AI Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

/**
 * 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

Informationen zur Installation des Vertex AI SDK for Python finden Sie unter Vertex AI SDK for Python installieren. Weitere Informationen finden Sie in der Referenzdokumentation zur 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)

Laufwerk bereitstellen

  1. Rufen Sie im Terminal mit dem Befehl lsblk eine Liste der Laufwerke auf, die an Ihre Instanz angehängt sind, und suchen Sie das Laufwerk, das Sie bereitstellen möchten.

    $ 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
    

    In diesem Beispiel ist sdb der Gerätename für den neuen leeren nichtflüchtigen Speicher.

  2. Stellen Sie mit dem mount-Tool das Laufwerk für die Instanz bereit und aktivieren Sie die Option discard:

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

    Ersetzen Sie Folgendes:

    • DEVICE_NAME: durch den Gerätenamen des Laufwerks, das bereitgestellt werden soll.
  3. Konfigurieren Sie Lese- und Schreibberechtigungen auf dem Laufwerk. In diesem Beispiel wird allen Nutzern Schreibzugriff auf das Gerät gewährt:

    $ sudo chmod a+w /home/jupyter
    

Nächste Schritte