Esegui il backup dei dati utilizzando uno snapshot

Questa pagina mostra come eseguire il backup dei dati archiviati nell'istanza di notebook gestiti dall'utente di Vertex AI Workbench creando uno snapshot.

I dati dell'istanza vengono archiviati su un disco permanente a livello di zona. Puoi creare e utilizzare snapshot di questo disco per eseguire il backup dei dati, creare una pianificazione di backup ricorrente e ripristinare i dati in una nuova istanza.

Crea uno snapshot

Puoi creare snapshot dai dischi anche quando sono collegati a istanze in esecuzione. Gli snapshot sono risorse globali, pertanto puoi utilizzarli per ripristinare i dati su un nuovo disco o istanza all'interno dello stesso progetto. Puoi anche condividere gli snapshot tra i progetti.

Console

  1. Nella console Google Cloud, vai alla pagina Istanze VM.

    Vai a Istanze VM
    I passaggi rimanenti verranno visualizzati automaticamente nella console Google Cloud.

  2. Seleziona il progetto che contiene le istanze VM.
  3. Nella colonna Nome, fai clic sul nome della VM con il disco di cui vuoi eseguire il backup.
  4. In Spazio di archiviazione:
    • Per eseguire il backup del disco di avvio, fai clic sul nome del disco di avvio nella sezione Disco di avvio.
    • Per eseguire il backup di un disco dati collegato, fai clic sul nome del disco in Dischi aggiuntivi.
  5. Fai clic su Crea snapshot.
  6. In Nome, inserisci un nome univoco per identificare lo scopo dello snapshot, ad esempio:
    • boot-disk-snapshot
    • attached-data-disk-snapshot
  7. In Tipo, il valore predefinito è un'istantanea standard. Gli snapshot standard sono ideali per il backup a lungo termine e ripristino di emergenza.

    Scegli Snapshot di archiviazione per creare un backup più conveniente rispetto agli snapshot standard, ma con un tempo di recupero dei dati più lungo.

    Per ulteriori informazioni, consulta Confronto dei tipi di snapshot.

  8. Nella sezione Località, scegli la località di archiviazione degli snapshot. La località predefinita personalizzata o predefinita definita nelle impostazioni degli snapshot viene selezionata automaticamente. Se vuoi, puoi ignorare le impostazioni degli snapshot e archiviare gli snapshot in una località di archiviazione personalizzata nel seguente modo:

    1. Scegli il tipo di località di archiviazione che preferisci per lo snapshot.

      • Scegli Più regioni per una maggiore disponibilità a un costo superiore.
      • Scegli gli snapshot regionali per un maggiore controllo sulla località fisica dei dati a un costo inferiore.
    2. Nel campo Seleziona località, seleziona la regione specifica o più regioni che vuoi utilizzare. Per utilizzare la regione o più regioni più vicine al tuo disco di origine, scegli una località dalla sezione In base alla posizione del disco.

  9. Per creare uno snapshot, fai clic su Crea.

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. Crea lo snapshot utilizzando il criterio di località di archiviazione definito dalle impostazioni degli snapshot o utilizzando una località di archiviazione alternativa a tua scelta. Per ulteriori informazioni, consulta Scegliere la posizione di archiviazione degli snapshot. Devi specificare un nome per lo snapshot. Il nome deve avere una lunghezza compresa tra 1 e 63 caratteri e deve essere conforme allo standard RFC 1035.

    • Per creare uno snapshot di un volume del disco permanente nella posizione predefinita personalizzata o predefinita configurata nelle impostazioni degli snapshot, utilizza il comando gcloud compute snapshots create.

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

    • In alternativa, per ignorare le impostazioni degli snapshot e crearne uno in una posizione di archiviazione personalizzata, includi il flag --storage-location per indicarne la posizione di archiviazione:

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

      Sostituisci quanto segue:

      • SNAPSHOT_NAME: un nome per lo snapshot.
      • SOURCE_DISK: il nome del volume Persistent Disk a livello di zona da cui vuoi creare uno snapshot.
      • SNAPSHOT_TYPE: il tipo di istantanea, STANDARD o ARCHIVE. Se non viene specificato un tipo di snapshot, viene creato uno snapshot STANDARD. Scegli Archiviazione per una conservazione dei dati più economica.
      • SOURCE_DISK_ZONE: la zona del volume del disco permanente zonale da cui vuoi creare uno snapshot.

      Utilizza il flag --storage-location solo se vuoi eseguire l'override della posizione di archiviazione predefinita personalizzata o predefinita configurata nelle impostazioni degli snapshot.

    L'interfaccia a riga di comando gcloud attende che l'operazione restituisca uno stato READY o FAILED oppure che venga raggiunto il timeout massimo e restituisce gli ultimi dettagli noti dello snapshot.

