Esegui il backup dei dati utilizzando un'istantanea

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

I dati dell'istanza sono 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, quindi puoi utilizzarli per ripristinare i dati in un nuovo disco o in un'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 permanente 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 permanente collegato, in Dischi aggiuntivi, fai clic sul nome del disco permanente collegato.
  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-persistent-disk-snapshot
  7. In Tipo, l'impostazione predefinita è uno snapshot regolare, ideale per il backup e il ripristino di emergenza a lungo termine.

    Scegli Archivia istantanea per una conservazione dei dati più conveniente.

  8. Nella sezione Località, scegli la località di archiviazione degli snapshot. La posizione predefinita o personalizzata definita nelle impostazioni dello snapshot viene selezionata automaticamente. Facoltativamente, puoi eseguire l'override delle impostazioni degli snapshot e archiviare gli snapshot in una posizione di archiviazione personalizzata seguendo questi passaggi:

    1. Scegli il tipo di posizione di archiviazione per lo snapshot.

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

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

gcloud

  1. Nella console Google Cloud, attiva Cloud Shell.

    Attiva Cloud Shell

    Nella parte inferiore della console Google Cloud viene avviata una sessione di Cloud Shell che mostra un prompt della riga di comando. Cloud Shell è un ambiente shell con Google Cloud CLI già installato e con valori già impostati per il progetto attuale. L'inizializzazione della sessione può richiedere alcuni secondi.

  2. Crea lo snapshot utilizzando il criterio per la posizione di archiviazione definito dalle impostazioni dello 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 alla normativa RFC 1035.

    • Per creare uno snapshot di un volume di Persistent Disk nel percorso predefinito o personalizzato configurato nelle impostazioni dello 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 eseguire l'override delle impostazioni dello 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: il nome dello snapshot.
      • SOURCE_DISK: il nome del volume di Persistent Disk a livello di zona da cui vuoi creare uno snapshot.
      • SNAPSHOT_TYPE: il tipo di snapshot, STANDARD o ARCHIVIO. Se non viene specificato alcun tipo di snapshot, viene creato uno snapshot STANDARD. Scegli Archivia per una conservazione dei dati più conveniente.
      • SOURCE_DISK_ZONE: la zona del volume Persistent Disk a livello di zona da cui vuoi creare uno snapshot.

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

    Gcloud CLI attende fino a quando l'operazione restituisce uno stato READY o FAILED oppure non raggiunge 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 per la posizione di archiviazione definito dalle impostazioni dello 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 nel percorso predefinito o personalizzato configurato nelle impostazioni dello snapshot, effettua 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: il nome dello 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 ARCHIVIO. Se non viene specificato un tipo di snapshot, viene creato uno snapshot STANDARD.
  • In alternativa, per eseguire l'override delle impostazioni dello snapshot e creare uno snapshot in una posizione di archiviazione personalizzata, effettua 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: il nome dello 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 ARCHIVIO. Se non viene specificato un tipo di snapshot, viene creato uno snapshot STANDARD.
    • STORAGE_LOCATION: la località multiregionale di Cloud Storage o la regione di Cloud Storage in cui vuoi archiviare lo snapshot. Puoi specificare una sola località di archiviazione.

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

Go

Go

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

Per eseguire l'autenticazione in Compute Engine, configura Credenziali predefinite dell'applicazione. Per saperne di più, 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 nella guida rapida di Compute Engine sull'utilizzo delle librerie client.

Per eseguire l'autenticazione in Compute Engine, configura Credenziali predefinite dell'applicazione. Per saperne di più, 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 nella guida rapida di Compute Engine sull'utilizzo delle librerie client.

Per eseguire l'autenticazione in Compute Engine, configura Credenziali predefinite dell'applicazione. Per saperne di più, 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 nella guida rapida di Compute Engine sull'utilizzo delle librerie client.

