Gerenciar snapshots de disco


Os snapshots de disco padrão ajudam a fazer backup periódico dos dados do Persistent Disk e do Hyperdisk do Google Cloud.

É possível visualizar, listar e excluir snapshots de disco. Também é possível compartilhar snapshots entre projetos.

Antes de começar

  • Configure a autenticação, caso ainda não tenha feito isso. A autenticação é o processo de verificação da sua identidade para acesso a serviços e APIs do Google Cloud. Para executar códigos ou amostras de um ambiente de desenvolvimento local, autentique-se no Compute Engine da seguinte maneira.

    Selecione a guia para como planeja usar as amostras nesta página:

    Console

    Quando você usa o console do Google Cloud para acessar os serviços e as APIs do Google Cloud, não é necessário configurar a autenticação.

    gcloud

    1. Instale a Google Cloud CLI e inicialize-a executando o seguinte comando:

      gcloud init
    2. Defina uma região e uma zona padrão.

    REST

    Para usar as amostras da API REST nesta página em um ambiente de desenvolvimento local, use as credenciais fornecidas para a CLI gcloud.

      Instale a Google Cloud CLI e inicialize-a executando o seguinte comando:

      gcloud init

Papéis e permissões necessárias

Para receber as permissões necessárias para gerenciar snapshots padrão, peça ao administrador para conceder a você os seguintes papéis do IAM no projeto:

Para mais informações sobre como conceder papéis, consulte Gerenciar acesso.

Esses papéis predefinidos contêm as permissões necessárias para gerenciar snapshots padrão. Para conferir as permissões exatas necessárias, expanda a seção Permissões necessárias:

Permissões necessárias

As permissões a seguir são necessárias para gerenciar snapshots padrão:

  • Para listar snapshots: compute.snapshots.list no projeto
  • Para ver informações sobre um snapshot: compute.snapshots.get nele
  • Para excluir um snapshot: compute.snapshots.delete nele
  • Para excluir snapshots com base em um filtro:
    • compute.snapshots.delete no snapshot
    • compute.snapshots.list no projeto
  • Para compartilhar dados de snapshots entre projetos:
    • compute.storageAdmin no projeto (para acessar todos os snapshots padrão)
    • compute.disks.create no projeto para compartilhar com
    • compute.snapshots.create no projeto de origem
    • compute.disks.createSnapshot no disco de origem

Essas permissões também podem ser concedidas com papéis personalizados ou outros papéis predefinidos.

Ver os snapshots padrões em um projeto ou local

É possível visualizar ou listar os snapshots padrão em um projeto ou local usando a gcloud CLI, o console do Google Cloud ou a REST.

Console

  1. No Console do Google Cloud, acesse a página Snapshots.

    Acessar a página "Snapshots"

  2. Na guia Snapshots, é possível ver os snapshots padrão do projeto atual.

  3. Opcional. Restrinja os resultados com o campo Filtro filter_list. Insira o nome ou valor de uma propriedade no campo Filtro ou escolha uma das propriedades disponíveis.

gcloud

Para conferir uma lista de snapshots disponíveis em um projeto específico, use o comando gcloud compute snapshots list.

gcloud compute snapshots list --project=PROJECT_ID

Opcional. Substitua PROJECT_ID pelo ID do projeto. Se você omitir essa flag, o projeto atual será usado. É possível definir o projeto padrão para sua sessão usando o comando gcloud config set project PROJECT_ID da gcloud CLI.

REST

Para conferir uma lista de snapshots disponíveis para você em um projeto específico, faça uma solicitação GET para o método snapshots.list:

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

Substitua PROJECT_ID pelo ID do projeto.

Ver snapshots padrão de um disco

É possível visualizar a lista de snapshots padrão de um disco usando o console do Google Cloud, a gcloud CLI ou o REST.

Console

  1. No Console do Google Cloud, acesse a página Snapshots.

    Acessar a página "Snapshots"

  2. Na guia Snapshots, é exibida uma lista de todos os snapshots padrão do projeto.

  3. Refine os resultados por disco de origem:

    1. Digite Source disk: no campo Filtro filter_list ou clique no campo Filtro e escolha o valor Source disk na lista Propriedades.

    2. Selecione o nome do disco na lista Valores que aparece ao lado de Source disk: no campo Filtro.

      Os snapshots exibidos no console agora mostram todos os snapshots padrão do disco especificado.

      Se o nome de um disco não for exibido na lista Valores, em seguida, no campo Filtro ao lado de Source disk:, digite as primeiras letras do nome do disco de origem para alterar a lista de valores exibida.

gcloud

Liste snapshots padrão de um disco com o comando gcloud compute snapshots list e o argumento --filter:

  • Liste snapshots padrão de um disco zonal.

    gcloud compute snapshots list --filter="sourceDisk:projects/PROJECT_ID/zones/SOURCE_ZONE/disks/DISK_NAME
    
  • Liste snapshots padrão de um disco regional.

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

