Gestire gli snapshot dei dischi


Gli snapshot dei dischi standard ti consentono di eseguire periodicamente il backup dei dati dai Persistent Disk e da Google Cloud Hyperdisk.

Puoi visualizzare, elencare ed eliminare gli snapshot dei dischi. Puoi anche condividere gli snapshot tra i progetti.

Prima di iniziare

  • Se non l'hai ancora fatto, configura l'autenticazione. L'autenticazione è la procedura mediante la quale la tua identità viene verificata per l'accesso alle API e ai servizi Google Cloud. Per eseguire codice o esempi da un ambiente di sviluppo locale, puoi autenticarti su Compute Engine selezionando una delle seguenti opzioni:

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.
    3. REST

      Per utilizzare gli esempi dell'API REST in questa pagina in un ambiente di sviluppo locale, utilizza le credenziali fornite a gcloud CLI.

        Install the Google Cloud CLI, then initialize it by running the following command:

        gcloud init

      Per ulteriori informazioni, consulta Eseguire l'autenticazione per l'utilizzo di REST nella documentazione sull'autenticazione di Google Cloud.

Ruoli e autorizzazioni richiesti

Per ottenere le autorizzazioni necessarie per gestire gli snapshot standard, chiedi all'amministratore di concederti i seguenti ruoli IAM nel progetto:

Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso a progetti, cartelle e organizzazioni.

Questi ruoli predefiniti contengono le autorizzazioni necessarie per gestire gli snapshot standard. Per visualizzare le autorizzazioni esatte richieste, espandi la sezione Autorizzazioni richieste:

Autorizzazioni obbligatorie

Per gestire gli snapshot standard sono necessarie le seguenti autorizzazioni:

  • Per elencare gli snapshot: compute.snapshots.list nel progetto
  • Per visualizzare le informazioni su uno snapshot: compute.snapshots.get sullo snapshot
  • Per eliminare uno snapshot: compute.snapshots.delete sullo snapshot
  • Per eliminare gli snapshot in base a un filtro:
    • compute.snapshots.delete nello snapshot
    • compute.snapshots.list sul progetto
  • Per condividere i dati degli snapshot tra progetti:
    • compute.storageAdmin nel progetto (per accedere a tutti gli snapshot standard)
    • compute.disks.create sul progetto da condividere
    • compute.snapshots.create nel progetto di origine
    • compute.disks.createSnapshot sul disco di origine

Potresti anche ottenere queste autorizzazioni con ruoli personalizzati o altri ruoli predefiniti.

Visualizzare gli snapshot standard in un progetto o in una località

Puoi visualizzare o elencare gli snapshot standard in un progetto o in una località utilizzando la gcloud CLI, la console Google Cloud o la API REST.

Console

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

    Vai alla pagina Snapshot

  2. Nella scheda Snapshot puoi vedere gli snapshot standard per il progetto corrente.

  3. Facoltativo. Restringi i risultati con il campo filter_list Filtro. Inserisci il nome o il valore di una proprietà nel campo Filtro oppure scegli una delle proprietà disponibili.

gcloud

Per visualizzare un elenco degli snapshot a tua disposizione in un determinato progetto, utilizza il comando gcloud compute snapshots list.

gcloud compute snapshots list --project=PROJECT_ID

Facoltativo. Sostituisci PROJECT_ID con l'ID progetto. Se ometti questo flag, viene utilizzato il progetto corrente. Puoi impostare il progetto predefinito per la sessione utilizzando il comando gcloud CLIgcloud config set project PROJECT_ID.

REST

Per visualizzare un elenco di snapshot a tua disposizione in un determinato progetto, effettua una richiesta GET al metodo snapshots.list.

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

Sostituisci PROJECT_ID con l'ID progetto.

Visualizzare gli snapshot standard di un disco

Puoi visualizzare l'elenco degli snapshot standard di un disco utilizzando la console Google Cloud, gcloud CLI o REST.