Terraform

Per creare uno snapshot del disco permanente a livello di zona, utilizza la risorsa google_compute_snapshot.

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

Per scoprire come applicare o rimuovere una configurazione Terraform, consulta Comandi Terraform di base.

API

Crea lo snapshot nel criterio della località di archiviazione definito dalle impostazioni degli snapshot o utilizzando una località di archiviazione alternativa a tua scelta. Per ulteriori informazioni, consulta Scegliere la posizione di archiviazione degli snapshot.

  • Per creare lo snapshot nella posizione predefinita personalizzata o predefinita configurata nelle impostazioni degli snapshot, invia una richiesta POST al metodo 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
    }
    

    Sostituisci quanto segue:

    • DESTINATION_PROJECT_ID: l'ID del progetto in cui vuoi creare lo snapshot.
    • SNAPSHOT_NAME: un nome per lo snapshot.
    • SOURCE_PROJECT_ID: l'ID del progetto del disco di origine.
    • SOURCE_ZONE: la zona del disco di origine.
    • SOURCE_DISK_NAME: il nome del disco permanente da cui vuoi creare uno snapshot.
    • SNAPSHOT_TYPE: il tipo di istantanea, STANDARD o ARCHIVE. Se non viene specificato un tipo di snapshot, viene creato uno snapshot STANDARD.
  • In alternativa, per ignorare le impostazioni degli snapshot e crearne uno in una posizione di archiviazione personalizzata, invia una richiesta POST al metodo snapshots.insert e includi la proprietà storageLocations nella richiesta:

    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
    }
    

    Sostituisci quanto segue:

    • DESTINATION_PROJECT_ID: l'ID del progetto in cui vuoi creare lo snapshot.
    • SNAPSHOT_NAME: un nome per lo snapshot.
    • SOURCE_PROJECT_ID: l'ID del progetto del disco di origine.
    • SOURCE_ZONE: la zona del disco di origine.
    • SOURCE_DISK_NAME: il nome del disco permanente da cui vuoi creare uno snapshot.
    • SNAPSHOT_TYPE: il tipo di istantanea, STANDARD o ARCHIVE. Se non viene specificato un tipo di snapshot, viene creato uno snapshot STANDARD.
    • STORAGE_LOCATION: la regione multipla Cloud Storage o la regione Cloud Storage in cui vuoi archiviare lo snapshot. Puoi specificare un solo luogo di archiviazione.

      Utilizza il parametro storageLocations solo se vuoi eseguire l'override della posizione di archiviazione predefinita personalizzata o predefinita configurata nelle impostazioni degli snapshot.

Vai

Go

Prima di provare questo esempio, segui le istruzioni di configurazione riportate nella guida rapida di Compute Engine che utilizza le librerie client.

Per autenticarti a Compute Engine, configura le credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

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

Prima di provare questo esempio, segui le istruzioni di configurazione riportate nella guida rapida di Compute Engine che utilizza le librerie client.

Per autenticarti a Compute Engine, configura le credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.


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

Prima di provare questo esempio, segui le istruzioni di configurazione riportate nella guida rapida di Compute Engine che utilizza le librerie client.