Substitua:

  • PROJECT_ID: o ID do projeto.
  • SOURCE_ZONE (somente discos zonais): o nome da zona do disco, por exemplo, us-west1-a.
  • SOURCE_REGION: (apenas discos regionais) o nome da região do disco, por exemplo, us-west1.
  • DISK_NAME: o nome do disco, por exemplo, disk-1.

REST

Liste os snapshots padrão de um disco zonal ou regional com uma solicitação GET para o método snapshots.list.

Use o parâmetro de consulta filter=sourceDisk para especificar o nome do disco.

  • Liste snapshots padrão de um 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'
    
  • Liste snapshots padrão de um 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'
    

Substitua:

  • PROJECT_ID: o ID do projeto.
  • SOURCE_ZONE (somente discos zonais): o nome da zona do disco, por exemplo, us-west1-a.
  • SOURCE_REGION: (apenas discos regionais) o nome da região do disco, por exemplo, us-west1.
  • DISK_NAME: o nome do disco de origem, por exemplo, disk-1.

Ver informações sobre um snapshot padrão

Recupere informações detalhadas sobre um snapshot padrão, como horário de criação, disco de origem e tamanho usando o console do Google Cloud, a CLI do Google Cloud ou o REST.

Console

  1. No Console do Google Cloud, acesse a página Snapshots.

    Acessar a página "Snapshots"

  2. Na guia Snapshots, veja a lista de snapshots do projeto.

  3. Na coluna Nome, clique no nome do snapshot padrão. A página de Detalhes do snapshot selecionado é exibida, mostrando as propriedades dele.

gcloud

Para ver informações sobre um snapshot padrão, use o comando gcloud compute snapshots describe.

gcloud compute snapshots describe SNAPSHOT_NAME

Substitua SNAPSHOT_NAME pelo nome do snapshot padrão.

REST

Faça uma solicitação GET ao método snapshots.get.

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

Substitua:

  • PROJECT_ID: o nome do projeto que contém o snapshot padrão.
  • SNAPSHOT_NAME: o nome do snapshot padrão.

Excluir um snapshot

No Compute Engine, é usado cada instantâneo diferencial que contém somente dados alterados desde o instantâneo anterior. Como os snapshots subsequentes talvez precisem de informações armazenadas em um snapshot anterior, lembre-se de que excluir um snapshot não necessariamente exclui todos os dados dele.

Para saber mais sobre a exclusão de snapshots, consulte Exclusão de snapshot.

Console

  1. Acesse a página Snapshots no Console do Google Cloud.

    Acessar a página "Snapshots"

  2. Selecione um ou mais snapshots que você quer excluir.

  3. Na parte superior da página Instantâneos, clique em Excluir.

gcloud

Para excluir um snapshot, use o comando gcloud compute snapshots delete:

gcloud compute snapshots delete SNAPSHOT_NAME

Substitua SNAPSHOT_NAME pelo nome do snapshot que você quer excluir.

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

Faça uma solicitação DELETE ao método snapshots.delete para excluir snapshots.

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

Substitua:

  • PROJECT_ID: o nome do projeto.
  • SNAPSHOT_NAME: o nome do snapshot a ser excluído.

Excluir vários snapshots com base em um filtro

No Compute Engine, é usado cada instantâneo diferencial que contém somente dados alterados desde o instantâneo anterior. Como os snapshots posteriores talvez exijam informações armazenadas em um snapshot anterior, a exclusão de um snapshot não necessariamente exclui todos os dados dele.

Para saber mais sobre a exclusão de snapshots, consulte Exclusão de snapshot.

É possível excluir vários snapshots com base em um determinado filtro. Para mais informações sobre como usar filtros com a gcloud CLI, consulte filtros de tópicos da gcloud CLI.

Para excluir os snapshots, use uma combinação do comando gcloud compute snapshots list com um determinado filtro e do comando gcloud compute snapshots delete com xargs:

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

Substitua EXPRESSION por um filtro de tópicos da gcloud CLI.

Por exemplo, --filter="creationTimestamp<'2023-12-31'" exclui todos os snapshots criados antes de 31 de dezembro de 2023.

Compartilhar dados de snapshots entre projetos na mesma organização

Use este procedimento para mover dados de um disco em um projeto para um disco em um projeto diferente na mesma organização.

gcloud

  1. Crie um snapshot padrão no projeto de destino usando o comando gcloud compute snapshots create. Por exemplo, para criar um snapshot de um Persistent Disk ou Hyperdisk zonal, use o seguinte 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
    

    Substitua:

    • SNAPSHOT_NAME: um nome para o novo snapshot.
    • SOURCE_PROJECT_ID: o ID do projeto para o disco de origem.
    • ZONE: a zona do disco de origem.
    • SOURCE_DISK_NAME: o nome do disco de origem.
    • DESTINATION_PROJECT_ID: o ID do projeto de destino do novo snapshot.
  2. No projeto de destino, crie um disco zonal ou regional com base no snapshot usando o comando gcloud compute disks create:

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

    Substitua:

    • DISK_NAME: um nome para o novo disco.
    • SNAPSHOT_NAME: o nome do snapshot.
    • DESTINATION_PROJECT_ID: o ID do projeto de destino do novo disco.