Console

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

    Vai alla pagina Snapshot

  2. Nella scheda Snapshot viene visualizzato un elenco di tutti gli snapshot standard del progetto.

  3. Restringi i risultati in base al disco di origine:

    1. Inserisci Source disk: nel filter_list Filtro, oppure fai clic sul campo Filtro e poi scegli il valore Source disk dall'elenco Proprietà.

    2. Seleziona il nome del disco dall'elenco Valori visualizzato accanto a Source disk: nel campo Filtro.

      Gli snapshot visualizzati nella console ora mostrano tutti gli snapshot standard per il disco specificato.

      Se non vedi il nome di un disco nell'elenco Valori, digita le prime lettere del nome del disco di origine nel campo Filtra accanto a Source disk: per modificare l'elenco dei valori visualizzati.

gcloud

Elenca gli snapshot standard di un disco con il comando gcloud compute snapshots list e l'argomento --filter.

  • Elenca gli snapshot standard per un disco zonale:

    gcloud compute snapshots list --filter="sourceDisk:projects/PROJECT_ID/zones/SOURCE_ZONE/disks/DISK_NAME
    
  • Elenca gli snapshot standard per un disco regionale:

    gcloud compute snapshots list --filter=sourceDisk:projects/PROJECT_ID/regions/SOURCE_REGION/disks/DISK_NAME
    

Sostituisci quanto segue:

  • PROJECT_ID: l'ID del progetto.
  • SOURCE_ZONE: (solo dischi zonali) il nome della zona per il disco, ad esempio us-west1-a.
  • SOURCE_REGION: (solo dischi a livello di regione) il nome della regione del disco, ad esempio us-west1.
  • DISK_NAME: il nome del disco, ad esempio disk-1.

REST

Elenca gli snapshot standard per un disco zonale o regionale con una richiesta GET al metodo snapshots.list.

Utilizza il parametro di query filter=sourceDisk per specificare il nome del disco.

  • Elenca gli snapshot standard per un disco zonale:

    GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/snapshots?filter=sourceDisk:'https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/SOURCE_ZONE/disks/DISK_NAME'
    
  • Elenca gli snapshot standard per un disco regionale:

    GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/snapshots?filter=sourceDisk:'https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/SOURCE_REGION/disks/DISK_NAME'
    

Sostituisci quanto segue:

  • PROJECT_ID: l'ID del progetto.
  • SOURCE_ZONE: (solo dischi zonali) il nome della zona per il disco, ad esempio us-west1-a.
  • SOURCE_REGION: (solo dischi a livello di regione) il nome della regione del disco, ad esempio us-west1.
  • DISK_NAME: il nome del disco di origine, ad esempio disk-1.

Visualizzare le informazioni su uno snapshot standard

Recupera informazioni dettagliate su uno snapshot standard, ad esempio la data di creazione, il disco di origine e le dimensioni, utilizzando la console Google Cloud, Google Cloud CLI o REST.

Console

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

    Vai alla pagina Snapshot

  2. Nella scheda Snapshot, visualizza l'elenco degli snapshot nel progetto.

  3. Nella colonna Nome, fai clic sul nome dello snapshot standard. Viene visualizzata la pagina Dettagli snapshot relativa allo snapshot selezionato, che mostra le relative proprietà.

gcloud

Per visualizzare le informazioni su uno snapshot standard, utilizza il comando gcloud compute snapshots describe.

gcloud compute snapshots describe SNAPSHOT_NAME

Sostituisci SNAPSHOT_NAME con il nome dello snapshot standard.

REST

Invia una richiesta GET al metodo snapshots.get.

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

Sostituisci quanto segue:

  • PROJECT_ID: il nome del progetto contenente lo snapshot standard.
  • SNAPSHOT_NAME: il nome dello snapshot standard.

Elimina uno snapshot

Compute Engine utilizza gli snapshot differenziali in modo che ogni snapshot contenga solo i dati che sono cambiati rispetto allo snapshot precedente. Poiché gli snapshot successivi potrebbero richiedere informazioni memorizzate in uno snapshot precedente, tieni presente che l'eliminazione di uno snapshot non comporta necessariamente l'eliminazione di tutti i dati dello snapshot.

Per scoprire di più sull'eliminazione degli snapshot, consulta Eliminazione degli snapshot.