Per autenticarti a Compute Engine, configura le credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

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

Prima di provare questo esempio, segui le istruzioni di configurazione riportate nella guida rapida di Compute Engine che utilizza le librerie client.

Per autenticarti a Compute Engine, configura le credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

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)

Pianificare un backup ricorrente

Quando crei una pianificazione degli snapshot, crei un criterio delle risorse che puoi applicare a uno o più dischi permanenti. Puoi creare pianificazioni di snapshot nei seguenti modi:

Una pianificazione degli istantanei include le seguenti proprietà:

  • Nome pianificazione
  • Descrizione della pianificazione
  • Frequenza degli snapshot (ora, giorno, settimana)
  • Ora di inizio dello snapshot
  • Regione in cui è disponibile la pianificazione degli snapshot
  • Criterio di eliminazione del disco di origine per la gestione delle istantanee generate automaticamente se il disco di origine viene eliminato
  • Criterio di conservazione per definire per quanto tempo conservare gli snapshot generati dalla pianificazione degli snapshot

Limitazioni

  • A un disco permanente possono essere associate al massimo 10 pianificazioni di snapshot contemporaneamente.
  • Non puoi creare snapshot dell'archivio utilizzando una pianificazione degli snapshot.
  • Puoi creare un massimo di 1000 pianificazioni degli snapshot in uso per regione.
  • Le pianificazioni degli snapshot si applicano solo nel progetto in cui sono state create. Le pianificazioni degli istantanei non possono essere utilizzate in altri progetti o organizzazioni.
  • Se hai bisogno di risorse aggiuntive nella tua regione, potresti dover richiedere un aumento della quota di risorse tramite la console.
  • Non puoi eliminare una pianificazione degli snapshot se è collegata a un disco. Devi sganciare la pianificazione da tutti i dischi, quindi eliminarla.
  • Puoi aggiornare una pianificazione degli snapshot esistente per modificare la descrizione, la programmazione e le etichette. Per aggiornare altri valori per una pianificazione di snapshot, devi eliminare la pianificazione e crearne una nuova.
  • Per i dischi permanenti che utilizzano una chiave di crittografia fornita dal cliente (CSEK), non puoi creare pianificazioni degli snapshot.
  • Per i dischi permanenti che utilizzano una chiave di crittografia gestita dal cliente (CMEK), tutti gli snapshot creati con una pianificazione degli snapshot vengono criptati automaticamente con la stessa chiave.

Crea una pianificazione

Crea una pianificazione degli snapshot per i tuoi dischi permanenti utilizzando la console Google Cloud, Google Cloud CLI o l'API Compute Engine. Devi creare la pianificazione delle istantanee nella stessa regione in cui si trova il disco permanente. Ad esempio, se il tuo disco permanente si trova nella zona us-west1-a, la pianificazione delle istantanee deve trovarsi nella regione us-west1. Per ulteriori informazioni, consulta Scegliere una posizione di archiviazione.

Console

  1. Nella console Google Cloud, vai alla pagina Istanze VM.

    Vai a Istanze VM
    I passaggi rimanenti verranno visualizzati automaticamente nella console Google Cloud.

  2. Seleziona il progetto che contiene le istanze VM.
  3. Nella colonna Nome, fai clic sul nome della VM con il disco permanente per cui vuoi creare la pianificazione di snapshot.
  4. In Spazio di archiviazione, fai clic sul nome del disco di avvio o del disco aggiuntivo per cui vuoi creare la pianificazione di snapshot.
  5. Fai clic su Modifica. Potresti dover fare clic sul menu Altre azioni e poi su Modifica.
  6. In Pianificazione di snapshot, scegli Crea una pianificazione.
  7. In Nome, inserisci uno dei seguenti nomi per la pianificazione di snapshot:
    • boot-disk-snapshot-schedule
    • attached-persistent-disk-snapshot-schedule
  8. Nella sezione Località, scegli la località di archiviazione degli snapshot. La località predefinita personalizzata o predefinita definita nelle impostazioni degli snapshot viene selezionata automaticamente. Se vuoi, puoi ignorare le impostazioni degli snapshot e archiviare gli snapshot in una località di archiviazione personalizzata nel seguente modo:

    1. Scegli il tipo di località di archiviazione che preferisci per lo snapshot.

      • Scegli Più regioni per una maggiore disponibilità a un costo superiore.
      • Scegli gli snapshot regionali per un maggiore controllo sulla località fisica dei dati a un costo inferiore.
    2. Nel campo Seleziona località, seleziona la regione specifica o più regioni che vuoi utilizzare. Per utilizzare la regione o più regioni più vicine al tuo disco di origine, seleziona Basata sulla posizione del disco.

  9. Per completare la creazione della pianificazione di snapshot, fai clic su Crea.
  10. Per collegare questa pianificazione di snapshot al disco permanente, fai clic su Salva.

