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 sono archiviati su un disco permanente zonale. 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 mentre sono collegati a istanze in esecuzione. Gli snapshot sono risorse globali, quindi puoi utilizzarli per ripristinare i dati in un nuovo disco o una nuova istanza all'interno dello stesso progetto. Puoi anche condividere snapshot tra 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 è uno snapshot standard. Gli snapshot standard sono ideali per il backup a lungo termine e il disaster recovery.

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

    Per saperne di più, consulta Confronto tra i tipi di snapshot.

  8. Nella sezione Località, scegli la località di archiviazione degli snapshot. La località predefinita o personalizzata indicata nelle impostazioni degli snapshot viene selezionata automaticamente. Se vuoi, puoi ignorare le impostazioni 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à nella sezione Basata sulla 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 la policy di posizione di archiviazione definita dalle impostazioni degli snapshot o utilizzando una posizione di archiviazione alternativa a tua scelta. Per saperne di più, consulta la sezione sulla scelta della località di archiviazione degli snapshot. Devi specificare un nome per lo snapshot. Il nome deve avere una lunghezza compresa tra 1 e 63 caratteri e rispettare la RFC 1035.

    • Per creare uno snapshot di un volume del Persistent Disk nella posizione predefinita personalizzata o predefinita indicata 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 creare uno snapshot in una posizione di archiviazione personalizzata, includi il flag --storage-location per indicare dove archiviare lo snapshot:

      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 di Persistent Disk di zona da cui vuoi creare uno snapshot.
      • SNAPSHOT_TYPE: il tipo di snapshot, STANDARD o ARCHIVE. Se non viene specificato un tipo di snapshot, viene creato uno snapshot STANDARD. Scegli Archivia per una conservazione dei dati più conveniente.
      • SOURCE_DISK_ZONE: la zona del volume di Persistent Disk di zona 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 indicata nelle impostazioni degli snapshot.

    gcloud CLI attende che l'operazione restituisca lo stato READY o FAILED oppure raggiunga il timeout massimo e restituisce gli ultimi dettagli noti dello snapshot.

Terraform

Per creare uno snapshot del disco permanente 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 nella policy di posizione di archiviazione definita dalle impostazioni degli snapshot o utilizzando una posizione di archiviazione alternativa a tua scelta. Per saperne di più, consulta la sezione sulla scelta della località di archiviazione degli snapshot.

  • Per creare lo snapshot nella posizione predefinita personalizzata o predefinita indicata 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 snapshot, 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 località 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 snapshot, STANDARD o ARCHIVE. Se non viene specificato un tipo di snapshot, viene creato uno snapshot STANDARD.
    • STORAGE_LOCATION: la multi-regione Cloud Storage o la regione Cloud Storage in cui vuoi archiviare lo snapshot. Puoi specificare una sola località di archiviazione.

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

Vai

Go

Prima di provare questo esempio, segui le istruzioni di configurazione nella guida rapida di Compute Engine per l'utilizzo delle librerie client.

Per effettuare l'autenticazione in Compute Engine, configura le Credenziali predefinite dell'applicazione. Per maggiori informazioni, vedi 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 nella guida rapida di Compute Engine per l'utilizzo delle librerie client.

Per effettuare l'autenticazione in Compute Engine, configura le Credenziali predefinite dell'applicazione. Per maggiori informazioni, vedi 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 nella guida rapida di Compute Engine per l'utilizzo delle librerie client.

Per effettuare l'autenticazione in Compute Engine, configura le Credenziali predefinite dell'applicazione. Per maggiori informazioni, vedi 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 nella guida rapida di Compute Engine per l'utilizzo delle librerie client.

Per effettuare l'autenticazione in Compute Engine, configura le Credenziali predefinite dell'applicazione. Per maggiori informazioni, vedi 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 di snapshot, crei una policy risorse che puoi applicare a uno o più dischi permanenti. Puoi creare pianificazioni di snapshot nei modi seguenti:

Una pianificazione snapshot include le seguenti proprietà:

  • Nome pianificazione
  • Descrizione della programmazione
  • Frequenza degli snapshot (oraria, giornaliera, settimanale)
  • Ora di inizio snapshot
  • Regione in cui è disponibile la pianificazione snapshot
  • Criterio di eliminazione del disco di origine per la gestione degli snapshot generati automaticamente se il disco di origine viene eliminato
  • Policy di conservazione per definire per quanto tempo conservare gli snapshot generati dalla pianificazione degli snapshot

Limitazioni

  • Un disco permanente può avere al massimo 10 pianificazioni di snapshot collegate contemporaneamente.
  • Non puoi creare snapshot archivio utilizzando una pianificazione snapshot.
  • Puoi creare un massimo di 1000 pianificazioni di snapshot in uso per regione.
  • Le pianificazioni snapshot vengono applicate solo nel progetto in cui sono state create. Le pianificazioni degli snapshot 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 scollegare la pianificazione da tutti i dischi, quindi eliminarla.
  • Puoi aggiornare una pianificazione degli snapshot esistente per modificare la descrizione, la pianificazione e le etichette. Per aggiornare altri valori per una pianificazione di snapshot, devi eliminare la pianificazione di snapshot e crearne una nuova.
  • Per i dischi permanenti che utilizzano una chiave di crittografia fornita dal cliente (CSEK), non puoi creare pianificazioni di snapshot.
  • Per i dischi permanenti che utilizzano una chiave di crittografia gestita dal cliente (CMEK), tutti gli snapshot creati con una pianificazione di snapshot vengono criptati automaticamente con la stessa chiave.

Crea una pianificazione

Crea una pianificazione di snapshot per i tuoi dischi permanenti utilizzando la console Google Cloud , Google Cloud CLI o l'API Compute Engine. Devi creare la pianificazione di snapshot 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 snapshot deve trovarsi nella regione us-west1. Per saperne di più, vedi 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 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 o personalizzata indicata nelle impostazioni degli snapshot viene selezionata automaticamente. Se vuoi, puoi ignorare le impostazioni 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 In base alla località 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 di snapshot per i dischi permanenti, utilizza il comando compute resource-policies create snapshot-schedule gcloud. Imposta la frequenza di pianificazione 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 di snapshot.
  • "[SCHEDULE_DESCRIPTION]" è una descrizione della pianificazione di snapshot. Racchiudi la descrizione tra virgolette.
  • [MAX_RETENTION_DAYS] è il numero di giorni per conservare lo snapshot. Ad esempio, l'impostazione 3 indica che gli snapshot vengono conservati per 3 giorni prima di essere eliminati. Devi impostare una norma di conservazione di almeno 1 giorno.
  • [START_TIME] è l'ora di inizio in formato UTC. L'ora di inizio deve essere un'ora piena. Ad esempio:
    • Le 14:00 PST sono le 22:00.
    • Se imposti un'ora di inizio pari a 22:13, riceverai un errore.
  • [SNAPSHOT_INTERVAL] definisce l'intervallo in cui vuoi che venga eseguita la creazione di snapshot. Imposta la pianificazione oraria utilizzando un numero intero compreso tra 1 e 23. Scegli un numero di ore che sia divisibile 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 per esteso i giorni della settimana, che non sono sensibili alle maiuscole. I flag di frequenza degli snapshot hourly-schedule, daily-schedule e weekly-schedule si escludono a vicenda. Devi sceglierne uno per la pianificazione di snapshot.

  • [FILE_NAME] è il nome del file che contiene la pianificazione di snapshot settimanale, 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 snapshot il lunedì e il mercoledì: [{"day": "MONDAY", "startTime": "04:00"}, {"day": "WEDNESDAY", "startTime": "02:00"}] Se includi un'ora di inizio nel file, non devi impostare il flag --start-time. La pianificazione utilizza lo standard orario UTC.

  • [DELETION_OPTION] determina cosa succede ai tuoi snapshot se il disco di origine viene eliminato. Scegli il valore predefinito keep-auto-snapshots omettendolo o utilizza apply-retention-policy per applicare una policy di conservazione.

