Administra instantáneas de discos


Las instantáneas de disco estándar te ayudan a crear copias de seguridad de los datos de tu Persistent Disk y Google Cloud Hyperdisk de forma periódica.

Puedes ver, enumerar y borrar instantáneas de discos. También puedes compartir instantáneas entre proyectos.

Antes de empezar

  • Configura la autenticación si aún no lo hiciste. La autenticación es el proceso mediante el cual se verifica tu identidad para acceder a los servicios y las API de Google Cloud. Para ejecutar código o muestras desde un entorno de desarrollo local, puedes autenticarte en Compute Engine de la siguiente manera.

    Selecciona la pestaña para saber cómo planeas usar las muestras en esta página:

    Consola

    Cuando usas la consola de Google Cloud para acceder a los servicios y las APIs de Google Cloud, no necesitas configurar la autenticación.

    gcloud

    1. Instala Google Cloud CLI y, luego, inicializa la ejecución del siguiente comando:

      gcloud init
    2. Configura una región y una zona predeterminadas.

    REST

    Para usar las muestras de la API de REST en esta página en un entorno de desarrollo local, debes usar las credenciales que proporcionas a la CLI de gcloud.

      Instala Google Cloud CLI y, luego, inicializa la ejecución del siguiente comando:

      gcloud init

Roles y permisos requeridos

Si deseas obtener los permisos que necesitas para administrar las instantaneas estándar, pídele a tu administrador que te otorgue los siguientes roles de IAM en el proyecto:

Si quieres obtener más información para otorgar roles, consulta Administra el acceso.

Estos roles predefinidos contienen los permisos necesarios para administrar instantáneas estándar. Para ver los permisos exactos que son necesarios, expande la sección Permisos requeridos:

Permisos necesarios

Se requieren los siguientes permisos para administrar las instantáneas estándar:

  • Para enumerar las instantáneas, usa compute.snapshots.list en el proyecto.
  • Para ver información sobre una instantánea: compute.snapshots.get en la instantánea
  • Para borrar una instantánea, haz lo siguiente: compute.snapshots.delete en la instantánea
  • Para borrar instantáneas según un filtro, haz lo siguiente:
    • compute.snapshots.delete en la instantánea
    • compute.snapshots.list en el proyecto
  • Para compartir datos de instantáneas entre proyectos, haz lo siguiente:
    • compute.storageAdmin en el proyecto (para acceder a todas las instantáneas estándar)
    • compute.disks.create en el proyecto con el que se compartirá
    • compute.snapshots.create en el proyecto de origen.
    • compute.disks.createSnapshot en el disco de origen

También puedes obtener estos permisos con roles personalizadas o con otros roles predefinidos

Visualiza las instantáneas estándar en un proyecto o una ubicación

Puedes ver o enumerar las instantáneas estándar en un proyecto o una ubicación mediante la gcloud CLI, la consola de Google Cloud o REST.

Console

  1. En la consola de Google Cloud, ve a la página Instantáneas.

    Ir a la página de instantáneas

  2. En la pestaña Instantáneas, puedes ver las instantáneas estándar del proyecto actual.

  3. Opcional. Limita los resultados con el campo Filtro filter_list. Ingresa el nombre o el valor de una propiedad en el campo Filtro o elige una de las propiedades disponibles.

gcloud

Si quieres ver una lista de instantáneas disponibles en un proyecto específico, usa el comando gcloud compute snapshots list.

gcloud compute snapshots list --project=PROJECT_ID

Opcional. Reemplaza PROJECT_ID por el ID del proyecto. Si omites esta marca, se usa el proyecto actual. Puedes configurar el proyecto predeterminado para la sesión mediante el comando gcloud config set project PROJECT_ID de la CLI de gcloud.

REST

Si deseas ver una lista de instantáneas disponibles en un proyecto específico, realiza una solicitud GET al método snapshots.list:

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

Reemplaza PROJECT_ID por el ID del proyecto.

Visualiza las instantáneas estándar de un disco

Puedes ver la lista de instantáneas estándar de un disco a través de la consola de Google Cloud, gcloud CLI o REST.