REST

  1. Crie um snapshot padrão no projeto de destino chamando o método snapshots.insert. Por exemplo, para capturar um snapshot de um Persistent Disk ou Hyperdisk zonal, faça a seguinte solicitação:

    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
    }
    

    Substitua:

    • DESTINATION_PROJECT_ID: o ID do projeto de destino do novo snapshot.
    • SNAPSHOT_NAME: um nome para o snapshot.
    • SOURCE_PROJECT_ID: o ID do projeto de disco de origem.
    • SOURCE_ZONE: a zona do disco de origem.
    • SOURCE_DISK_NAME: o nome do disco de origem.
  2. No projeto de destino, crie um disco zonal ou regional com base no snapshot usando o método disks.insert zonal ou o regional regionDisks.insert.

    Por exemplo, para criar um disco zonal, faça a seguinte solicitação:

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

    Substitua:

    • DESTINATION_PROJECT_ID: o ID do projeto de destino do novo disco.
    • DESTINATION_ZONE: a zona no projeto de destino do novo disco.
    • DISK_NAME: um nome para o novo disco.
    • SNAPSHOT_NAME: o nome do snapshot.

Para ver uma lista de snapshots disponíveis, consulte Visualizar os snapshots padrão em um projeto ou local.

Compartilhar um snapshot entre projetos em diferentes organizações

Use este procedimento para compartilhar um snapshot padrão em um projeto em uma organização com um projeto diferente em outra organização.

gcloud

  1. No projeto de origem, crie um disco baseado no snapshot usando o comando gcloud compute disks create:

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

    Substitua:

    • DISK_NAME: um nome para o novo disco.
    • SNAPSHOT_NAME: o nome do snapshot.
    • SOURCE_PROJECT_ID: o ID do projeto de origem.
    • ZONE: a zona em que o novo disco será criado.

    Esse disco é temporário e criado apenas para copiar o snapshot entre organizações.

  2. No projeto de destino, crie um snapshot usando o comando gcloud compute snapshots create.

    Por exemplo, para criar um snapshot usando o disco zonal criado na primeira etapa, use o seguinte 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
    

    Substitua:

    • SNAPSHOT_NAME: um nome para o snapshot.
    • SOURCE_PROJECT_ID: o ID do projeto que contém o disco de origem.
    • ZONE: a zona do disco de origem.
    • DISK_NAME: o nome do disco criado na etapa 1.
    • DESTINATION_PROJECT_ID: o ID do projeto de destino do novo snapshot.

    Para ver uma lista de snapshots disponíveis, consulte Visualizar os snapshots padrão em um projeto ou local.

  3. Exclua o disco temporário criado na primeira etapa usando o comando gcloud compute disks delete.

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

    Substitua:

    • DISK_NAME: o nome do disco criado na etapa 1.
    • SOURCE_PROJECT_ID: o ID do projeto que contém o disco de origem.
    • ZONE: a zona do disco.

REST

  1. No projeto de origem, crie um disco zonal ou regional baseado no snapshot usando o método disks.insert zonal.

    Por exemplo, para criar um disco zonal, faça a seguinte solicitação:

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

    Substitua:

    • SOURCE_PROJECT_ID: o ID do projeto de origem para o novo disco.
    • SOURCE_ZONE: a zona do novo disco.
    • DISK_NAME: um nome para o novo disco.
    • SNAPSHOT_NAME: o nome do snapshot.

    Esse disco é temporário e criado apenas para copiar o snapshot entre organizações.

  2. Crie um snapshot no projeto de destino chamando o método snapshots.insert.

    Por exemplo, para criar um snapshot usando o disco zonal criado na primeira etapa, use o seguinte 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
    }
    

    Substitua:

    • DESTINATION_PROJECT_ID: o ID do projeto de destino do novo snapshot.
    • SNAPSHOT_NAME: um nome para o snapshot.
    • SOURCE_PROJECT_ID: o ID do projeto que contém o disco de origem.
    • SOURCE_ZONE: a zona do disco de origem.
    • DISK_NAME: o nome do disco de origem.
  3. Exclua o disco temporário criado na primeira etapa usando o método disks.delete.

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

    Substitua:

    • SOURCE_PROJECT_ID: o ID do projeto que contém o disco temporário.
    • SOURCE_ZONE: a zona do disco.
    • DISK_NAME: o nome do disco temporário criado na etapa 1.

A seguir