Per eseguire l'autenticazione in Compute Engine, configura Credenziali predefinite dell'applicazione. Per saperne di più, 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 di 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 di snapshot include le seguenti proprietà:

  • Nome pianificazione
  • Descrizione pianificazione
  • Frequenza di snapshot (orari, giornalieri, settimanali)
  • Ora di inizio snapshot
  • Regione in cui è disponibile la pianificazione di snapshot
  • Criterio di eliminazione del disco di origine per la gestione degli snapshot generati 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

  • Un disco permanente può avere al massimo 10 pianificazioni di snapshot collegate alla volta.
  • Non puoi creare snapshot archivio utilizzando una pianificazione di snapshot.
  • Puoi creare un massimo di 1000 pianificazioni di snapshot in uso per regione.
  • Le pianificazioni di snapshot si applicano solo al progetto in cui sono state create. Le pianificazioni di snapshot non possono essere utilizzate in altri progetti o organizzazioni.
  • Potresti dover richiedere un aumento della quota delle risorse tramite la console se hai bisogno di risorse aggiuntive nella tua regione.
  • Non puoi eliminare una pianificazione di snapshot se è collegata a un disco. Devi scollegare la pianificazione da tutti i dischi, quindi eliminarla.
  • Puoi aggiornare una pianificazione di snapshot esistente per cambiare 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 è possibile 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 automaticamente criptati con la stessa chiave.

Crea una pianificazione

Crea una pianificazione di snapshot per i dischi permanenti utilizzando la console Google Cloud, Google Cloud CLI o l'API Compute Engine. Devi creare la pianificazione degli snapshot nella stessa regione in cui si trova il disco permanente. Ad esempio, se il disco permanente si trova nella zona us-west1-a, la pianificazione di snapshot deve trovarsi nella regione us-west1. Per maggiori 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 posizione predefinita o personalizzata definita nelle impostazioni dello snapshot viene selezionata automaticamente. Facoltativamente, puoi eseguire l'override delle impostazioni degli snapshot e archiviare gli snapshot in una posizione di archiviazione personalizzata seguendo questi passaggi:

    1. Scegli il tipo di posizione di archiviazione per lo snapshot.

      • Scegli Più regioni per una disponibilità maggiore a un costo superiore.
      • Scegli gli snapshot regionali per un maggiore controllo sulla posizione fisica dei dati a un costo inferiore.
    2. Nel campo Seleziona località, seleziona una o più regioni specifiche che vuoi utilizzare. Per utilizzare una o più regioni più vicine al 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 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 di snapshot.
  • "[SCHEDULE_DESCRIPTION]" è una descrizione della pianificazione di snapshot. Racchiudi la descrizione tra virgolette.
  • [MAX_RETENTION_DAYS] è il numero di giorni per cui conservare l'istantanea. Ad esempio, l'impostazione 3 comporta che gli snapshot vengano 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 deve iniziare all'ora. Ad esempio:
    • 14:00 PST è 22:00.
    • Se imposti come ora di inizio 22:13, riceverai un errore.
  • [SNAPSHOT_INTERVAL] definisce l'intervallo con cui vuoi che si verifichi lo snapshot. Imposta la pianificazione oraria utilizzando un numero intero compreso tra 1 e 23. Scegli un numero orario diviso uniformemente in 24. Ad esempio, se il valore --hourly-schedule viene impostato su 12, lo snapshot viene generato ogni 12 ore. Per una pianificazione settimanale, definisci i giorni in cui vuoi che venga eseguita la creazione dello snapshot. È necessario specificare i giorni della settimana, 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 settimanali, se scegli di fornire la pianificazione in questo formato. Tieni presente che puoi specificare le pianificazioni settimanali in giorni diversi della settimana e in orari diversi utilizzando un file (ma non puoi specificare più pianificazioni settimanali direttamente dalla riga di comando). Ad esempio, il file potrebbe specificare una pianificazione di snapshot per lunedì e mercoledì: [{"day": "MONDAY", "startTime": "04:00"}, {"day": "WEDNESDAY", "startTime": "02:00"}] Se includi un'ora di inizio nel file, non è necessario impostare il flag --start-time. La pianificazione utilizza il fuso 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 di snapshot. In tutti i seguenti esempi:

  • È inclusa la regola di eliminazione dei dischi. Il flag --on-source-disk-delete è impostato sul valore predefinito keep-auto-snapshots per conservare definitivamente tutti gli snapshot generati automaticamente. L'alternativa è impostare questo flag su apply-retention-policy per utilizzare il criterio di conservazione degli snapshot.
  • La località di archiviazione è impostata su US, in modo che tutti gli snapshot generati vengano archiviati in più regioni degli Stati Uniti.
  • Le etichette env=dev e media=images vengono applicate a tutti gli snapshot generati.
  • Il criterio di conservazione è impostato su 10 giorni.