gcloud

Per creare una pianificazione degli snapshot per i dischi permanenti, utilizza il comando compute resource-policies create snapshot-schedule gcloud. Imposta la frequenza della programmazione su oraria, giornaliera o settimanale.

  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]

dove:

  • [SCHEDULE_NAME] è il nome della nuova pianificazione degli snapshot.
  • "[SCHEDULE_DESCRIPTION]" è una descrizione della pianificazione degli snapshot. Racchiudi la descrizione tra virgolette.
  • [MAX_RETENTION_DAYS] è il numero di giorni per conservare l'istantanea. Ad esempio, l'impostazione 3 indica che gli snapshot vengono conservati per 3 giorni prima di essere eliminati. Devi impostare un criterio di conservazione di almeno 1 giorno.
  • [START_TIME] è l'ora di inizio UTC. L'ora di inizio deve essere un'ora piena. Ad esempio:
    • Le 14:00 PST corrispondono a 22:00.
    • Se imposti un'ora di inizio pari a 22:13, riceverai un errore.
  • [SNAPSHOT_INTERVAL] definisce l'intervallo a cui vuoi eseguire lo snapshot. Imposta la pianificazione ogni ora utilizzando un numero intero compreso tra 1 e 23. Scegli un numero di ore che sia diviso equamente per 24. Ad esempio, se imposti --hourly-schedule su 12, lo snapshot viene generato ogni 12 ore. Per una pianificazione settimanale, definisci i giorni in cui vuoi che venga eseguito lo snapshot. Devi scrivere i giorni della settimana, che non sono sensibili alle maiuscole. I flag di frequenza degli snapshot hourly-schedule, daily-schedule e weekly-schedule sono mutuamente esclusivi. Devi sceglierne uno per la pianificazione degli snapshot.

  • [FILE_NAME] è il nome del file contenente la pianificazione degli snapshot settimanali, se scegli di fornire la pianificazione in questo formato. Tieni presente che puoi specificare pianificazioni settimanali in giorni diversi della settimana e in orari diversi utilizzando un file (ma non puoi specificare più pianificazioni settimanali direttamente sulla riga di comando). Ad esempio, il file potrebbe specificare una pianificazione degli istantanei di lunedì e mercoledì: [{"day": "MONDAY", "startTime": "04:00"}, {"day": "WEDNESDAY", "startTime": "02:00"}] Se nel file includi un'ora di inizio, non è necessario impostare il flag --start-time. La pianificazione utilizza lo standard orario UTC.

  • [DELETION_OPTION] determina cosa succede agli snapshot se il disco di origine viene eliminato. Scegli il valore predefinito keep-auto-snapshots omettendo questo flag oppure utilizza apply-retention-policy per applicare un criterio di conservazione.