Console

  1. Vai alla pagina Snapshot nella console Google Cloud.

    Vai alla pagina Snapshot

  2. Seleziona uno o più snapshot da eliminare.

  3. Nella parte superiore della pagina Istantanee, fai clic su Elimina.

gcloud

Per eliminare uno snapshot, utilizza il comando gcloud compute snapshots delete.

gcloud compute snapshots delete SNAPSHOT_NAME

Sostituisci SNAPSHOT_NAME con il nome dello snapshot che vuoi eliminare.

Vai

import (
	"context"
	"fmt"
	"io"

	compute "cloud.google.com/go/compute/apiv1"
	computepb "cloud.google.com/go/compute/apiv1/computepb"
)

// deleteSnapshot deletes a snapshot of a disk.
func deleteSnapshot(w io.Writer, projectID, snapshotName string) error {
	// projectID := "your_project_id"
	// snapshotName := "your_snapshot_name"

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

	req := &computepb.DeleteSnapshotRequest{
		Project:  projectID,
		Snapshot: snapshotName,
	}

	op, err := snapshotsClient.Delete(ctx, req)
	if err != nil {
		return fmt.Errorf("unable to delete 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 deleted\n")

	return nil
}

Java


import com.google.cloud.compute.v1.Operation;
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 DeleteSnapshot {

  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 snapshot to be deleted.
    String snapshotName = "YOUR_SNAPSHOT_NAME";

    deleteSnapshot(projectId, snapshotName);
  }

  // Delete a snapshot of a disk.
  public static void deleteSnapshot(String projectId, String snapshotName)
      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()) {

      Operation operation = snapshotsClient.deleteAsync(projectId, snapshotName)
          .get(3, TimeUnit.MINUTES);

      if (operation.hasError()) {
        System.out.println("Snapshot deletion failed!" + operation);
        return;
      }

      System.out.println("Snapshot deleted!");
    }
  }
}

Node.js

/**
 * TODO(developer): Uncomment and replace these variables before running the sample.
 */
// const projectId = 'YOUR_PROJECT_ID';
// const snapshotName = 'YOUR_SNAPSHOT_NAME';

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

async function deleteSnapshot() {
  const snapshotsClient = new compute.SnapshotsClient();

  const [response] = await snapshotsClient.delete({
    project: projectId,
    snapshot: snapshotName,
  });
  let operation = response.latestResponse;
  const operationsClient = new compute.GlobalOperationsClient();

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

  console.log('Snapshot deleted.');
}

deleteSnapshot();

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 delete_snapshot(project_id: str, snapshot_name: str) -> None:
    """
    Delete a snapshot of a disk.

    Args:
        project_id: project ID or project number of the Cloud project you want to use.
        snapshot_name: name of the snapshot to delete.
    """

    snapshot_client = compute_v1.SnapshotsClient()
    operation = snapshot_client.delete(project=project_id, snapshot=snapshot_name)

    wait_for_extended_operation(operation, "snapshot deletion")

REST

Invia una richiesta DELETE al metodo snapshots.delete per eliminare le istantanee.

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

Sostituisci quanto segue:

  • PROJECT_ID: il nome del progetto
  • SNAPSHOT_NAME: il nome dello snapshot da eliminare.

Eliminare più snapshot in base a un filtro

Compute Engine utilizza gli snapshot differenziali in modo che ogni snapshot contenga solo i dati che sono cambiati rispetto allo snapshot precedente. Poiché gli snapshot successivi potrebbero richiedere informazioni archiviate in uno snapshot precedente, l'eliminazione di uno snapshot non comporta necessariamente l'eliminazione di tutti i dati nello snapshot.

Per scoprire di più sull'eliminazione degli snapshot, consulta Eliminazione degli snapshot.

Puoi eliminare un numero di istantanee in base a un determinato filtro. Per ulteriori informazioni su come utilizzare i filtri con gcloud CLI, consulta Filtri degli argomenti dell'interfaccia a riga di comando gcloud.