Console

  1. En la consola de Google Cloud, ve a la página Instantáneas.

    Ir a la página de instantáneas

  2. En la pestaña Instantáneas, aparece una lista de todas las instantáneas estándar del proyecto.

  3. Limita los resultados por disco de origen:

    1. Ingresa Source disk: en el campo Filtro filter_list o haz clic en el campo Filtro y, luego, elige lo siguiente: valor Source disk de la lista Propiedades.

    2. Selecciona el nombre del disco de la lista Valores que aparece junto a Source disk: en el campo Filtro.

      En las instantáneas que se muestran en la consola, ahora se muestran todas las instantáneas estándar del disco especificado.

      Si no ves el nombre de un disco en la lista Valores, en el campo Filtro junto a Source disk:, escribe lo siguiente: las primeras letras del nombre del disco de origen para cambiar la lista de valores que ves.

gcloud

Enumera las instantáneas estándar para un disco con el comando gcloud compute snapshots list y el argumento --filter:

  • Enumera la instantánea estándar de un disco zonal:

    gcloud compute snapshots list --filter="sourceDisk:projects/PROJECT_ID/zones/SOURCE_ZONE/disks/DISK_NAME
    
  • Enumera las instantáneas estándar para un disco regional:

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

Reemplaza lo siguiente:

  • PROJECT_ID: el ID del proyecto.
  • SOURCE_ZONE: (Solo discos zonales) el nombre de la zona para el disco, por ejemplo, us-west1-a.
  • SOURCE_REGION: (solo discos regionales) el nombre de la región del disco, por ejemplo, us-west1.
  • DISK_NAME: el nombre del disco, por ejemplo, disk-1.

REST

Enumera las instantáneas estándar para un disco zonal o regional con una solicitud GET al método snapshots.list.

Usa el parámetro de consulta filter=sourceDisk para especificar el nombre del disco.

  • Enumera la instantánea estándar de un disco zonal:

    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'
    
  • Enumera las instantáneas estándar para un disco regional:

    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'
    

Reemplaza lo siguiente:

  • PROJECT_ID: el ID del proyecto.
  • SOURCE_ZONE: (Solo discos zonales) el nombre de la zona para el disco, por ejemplo, us-west1-a.
  • SOURCE_REGION: (solo discos regionales) el nombre de la región del disco, por ejemplo, us-west1.
  • DISK_NAME: el nombre del disco de origen, por ejemplo, disk-1.

Visualiza información sobre una instantánea estándar

Recupera información detallada sobre una instantánea estándar, como la hora de creación, el disco de origen y el tamaño, a través de la consola de Google Cloud, Google Cloud CLI o REST.

Console

  1. En la consola de Google Cloud, ve a la página Instantáneas.

    Ir a la página de instantáneas

  2. En la pestaña Instantáneas, consulta la lista de instantáneas del proyecto.

  3. En la columna Nombre, haz clic en el nombre de la instantánea estándar. Aparecerá la página Detalles de la instantánea estándar para la instantánea seleccionada, con sus propiedades.

gcloud

Para ver información sobre una instantánea estándar, usa el comando gcloud compute snapshots describe.

gcloud compute snapshots describe SNAPSHOT_NAME

Reemplaza SNAPSHOT_NAME por el nombre de la instantánea estándar.

REST

Realiza una solicitud GET al método snapshots.get.

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

Reemplaza lo siguiente:

  • PROJECT_ID: el nombre del proyecto que contiene la instantánea estándar.
  • SNAPSHOT_NAME: el nombre de la instantánea estándar.

Borrar una instantánea

Compute Engine usa instantáneas diferenciales de modo que cada instantánea contiene solo los datos que cambiaron desde la instantánea anterior. Dado que las instantáneas posteriores pueden requerir información almacenada en una instantánea anterior, ten en cuenta que, si se borra una instantánea, no siempre se borran todos los datos que contiene.

Para obtener más información sobre la eliminación de instantáneas, consulta Eliminación de instantáneas.