Questi sono altri esempi per la configurazione di una pianificazione degli snapshot. In tutti i seguenti esempi:

  • La regola di eliminazione del disco è inclusa; il flag --on-source-disk-delete è impostato sul valore predefinito keep-auto-snapshots per conservare definitivamente tutti gli snapshot generati automaticamente. In alternativa, imposta questo flag su apply-retention-policy per utilizzare i criteri di conservazione degli snapshot.
  • La posizione di archiviazione è impostata su US, pertanto tutte le istantanee generate verranno memorizzate nella multi-regione degli Stati Uniti.
  • Le etichette env=dev e media=images vengono applicate a tutti gli screenshot generati.
  • Il criterio di conservazione è impostato su 10 giorni.

Pianificazione oraria:in questo esempio, la pianificazione degli snapshot inizia alle 22:00 UTC e viene eseguita ogni 4 ore.

  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

Pianificazione giornaliera:in questo esempio, la pianificazione degli istantanei inizia alle 22:00 UTC e viene eseguita ogni giorno alla stessa ora. Il flag --daily-schedule deve essere presente, ma non impostato su alcun valore.

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

Pianificazione settimanale: in questo esempio, la pianificazione degli istantanei inizia alle 22:00 UTC e viene eseguita ogni settimana di martedì e giovedì.

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

Nell'API, crea una richiesta POST a resourcePolicies.insert per creare una pianificazione di snapshot. Devi includere almeno il nome della pianificazione degli snapshot, la posizione regionale dello spazio di archiviazione degli snapshot e la frequenza degli snapshot.

Per impostazione predefinita, il parametro onSourceDiskDelete è impostato su keepAutoSnapshots. Ciò significa che se il disco di origine viene eliminato, lo snapshot generato automaticamente per quel disco viene conservato a tempo indeterminato. In alternativa, puoi impostare il flag su applyRetentionPolicy per applicare il criterio di conservazione.

Nell'esempio seguente viene impostata una pianificazione giornaliera degli snapshot che inizia alle 00:00 UTC e si ripete ogni giorno. L'esempio imposta anche un criterio di conservazione di 5 giorni. Dopo 5 giorni, gli snapshot vengono rimossi automaticamente.

Puoi anche includere nella richiesta opzioni di località degli snapshot e etichette degli snapshot per assicurarti che gli snapshot vengano archiviati nella località che preferisci.

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

dove:

  • [PROJECT_ID] è il nome del progetto.
  • [REGION] è la posizione della policy della risorsa di pianificazione degli snapshot.
  • [SCHEDULE_DESCRIPTION] è la descrizione della pianificazione degli snapshot.
  • [SCHEDULE_NAME] è il nome della pianificazione degli snapshot.

Analogamente, puoi creare una pianificazione settimanale o mensile. Consulta la documentazione di riferimento dell'API per informazioni specifiche sull'impostazione di una pianificazione settimanale o mensile.

Ad esempio, la seguente richiesta crea una pianificazione settimanale che viene eseguita martedì e giovedì, rispettivamente alle 9:00 e alle 14: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"]
  }
 }
}

Collegare una pianificazione di snapshot a un disco

Una volta creata una pianificazione, collegala a un disco esistente. Utilizza la console, il comando gcloud o il metodo dell'API Compute Engine.

Console

Collega una pianificazione di snapshot a un disco esistente.

  1. Nella console Google Cloud, vai alla pagina Dischi.

    Vai alla pagina Dischi

  2. Seleziona il nome del disco a cui vuoi associare una pianificazione degli snapshot. Viene visualizzata la pagina Gestisci disco.
  3. Nella pagina Gestisci disco, passa il mouse sopra il menu Altre azioni e fai clic su Modifica.
  4. Utilizza il menu a discesa Pianificazione istantanee per aggiungere la pianificazione al disco. In alternativa, crea una nuova pianificazione.
  5. Se hai creato una nuova pianificazione, fai clic su Crea.
  6. Fai clic su Salva per completare l'attività.

gcloud

Per collegare una pianificazione degli snapshot a un disco, utilizza il comando disks add-resource-policies gcloud.

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