Per eliminare gli snapshot, utilizza una combinazione del comando gcloud compute snapshots list con un determinato filtro e il comando gcloud compute snapshots delete con xargs.

  gcloud compute snapshots list --filter="EXPRESSION" --uri |
  xargs gcloud compute snapshots delete
  

Sostituisci EXPRESSION con un filtro per argomenti gcloud CLI.

Ad esempio, --filter="creationTimestamp<'2023-12-31'" elimina tutti gli snapshot creati prima del 31 dicembre 2023.

Condividere i dati degli snapshot tra i progetti della stessa organizzazione

Puoi utilizzare questa procedura per spostare i dati da un disco di un progetto a un disco di un altro progetto all'interno della stessa organizzazione.

gcloud

  1. Crea uno snapshot standard nel progetto di destinazione utilizzando il comando gcloud compute snapshots create. Ad esempio, per creare uno snapshot di un Persistent Disk o Hyperdisk a livello di zona, utilizza il seguente comando:

    gcloud compute snapshots create SNAPSHOT_NAME \
     --source-disk https://www.googleapis.com/compute/v1/projects/SOURCE_PROJECT_ID/zones/ZONE/disks/SOURCE_DISK_NAME \
     --project DESTINATION_PROJECT_ID
    

    Sostituisci quanto segue:

    • SNAPSHOT_NAME: un nome per il nuovo snapshot.
    • SOURCE_PROJECT_ID: l'ID del progetto per il disco di origine.
    • ZONE: la zona del disco di origine.
    • SOURCE_DISK_NAME: il nome del disco di origine.
    • DESTINATION_PROJECT_ID: l'ID del progetto di destinazione per il nuovo snapshot.
  2. Nel progetto di destinazione, crea un disco zonale o regionale basato sullo snapshot utilizzando il comando gcloud compute disks create:

    gcloud compute disks create DISK_NAME \
     --source-snapshot SNAPSHOT_NAME \
     --project DESTINATION_PROJECT_ID
    

    Sostituisci quanto segue:

    • DISK_NAME: un nome per il nuovo disco.
    • SNAPSHOT_NAME: il nome dello snapshot.
    • DESTINATION_PROJECT_ID: l'ID del progetto di destinazione per il nuovo disco.

REST

  1. Crea uno snapshot standard nel progetto di destinazione chiamando il metodo snapshots.insert. Ad esempio, per acquisire uno snapshot di un Persistent Disk o Hyperdisk a livello di zona, effettua la seguente 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
    }
    

    Sostituisci quanto segue:

    • DESTINATION_PROJECT_ID: l'ID del progetto di destinazione per il nuovo 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 di origine.
  2. Nel progetto di destinazione, crea un disco a livello di zona o di regione basato sullo snapshot utilizzando il metodo disks.insert a livello di zona o il metodo regionDisks.insert a livello di regione.

    Ad esempio, per creare un disco zonale, effettua la seguente richiesta:

    POST https://compute.googleapis.com/compute/v1/projects/DESTINATION_PROJECT_ID/zones/DESTINATION_ZONE/disks
    {
     "name": DISK_NAME
     "sourceSnapshot": SNAPSHOT_NAME
    }
    

    Sostituisci quanto segue:

    • DESTINATION_PROJECT_ID: l'ID del progetto di destinazione per il nuovo disco.
    • DESTINATION_ZONE: la zona nel progetto di destinazione per il nuovo disco.
    • DISK_NAME: un nome per il nuovo disco.
    • SNAPSHOT_NAME: il nome dello snapshot.

Per ottenere un elenco degli snapshot a tua disposizione, consulta Visualizzare gli snapshot standard in un progetto o in una località.

Condividere uno snapshot tra progetti in organizzazioni diverse

Puoi utilizzare questa procedura per condividere uno snapshot standard in un progetto di un'organizzazione con un altro progetto di un'altra organizzazione.

