Gestisci gli snapshot dei dischi

Gli snapshot di disco standard consentono di eseguire periodicamente il backup dei dati da Persistent Disk e 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 è il processo mediante il quale viene verificata l'identità per l'accesso ai servizi e alle API Google Cloud. Per eseguire codice o esempi da un ambiente di sviluppo locale, puoi autenticarti in Compute Engine nel seguente modo.

    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. Installa Google Cloud CLI, quindi initialize eseguendo questo comando:

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

      Per utilizzare gli esempi di API REST in questa pagina in un ambiente di sviluppo locale, devi utilizzare le credenziali che fornisci a gcloud CLI.

        Installa Google Cloud CLI, quindi initialize eseguendo questo comando:

        gcloud init

      Per maggiori informazioni, consulta Autenticazione per REST nella documentazione sull'autenticazione di Google Cloud.

Autorizzazioni e ruoli richiesti

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

Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso.

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

Autorizzazioni obbligatorie

Per gestire gli snapshot standard sono necessarie le seguenti autorizzazioni:

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

Potresti anche essere in grado di ottenere queste autorizzazioni con i ruoli personalizzati o altri ruoli predefiniti.

Visualizza 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 gcloud CLI, la console Google Cloud o il REST.

Console

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

    Vai alla pagina Istantanee

  2. Nella scheda Snapshot puoi visualizzare gli snapshot standard per il progetto attuale.

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

gcloud

Per visualizzare un elenco degli snapshot disponibili 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 config set project PROJECT_ID gcloud CLI.

REST

Per visualizzare un elenco degli snapshot disponibili 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.

Visualizza gli snapshot standard per un disco

Puoi visualizzare l'elenco degli snapshot standard per un disco utilizzando gcloud CLI o REST della console Google Cloud.

Console

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

    Vai alla pagina Istantanee

  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 campo 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, nel campo Filtro accanto a Source disk:, digita le prime lettere del nome del disco di origine per modificare l'elenco di valori visualizzato.

gcloud

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

  • Elenca gli snapshot standard per un disco di zona:

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

    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 di zona) il nome della zona per il disco, ad esempio us-west1-a.
  • SOURCE_REGION: (solo dischi regionali) il nome della regione per il disco, ad esempio us-west1.
  • DISK_NAME: il nome del disco, ad esempio disk-1.

REST

Elenca gli snapshot standard per un disco di zona o di regione 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 di zona:

    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 di una regione:

    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 di zona) il nome della zona per il disco, ad esempio us-west1-a.
  • SOURCE_REGION: (solo dischi regionali) il nome della regione per il disco, ad esempio us-west1.
  • DISK_NAME: il nome del disco di origine, ad esempio disk-1.

Visualizzare le informazioni su un'istantanea standard

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

Console

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

    Vai alla pagina Istantanee

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

  3. Nella colonna Nome, fai clic sul nome dello snapshot standard. Viene visualizzata la pagina Dettagli snapshot dello snapshot selezionato, con 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 dell'istantanea standard.

Elimina uno snapshot

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

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

Console

  1. Vai alla pagina Snapshot nella console Google Cloud.

    Vai alla pagina Istantanee

  2. Seleziona uno o più snapshot che vuoi eliminare.

  3. Nella parte superiore della pagina Snapshot, 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.

Go

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

Effettua una richiesta DELETE al metodo snapshots.delete per eliminare gli snapshot.

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.

Elimina più snapshot in base a un filtro

Compute Engine utilizza snapshot differenziali in modo che ogni snapshot contenga solo i dati che sono stati modificati 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 al suo interno.

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

Puoi eliminare un numero di snapshot in base a un determinato filtro. Per maggiori informazioni su come utilizzare i filtri con gcloud CLI, consulta Filtri di 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 del 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 argomento di gcloud CLI.

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

Condividi i dati degli snapshot tra progetti nella 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 di un Hypeperdisk a livello di zona, utilizza il comando seguente:

    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: il nome del nuovo snapshot.
    • SOURCE_PROJECT_ID: l'ID del progetto del 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 a livello di zona o di regione 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 creare uno snapshot di un Persistent Disk o di un Hyperdisk a livello di zona, effettua la richiesta seguente:

    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: 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 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 di zona, 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 disponibili, vedi Visualizzare gli snapshot standard in un progetto o in una località.

Condividere uno snapshot tra progetti di diverse organizzazioni

Puoi utilizzare questa procedura per condividere uno snapshot standard in un progetto in un'organizzazione con un progetto diverso in 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.

    Questo disco è 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 di zona creato nel primo passaggio, utilizza il comando seguente:

    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: il nome dello 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 disponibili, vedi 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 a livello di zona o di regione basato sullo snapshot utilizzando il metodo disks.insert di zona.

    Ad esempio, per creare un disco di zona, 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.

    Questo disco è 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 di zona creato nel primo passaggio, utilizza il comando seguente:

    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: il nome dello 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