dove:

  • [DISK_NAME] è il nome del disco esistente.
  • [SCHEDULE_NAME] è il nome della pianificazione degli snapshot.
  • [ZONE] è la posizione del disco.

API

Nell'API, crea una richiesta POST a disks.addResourcePolicies per collegare una pianificazione di snapshot a un disco esistente.

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

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

dove:

  • [PROJECT_ID] è il nome del progetto.
  • [ZONE] è la posizione del disco.
  • [REGION] è la posizione della pianificazione degli snapshot.
  • [DISK_NAME] è il nome del disco.
  • [SCHEDULE_NAME] è il nome della pianificazione degli snapshot nella regione che stai applicando a questo disco.

Ripristinare i dati da uno snapshot

Se hai eseguito il backup di un disco di avvio o di un disco diverso dal disco di avvio con uno snapshot, puoi creare un nuovo disco in base allo snapshot.

Limitazioni

  • Il nuovo disco deve avere almeno le stesse dimensioni del disco di origine originale per lo snapshot. Se crei un disco più grande del disco di origine originale per lo snapshot, devi ridimensionare il file system su quel disco permanente per includere lo spazio su disco aggiuntivo. A seconda del sistema operativo e del tipo di file system, potresti dover utilizzare uno strumento di ridimensionamento del file system diverso. Per saperne di più, consulta la documentazione del sistema operativo.

Creare un disco da uno snapshot e collegarlo a una VM

Console

  1. Nella console Google Cloud, vai alla pagina Snapshot.

    Vai a Snapshot

  2. Trova il nome dello snapshot che vuoi ripristinare.

  3. Vai alla pagina Dischi.

    Vai alla pagina Dischi

  4. Fai clic su Crea nuovo disco.

  5. Specifica i seguenti parametri di configurazione:

    • Un nome per il disco.
    • Un tipo per il disco.
    • Se vuoi, puoi ignorare la selezione predefinita della regione e della zona. Puoi selezionare qualsiasi regione e zona, indipendentemente dalla posizione di archiviazione dello snapshot di origine.
  6. In Tipo di origine, fai clic su Snapshot.

  7. Seleziona il nome dello snapshot da ripristinare.

  8. Seleziona le dimensioni del nuovo disco in gigabyte. Questo numero deve essere uguale o maggiore del disco di origine originale per lo snapshot.

  9. Fai clic su Crea per creare il disco.

Dopodiché puoi collegare il nuovo disco a un'istanza esistente.

  1. Vai alla pagina Istanze VM.

    Vai alla pagina Istanze VM

  2. Fai clic sul nome dell'istanza in cui vuoi ripristinare il disco non di avvio.
  3. Nella parte superiore della pagina dei dettagli dell'istanza, fai clic su Modifica.
  4. In Dischi aggiuntivi, fai clic su Collega disco esistente.
  5. Seleziona il nome del nuovo disco creato dallo snapshot.
  6. Fai clic su Fine per collegare il disco.
  7. Nella parte inferiore della pagina dei dettagli dell'istanza, fai clic su Salva per applicare le modifiche all'istanza.

gcloud

  1. Utilizza il comando gcloud compute snapshots list per trovare il nome dello snapshot che vuoi ripristinare:

    gcloud compute snapshots list
    
  2. Utilizza il comando gcloud compute snapshots describe per trovare le dimensioni dello snapshot che vuoi ripristinare:

    gcloud compute snapshots describe SNAPSHOT_NAME
    

    Sostituisci SNAPSHOT_NAME con il nome dello snapshot da recuperare.

  3. Utilizza il comando gcloud compute disks create per creare un nuovo disco regionale o a livello di zona dallo snapshot. Se hai bisogno di un disco permanente SSD per un throughput o IOPS aggiuntivi, includi il flag --type e specifica pd-ssd.

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

    Sostituisci quanto segue:

    • DISK_NAME: il nome del nuovo disco.
    • DISK_SIZE: le dimensioni del nuovo disco in gigabyte. Questo numero deve essere uguale o superiore al disco di origine originale per lo snapshot.
    • SNAPSHOT_NAME: il nome dello snapshot da ripristinare.
    • DISK_TYPE: URL completo o parziale del tipo del disco. Ad esempio: https://www.googleapis.com/compute/v1/projects/PROJECT_ID /zones/ZONE/diskTypes/pd-ssd.
  4. Collega il nuovo disco a un'istanza esistente utilizzando il comando gcloud compute instances attach-disk:

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

    Sostituisci quanto segue:

    • INSTANCE_NAME è il nome dell'istanza.
    • DISK_NAME è il nome del disco creato dallo snapshot.