Pianificazione oraria: in questo esempio, la pianificazione di snapshot inizia alle 22:00 UTC e si verifica 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 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 nulla.

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 si verifica 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 degli snapshot, la località della regione 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 per un periodo indeterminato. In alternativa, puoi impostare il flag su applyRetentionPolicy per applicare il criterio di conservazione.

L'esempio seguente imposta una pianificazione di snapshot giornaliera a partire dalle ore 12: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.

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

Analogamente, puoi creare una programmazione 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 02:00.

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

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

Collega 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 collegare una pianificazione di snapshot. Viene visualizzata la pagina Gestisci disco.
  3. Nella pagina Gestisci disco, passa il mouse sopra il menu e fai clic sul menu Altre azioni e seleziona Modifica.
  4. Utilizza il menu a discesa Pianificazione snapshot per aggiungere la pianificazione al disco. Oppure crea una nuova programmazione.
  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, 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 di snapshot.
  • [ZONE] è la posizione del tuo 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 di snapshot.
  • [DISK_NAME] è il nome del disco.
  • [SCHEDULE_NAME] è il nome della pianificazione di snapshot nella regione che stai applicando a questo disco.

Ripristina 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 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 di dimensioni superiori rispetto al 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, potrebbe essere necessario utilizzare uno strumento di ridimensionamento diverso. Per ulteriori informazioni, consulta la documentazione del tuo 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 Istantanee

  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.
    • Facoltativamente, puoi ignorare la selezione predefinita della regione e della zona. Puoi selezionare qualsiasi regione e zona, indipendentemente dalla località di archiviazione dello snapshot di origine.
  6. In Tipo di origine, fai clic su Istantanea.

  7. Seleziona il nome dello snapshot da ripristinare.

  8. Seleziona le dimensioni del nuovo disco in gigabyte. Questo numero deve essere uguale o superiore al disco di origine originale per lo 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 a partire 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 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 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 velocità effettiva o IOPS aggiuntive, 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 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 a partire dallo snapshot.

API

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

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

    Sostituisci PROJECT_ID con l'ID progetto.

  2. Costruisci 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 superiore al 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 al 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 in cui stai aggiungendo il nuovo disco.
    • DISK_NAME è il nome del nuovo disco.

Go

Go

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

Per eseguire l'autenticazione in Vertex AI, 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"
)

// 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 riportate nella guida rapida di Vertex AI sull'utilizzo delle librerie client. Per maggiori informazioni, consulta la documentazione di riferimento dell'API Java Vertex AI.

Per eseguire l'autenticazione in Vertex AI, 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.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 riportate nella guida rapida di Vertex AI sull'utilizzo delle librerie client. Per maggiori informazioni, consulta la documentazione di riferimento dell'API Node.js Vertex AI.

Per eseguire l'autenticazione in Vertex AI, 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 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 individua quello da 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 abilita l'opzione discard:

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

    Sostituisci quanto segue:

    • DEVICE_NAME: il nome dispositivo del disco da montare.
  3. Configurare 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