gcloud

  1. Nel progetto di origine, crea un disco basato sullo snapshot utilizzando il comando gcloud compute disks create.

    gcloud compute disks create DISK_NAME \
     --source-snapshot SNAPSHOT_NAME \
     --project SOURCE_PROJECT_ID \
     --zone ZONE
    

    Sostituisci quanto segue:

    • DISK_NAME: un nome per il nuovo disco.
    • SNAPSHOT_NAME: il nome dello snapshot.
    • SOURCE_PROJECT_ID: l'ID del progetto di origine.
    • ZONE: la zona in cui creare il nuovo disco.

    Si tratta di un disco temporaneo creato solo per copiare lo snapshot tra le organizzazioni.

  2. Nel progetto di destinazione, crea uno snapshot utilizzando il comando gcloud compute snapshots create.

    Ad esempio, per creare uno snapshot utilizzando il disco zonale creato nel primo passaggio, utilizza il seguente comando:

    gcloud compute snapshots create SNAPSHOT_NAME \
     --source-disk https://www.googleapis.com/compute/v1/projects/SOURCE_PROJECT_ID/zones/ZONE/disks/DISK_NAME \
     --project DESTINATION_PROJECT_ID
    

    Sostituisci quanto segue:

    • SNAPSHOT_NAME: un nome per lo snapshot.
    • SOURCE_PROJECT_ID: l'ID del progetto che contiene il disco di origine.
    • ZONE: la zona del disco di origine.
    • DISK_NAME: il nome del disco creato nel passaggio 1.
    • DESTINATION_PROJECT_ID: l'ID del progetto di destinazione per il nuovo snapshot.

    Per ottenere un elenco degli snapshot a tua disposizione, consulta Visualizzare gli snapshot standard in un progetto o in una località.

  3. Elimina il disco temporaneo creato nel primo passaggio utilizzando il comando gcloud compute disks delete.

    gcloud compute disks delete DISK_NAME \
     --project SOURCE_PROJECT_ID --zone ZONE
    

    Sostituisci quanto segue:

    • DISK_NAME: il nome del disco creato nel passaggio 1.
    • SOURCE_PROJECT_ID: l'ID del progetto che contiene il disco di origine.
    • ZONE: la zona del disco.

REST

  1. Nel progetto di origine, crea un disco zonale o regionale basato sullo snapshot utilizzando il metodo disks.insert zonale.

    Ad esempio, per creare un disco zonale, effettua la seguente richiesta:

    POST https://compute.googleapis.com/compute/v1/projects/SOURCE_PROJECT_ID/zones/SOURCE_ZONE/disks
    {
     "name": DISK_NAME
     "sourceSnapshot": SNAPSHOT_NAME
    }
    

    Sostituisci quanto segue:

    • SOURCE_PROJECT_ID: l'ID del progetto di origine per il nuovo disco.
    • SOURCE_ZONE: la zona per il nuovo disco.
    • DISK_NAME: un nome per il nuovo disco.
    • SNAPSHOT_NAME: il nome dello snapshot.

    Si tratta di un disco temporaneo creato solo per copiare lo snapshot tra le organizzazioni.

  2. Crea uno snapshot nel progetto di destinazione chiamando il metodo snapshots.insert.

    Ad esempio, per creare uno snapshot utilizzando il disco zonale creato nel primo passaggio, utilizza il seguente comando:

    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/DISK_NAME
    }
    

    Sostituisci quanto segue:

    • DESTINATION_PROJECT_ID: l'ID del progetto di destinazione per il nuovo snapshot.
    • SNAPSHOT_NAME: un nome per lo snapshot.
    • SOURCE_PROJECT_ID: l'ID del progetto che contiene il disco di origine.
    • SOURCE_ZONE: la zona del disco di origine.
    • DISK_NAME: il nome del disco di origine.
  3. Elimina il disco temporaneo creato nel primo passaggio utilizzando il metodo disks.delete.

    DELETE https://compute.googleapis.com/compute/v1/projects/SOURCE_PROJECT_ID/zones/SOURCE_ZONE/disks/DISK_NAME
    

    Sostituisci quanto segue:

    • SOURCE_PROJECT_ID: l'ID del progetto che contiene il disco temporaneo.
    • SOURCE_ZONE: la zona del disco.
    • DISK_NAME: il nome del disco temporaneo creato nel passaggio 1.

Passaggi successivi