API

  1. Crea una richiesta GET a snapshots.list per visualizzare l'elenco degli snapshot nel progetto.

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

    Sostituisci PROJECT_ID con l'ID progetto.

  2. Crea una richiesta POST per creare un disco zonale utilizzando il metodo disks.insert. Includi le proprietà name, sizeGb e type. Per ripristinare un disco utilizzando uno snapshot, devi includere la proprietà 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"
    }
    

    Sostituisci quanto segue:

    • PROJECT_ID: il tuo ID progetto.
    • ZONE la zona in cui si trovano l'istanza e il nuovo disco.
    • DISK_NAME: il nome del nuovo disco.
    • DISK_SIZE: le dimensioni del nuovo disco in gigabyte. Questo numero deve essere uguale o superiore al disco di origine originale per lo snapshot.
    • DISK_TYPE: URL completo o parziale del tipo del disco. Ad esempio https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ ZONE/diskTypes/pd-ssd.
    • SNAPSHOT_NAME: lo snapshot di origine del disco che stai ripristinando.
  3. Puoi quindi collegare il nuovo disco a un'istanza esistente costruendo una richiesta POST al metodo instances.attachDisk e includendo l'URL del disco zonale che hai appena creato dallo snapshot.

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

    Sostituisci quanto segue:

    • PROJECT_ID è l'ID progetto.
    • ZONE è la zona in cui si trovano l'istanza e il nuovo disco.
    • INSTANCE_NAME è il nome dell'istanza in cui aggiungi il nuovo disco.
    • DISK_NAME è il nome del nuovo disco.

Vai

Go

Prima di provare questo esempio, segui le istruzioni di configurazione Go riportate nella guida rapida all'utilizzo delle librerie client di Vertex AI. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Go di Vertex AI.

Per autenticarti a Vertex AI, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

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

Prima di provare questo esempio, segui le istruzioni di configurazione Java riportate nella guida rapida all'utilizzo delle librerie client di Vertex AI. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Java di Vertex AI.

Per autenticarti a Vertex AI, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.


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

Prima di provare questo esempio, segui le istruzioni di configurazione Node.js riportate nella guida rapida all'utilizzo delle librerie client di Vertex AI. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Node.js di Vertex AI.

Per autenticarti a Vertex AI, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

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

Per scoprire come installare o aggiornare l'SDK Vertex AI per Python, consulta Installare l'SDK Vertex AI per Python. Per saperne di più, consulta la documentazione di riferimento dell'API Python.

from __future__ import annotations

import sys
from typing import Any

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


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

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

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

    Returns:
        Whatever the operation.result() returns.

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

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

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

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

    return result


def 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)

Monta il disco

  1. Nel terminale, utilizza il comando lsblk per elencare i dischi collegati all'istanza e trovare il disco che vuoi montare.

    $ 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 questo esempio, sdb è il nome del dispositivo per il nuovo disco persistente vuoto.

  2. Utilizza lo strumento mount per montare il disco sull'istanza e attiva l'opzione discard:

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

    Sostituisci quanto segue:

    • DEVICE_NAME: il nome del dispositivo del disco da montare.
  3. Configura le autorizzazioni di lettura e scrittura sul disco. Per questo esempio, concedi l'accesso in scrittura al disco a tutti gli utenti.

    $ sudo chmod a+w /home/jupyter

Passaggi successivi