Console

  1. Ve a la página Instantáneas en la consola de Google Cloud.

    Ir a la página de instantáneas

  2. Selecciona una o más instantáneas que desees borrar.

  3. En la parte superior de la página Instantáneas, haz clic en Borrar.

gcloud

Para borrar una instantánea, usa el comando gcloud compute snapshots delete:

gcloud compute snapshots delete SNAPSHOT_NAME

Reemplaza SNAPSHOT_NAME por el nombre de la instantánea que deseas borrar.

Go

import (
	"context"
	"fmt"
	"io"

	compute "cloud.google.com/go/compute/apiv1"
	computepb "google.golang.org/genproto/googleapis/cloud/compute/v1"
)

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

Realiza una solicitud DELETE al método snapshots.delete para borrar instantáneas.

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

Reemplaza lo siguiente:

  • PROJECT_ID: nombre del proyecto.
  • SNAPSHOT_NAME: el nombre de la instantánea que se borrará.

Borra varias instantáneas según un filtro

Compute Engine usa instantáneas diferenciales de modo que cada instantánea contiene solo los datos que cambiaron desde la instantánea anterior. Dado que las instantáneas posteriores pueden requerir información almacenada en una instantánea anterior, si se borra una instantánea, no siempre se borran todos los datos que contiene.

Para obtener más información sobre la eliminación de instantáneas, consulta Eliminación de instantáneas.

Puedes borrar una serie de instantáneas según un filtro determinado. Para obtener más información sobre cómo usar filtros con la CLI de gcloud, consulta Filtros de temas de la CLI de gcloud.

Para borrar las instantáneas, usa una combinación del comando gcloud compute snapshots list con un filtro determinado y el comando gcloud compute snapshots delete con xargs.

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

Reemplaza EXPRESSION por un filtro de tema de la CLI de gcloud.

Por ejemplo, --filter="creationTimestamp<'2023-12-31'" borra todas las instantáneas creadas antes del 31 de diciembre de 2023.

Comparte datos de instantáneas entre proyectos en la misma organización

Puedes usar este procedimiento para mover datos de un disco en un proyecto a un disco en un proyecto diferente dentro de la misma organización.

gcloud

  1. Crea una instantánea estándar en el proyecto de destino mediante el comando gcloud compute snapshots create. Por ejemplo, para crear una instantánea de un Persistent Disk zonal o Hyperdisk, usa el siguiente 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
    

    Reemplaza lo siguiente:

    • SNAPSHOT_NAME: un nombre único para la instantánea nueva.
    • SOURCE_PROJECT_ID: el ID del proyecto para el disco de origen.
    • ZONE: Es la zona del disco de origen.
    • SOURCE_DISK_NAME: el nombre del disco de origen.
    • DESTINATION_PROJECT_ID: el ID del proyecto de destino para la instantánea nueva.
  2. En el proyecto de destino, crea un disco zonal o regional que se base en la instantánea mediante el comando gcloud compute disks create:

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

    Reemplaza lo siguiente:

    • DISK_NAME: Es un nombre para el disco nuevo.
    • SNAPSHOT_NAME: Es el nombre de la instantánea.
    • DESTINATION_PROJECT_ID: Es el ID del proyecto de destino para el disco nuevo.

REST

  1. Crea una instantánea estándar en el proyecto de destino mediante una llamada al método snapshots.insert. Por ejemplo, para tomar una instantánea de un Persistent Disk zonal o Hyperdisk, realiza la siguiente solicitud:

    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
    }
    

    Reemplaza lo siguiente:

    • DESTINATION_PROJECT_ID: Es el ID del proyecto de destino para la instantánea nueva.
    • SNAPSHOT_NAME: Es un nombre para la instantánea.
    • SOURCE_PROJECT_ID: Es el ID del proyecto del disco de origen.
    • SOURCE_ZONE: Es la zona del disco de origen.
    • SOURCE_DISK_NAME: el nombre del disco de origen.
  2. En el proyecto de destino, crea un disco zonal o regional que se base en la instantánea mediante el método zonal disks.insert o el método regionalregionDisks.insert.

    Por ejemplo, para crear un disco zonal, realiza la siguiente solicitud:

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

    Reemplaza lo siguiente:

    • DESTINATION_PROJECT_ID: Es el ID del proyecto de destino para el disco nuevo.
    • DESTINATION_ZONE: Es la zona en el proyecto de destino del disco nuevo.
    • DISK_NAME: Es un nombre para el disco nuevo.
    • SNAPSHOT_NAME: Es el nombre de la instantánea.