Questi sono altri esempi per la configurazione di una pianificazione di 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 in modo permanente tutti gli snapshot generati automaticamente. In alternativa, imposta questo flag su apply-retention-policy per utilizzare la policy di conservazione degli snapshot.
  • La località di archiviazione è impostata su US, pertanto tutti gli snapshot generati vengono archiviati nella multi-regione degli Stati Uniti.
  • Le etichette env=dev e media=images vengono applicate a tutti gli screenshot generati.
  • La policy di conservazione è impostata su 10 giorni.

Pianificazione oraria: in questo esempio, la pianificazione di 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 di snapshot 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 di snapshot 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. Come minimo, devi includere il nome della pianificazione di snapshot, la posizione regionale 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 la policy di conservazione.

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

Puoi anche includere opzioni di località degli snapshot ed etichette degli snapshot nella richiesta 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 risorse della pianificazione degli snapshot.
  • [SCHEDULE_DESCRIPTION] è la descrizione della pianificazione di snapshot.
  • [SCHEDULE_NAME] è il nome della pianificazione di snapshot.

Analogamente, puoi creare una pianificazione settimanale o mensile. Consulta il riferimento API per dettagli specifici sull'impostazione di una pianificazione settimanale o mensile.

Ad esempio, la seguente richiesta crea una pianificazione settimanale che viene eseguita il martedì e il 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"]
  }
 }
}

Collega una pianificazione 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 collegare una pianificazione di snapshot. Si aprirà la pagina Gestisci disco.
  3. Nella pagina Gestisci disco, passa il mouse sopra e fai clic sul menu Altre azioni e seleziona Modifica.
  4. Utilizza il menu a discesa Pianificazione snapshot 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 di snapshot a un disco, usa 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 di snapshot.
  • [ZONE] è la posizione del disco.

API

Nell'API, crea una richiesta POST di 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 snapshot.
  • [DISK_NAME] è il nome del disco.
  • [SCHEDULE_NAME] è il nome della pianificazione di 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 non di avvio con uno snapshot, puoi creare un nuovo disco basato sullo 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.

Crea un disco da uno snapshot e collegalo a una VM

Console

  1. Nella console Google Cloud vai alla pagina Snapshot.

    Vai a Snapshot

  2. Trova il nome dello snapshot da 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 di regione e 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 dello snapshot.

  9. Fai clic su Crea per creare il disco.

Puoi quindi 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 da ripristinare:

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

    gcloud compute snapshots describe SNAPSHOT_NAME
    

    Sostituisci SNAPSHOT_NAME con il nome dello snapshot da ripristinare.

  3. Utilizza il comando gcloud compute disks create per creare un nuovo disco regionale o zonale dallo snapshot. Se hai bisogno di un disco permanente SSD per una velocità effettiva o IOPS aggiuntiva, 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 maggiore del disco di origine originale per lo snapshot.
    • SNAPSHOT_NAME: il nome dello snapshot da ripristinare.
    • DISK_TYPE: URL completo o parziale per il tipo di 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 di snapshots.list per visualizzare l'elenco degli snapshot nel tuo 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 di zona 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 maggiore del disco di origine originale per lo snapshot.
    • DISK_TYPE: URL completo o parziale per il tipo di 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 creando una richiesta POST al metodo instances.attachDisk e includendo l'URL del disco di zona 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 a cui stai aggiungendo il nuovo disco.
    • DISK_NAME è il nome del nuovo disco.

Vai

Go

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

Per autenticarti in Vertex AI, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Configura 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 di Java nella guida rapida di Vertex AI per l'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Vertex AI Java.

Per autenticarti in Vertex AI, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Configura 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 di Node.js nella guida rapida di Vertex AI per l'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Vertex AI Node.js.

Per autenticarti in Vertex AI, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Configura 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 Python, consulta Installare l'SDK Vertex AI 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 permanente vuoto.

  2. Utilizza lo strumento di montaggio 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 per tutti gli utenti.

    $ sudo chmod a+w /home/jupyter

Passaggi successivi