Para obtener una lista de las instantáneas disponibles, consulta Visualiza las instantáneas estándar de un proyecto o una ubicación.

Comparte una instantánea entre proyectos en diferentes organizaciones

Puedes usar este procedimiento para compartir una instantánea estándar en un proyecto de una organización con un proyecto diferente en otra organización.

gcloud

  1. En el proyecto de origen, crea un disco que se base en la instantánea mediante el comando gcloud compute disks create.

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

    Reemplaza lo siguiente:

    • DISK_NAME: Es un nombre para el disco nuevo.
    • SNAPSHOT_NAME: Es el nombre de la instantánea.
    • SOURCE_PROJECT_ID: el ID del proyecto de origen.
    • ZONE: la zona en la que se creará el disco nuevo

    Este es un disco temporal que se crea solo para copiar la instantánea en todas las organizaciones.

  2. En el proyecto de destino, crea una instantánea mediante el comando gcloud compute snapshots create.

    Por ejemplo, para crear una instantánea con el disco zonal que se creó en el primer paso, usa el siguiente 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
    

    Reemplaza lo siguiente:

    • SNAPSHOT_NAME: Es un nombre para la instantánea.
    • SOURCE_PROJECT_ID: El ID del proyecto que contiene el disco de origen.
    • ZONE: Es la zona del disco de origen.
    • DISK_NAME: El nombre del disco creado en el paso 1.
    • DESTINATION_PROJECT_ID: el ID del proyecto de destino para la instantánea nueva.

    Para obtener una lista de las instantáneas disponibles, consulta Visualiza las instantáneas estándar de un proyecto o una ubicación.

  3. Borra el disco temporal creado en el primer paso con el comando gcloud compute disks delete.

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

    Reemplaza lo siguiente:

    • DISK_NAME: El nombre del disco creado en el paso 1.
    • SOURCE_PROJECT_ID: El ID del proyecto que contiene el disco de origen.
    • ZONE: la zona del disco.

REST

  1. En el proyecto de origen, crea un disco zonal o regional que se base en la instantánea mediante el método zonal disks.insert.

    Por ejemplo, para crear un disco zonal, realiza la siguiente solicitud:

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

    Reemplaza lo siguiente:

    • SOURCE_PROJECT_ID: El ID del proyecto de destino para el disco nuevo.
    • SOURCE_ZONE: La zona para el disco nuevo.
    • DISK_NAME: Es un nombre para el disco nuevo.
    • SNAPSHOT_NAME: Es el nombre de la instantánea.

    Este es un disco temporal que se crea solo para copiar la instantánea en todas las organizaciones.

  2. Crea una instantánea en el proyecto de destino mediante una llamada al método snapshots.insert.

    Por ejemplo, para crear una instantánea con el disco zonal que se creó en el primer paso, usa el siguiente 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
    }
    

    Reemplaza lo siguiente:

    • DESTINATION_PROJECT_ID: el ID del proyecto de destino para la instantánea nueva.
    • SNAPSHOT_NAME: Es un nombre para la instantánea.
    • SOURCE_PROJECT_ID: El ID del proyecto que contiene el disco de origen.
    • SOURCE_ZONE: Es la zona del disco de origen.
    • DISK_NAME: el nombre del disco de origen.
  3. Borra el disco temporal creado en el primer paso con el método disks.delete.

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

    Reemplaza lo siguiente:

    • SOURCE_PROJECT_ID: El ID del proyecto que contiene el disco temporal.
    • SOURCE_ZONE: la zona del disco.
    • DISK_NAME: El nombre del disco temporal creado en el paso 1.

¿Qué sigue?