Gestionar programaciones de capturas de discos


En este documento se describe cómo gestionar las programaciones de snapshots de tus volúmenes de Persistent Disk y Hyperdisk de Google Cloud zonales y regionales.

Puedes gestionar las programaciones de instantáneas de la siguiente manera:

  • Ver programaciones de capturas
  • Cambiar programaciones de capturas
  • Eliminar programaciones de capturas

También puedes configurar alertas para las copias de seguridad programadas.

Antes de empezar

  • Si aún no lo has hecho, configura la autenticación. La autenticación verifica tu identidad para acceder a Google Cloud servicios y APIs. Para ejecutar código o ejemplos desde un entorno de desarrollo local, puedes autenticarte en Compute Engine seleccionando una de las siguientes opciones:

    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. Instala Google Cloud CLI. Después de la instalación, inicializa la CLI de Google Cloud ejecutando el siguiente comando:

      gcloud init

      Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

    2. Set a default region and zone.

    Go

    Para usar las Go muestras de esta página en un entorno de desarrollo local, instala e inicializa la CLI de gcloud y, a continuación, configura las credenciales predeterminadas de la aplicación con tus credenciales de usuario.

      Instala Google Cloud CLI.

      Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

      If you're using a local shell, then create local authentication credentials for your user account:

      gcloud auth application-default login

      You don't need to do this if you're using Cloud Shell.

      If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.

    Para obtener más información, consulta Set up authentication for a local development environment.

    Java

    Para usar las Java muestras de esta página en un entorno de desarrollo local, instala e inicializa la CLI de gcloud y, a continuación, configura las credenciales predeterminadas de la aplicación con tus credenciales de usuario.

      Instala Google Cloud CLI.

      Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

      If you're using a local shell, then create local authentication credentials for your user account:

      gcloud auth application-default login

      You don't need to do this if you're using Cloud Shell.

      If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.

    Para obtener más información, consulta Set up authentication for a local development environment.

    Node.js

    Para usar las Node.js muestras de esta página en un entorno de desarrollo local, instala e inicializa la CLI de gcloud y, a continuación, configura las credenciales predeterminadas de la aplicación con tus credenciales de usuario.

      Instala Google Cloud CLI.

      Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

      If you're using a local shell, then create local authentication credentials for your user account:

      gcloud auth application-default login

      You don't need to do this if you're using Cloud Shell.

      If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.

    Para obtener más información, consulta Set up authentication for a local development environment.

    Python

    Para usar las Python muestras de esta página en un entorno de desarrollo local, instala e inicializa la CLI de gcloud y, a continuación, configura las credenciales predeterminadas de la aplicación con tus credenciales de usuario.

      Instala Google Cloud CLI.

      Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

      If you're using a local shell, then create local authentication credentials for your user account:

      gcloud auth application-default login

      You don't need to do this if you're using Cloud Shell.

      If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.

    Para obtener más información, consulta Set up authentication for a local development environment.

    REST

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

      Instala Google Cloud CLI.

      Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

    Para obtener más información, consulta el artículo Autenticarse para usar REST de la documentación sobre autenticación de Google Cloud .

Roles y permisos necesarios

Para obtener los permisos que necesitas para crear una programación de capturas, pide a tu administrador que te conceda los siguientes roles de gestión de identidades y accesos en el proyecto:

Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.

Estos roles predefinidos contienen los permisos necesarios para crear una programación de capturas. Para ver los permisos exactos que se necesitan, despliega la sección Permisos necesarios:

Permisos obligatorios

Para crear una programación de capturas, se necesitan los siguientes permisos:

  • Para ver las programaciones de capturas, sigue estos pasos: compute.resourcePolicies.list en el proyecto o en la organización
  • Para actualizar una programación de capturas, sigue estos pasos:
    • compute.resourcePolicies.update en la política de recursos
    • compute.resourcePolicies.get en la política de recursos
  • Para sustituir una programación de capturas, sigue estos pasos:
    • compute.resourcePolicies.use en la política de recursos
    • compute.disks.addResourcePolicies en el disco
    • compute.disks.removeResourcePolicies en el disco
  • Para eliminar una programación de capturas, sigue estos pasos:
    • compute.resourcePolicies.delete en la política de recursos
    • compute.disks.removeResourcePolicies en el disco

También puedes obtener estos permisos con roles personalizados u otros roles predefinidos.

Ver programaciones de capturas

Para obtener una lista de las programaciones de snapshots, usa la consola, el comando gcloud o el método de la API de Compute Engine. Esta solicitud muestra el nombre, la descripción y la región de todas las programaciones de instantáneas de un proyecto.

Consola

  1. En la Google Cloud consola, ve a la página Snapshots (Capturas).

    Ir a la página Capturas

  2. Selecciona la pestaña Programaciones de instantáneas.
  3. Usa el campo Filtrar para acotar la lista de programaciones de instantáneas.
  4. Haga clic en el nombre de una programación de instantáneas para ver sus detalles.

gcloud

Para ver una lista de tus programaciones de instantáneas, usa el comando resource-policies list.

 gcloud compute resource-policies list

Para ver la descripción de una programación de instantáneas específica, usa el comando resource-policies describe.

gcloud compute resource-policies describe SCHEDULE_NAME

Sustituye SCHEDULE_NAME por el nombre de la programación de instantáneas.

Go

Mostrar programaciones de capturas

import (
	"context"
	"fmt"
	"io"

	compute "cloud.google.com/go/compute/apiv1"
	computepb "cloud.google.com/go/compute/apiv1/computepb"
	"google.golang.org/api/iterator"
	"google.golang.org/protobuf/proto"
)

// listSnapshotSchedule retrieves a list of snapshot schedules.
func listSnapshotSchedule(w io.Writer, projectID, region, filter string) error {
	// projectID := "your_project_id"
	// snapshotName := "your_snapshot_name"
	// region := "eupore-central2"

	// Formatting for filters:
	// https://cloud.google.com/python/docs/reference/compute/latest/google.cloud.compute_v1.types.ListResourcePoliciesRequest

	ctx := context.Background()

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

	req := &computepb.ListResourcePoliciesRequest{
		Project: projectID,
		Region:  region,
		Filter:  proto.String(filter),
	}
	it := snapshotsClient.List(ctx, req)

	for {
		policy, err := it.Next()
		if err == iterator.Done {
			break
		}
		if err != nil {
			return err
		}
		fmt.Fprintf(w, "- %s", policy.GetName())
	}
	return nil
}

Describe una programación de capturas

import (
	"context"
	"fmt"
	"io"

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

// getSnapshotSchedule gets a snapshot schedule.
func getSnapshotSchedule(w io.Writer, projectID, scheduleName, region string) error {
	// projectID := "your_project_id"
	// snapshotName := "your_snapshot_name"
	// region := "eupore-central2"

	ctx := context.Background()

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

	req := &computepb.GetResourcePolicyRequest{
		Project:        projectID,
		Region:         region,
		ResourcePolicy: scheduleName,
	}
	schedule, err := snapshotsClient.Get(ctx, req)
	if err != nil {
		return fmt.Errorf("unable to get snapshot schedule: %w", err)
	}

	fmt.Fprintf(w, "Found snapshot schedule: %s\n", schedule.GetName())

	return nil
}

Java

Mostrar programaciones de capturas

import com.google.cloud.compute.v1.ListResourcePoliciesRequest;
import com.google.cloud.compute.v1.ResourcePoliciesClient;
import com.google.cloud.compute.v1.ResourcePoliciesClient.ListPagedResponse;
import com.google.cloud.compute.v1.ResourcePolicy;
import java.io.IOException;

public class ListSnapshotSchedules {

  public static void main(String[] args) throws IOException {
    // 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 region you want to list snapshot schedules from.
    String region = "us-central1";
    // Name of the snapshot schedule you want to list.
    String snapshotScheduleName = "YOUR_SCHEDULE_NAME";

    listSnapshotSchedules(projectId, region, snapshotScheduleName);
  }

  // Lists snapshot schedules in a specified region, optionally filtered.
  public static ListPagedResponse listSnapshotSchedules(
          String projectId, String region, String snapshotScheduleName) throws IOException {
    String filter = String.format("name = %s", snapshotScheduleName);
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests.
    try (ResourcePoliciesClient resourcePoliciesClient = ResourcePoliciesClient.create()) {

      ListResourcePoliciesRequest request = ListResourcePoliciesRequest.newBuilder()
              .setProject(projectId)
              .setRegion(region)
              .setFilter(filter)
              .build();
      ListPagedResponse response = resourcePoliciesClient.list(request);
      for (ResourcePolicy resourcePolicy : response.iterateAll()) {
        System.out.println(resourcePolicy);
      }
      return response;
    }
  }
}

Describir una programación de capturas

import com.google.cloud.compute.v1.GetResourcePolicyRequest;
import com.google.cloud.compute.v1.ResourcePoliciesClient;
import com.google.cloud.compute.v1.ResourcePolicy;
import java.io.IOException;

public class GetSnapshotSchedule {

  public static void main(String[] args) throws IOException {
    // 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 region in which your snapshot schedule is located.
    String region = "us-central1";
    // Name of your snapshot schedule.
    String snapshotScheduleName = "YOUR_SCHEDULE_NAME";

    getSnapshotSchedule(projectId, region, snapshotScheduleName);
  }

  // Retrieves the details of a snapshot schedule.
  public static ResourcePolicy getSnapshotSchedule(
        String projectId, String region, String snapshotScheduleName) throws IOException {
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests.
    try (ResourcePoliciesClient resourcePoliciesClient = ResourcePoliciesClient.create()) {
      GetResourcePolicyRequest request = GetResourcePolicyRequest.newBuilder()
              .setProject(projectId)
              .setRegion(region)
              .setResourcePolicy(snapshotScheduleName)
              .build();
      ResourcePolicy resourcePolicy = resourcePoliciesClient.get(request);
      System.out.println(resourcePolicy);

      return resourcePolicy;
    }
  }
}

Node.js

// Import the Compute library
const computeLib = require('@google-cloud/compute');

// Instantiate a resourcePoliciesClient
const resourcePoliciesClient = new computeLib.ResourcePoliciesClient();

/**
 * TODO(developer): Update/uncomment these variables before running the sample.
 */
// The project name.
const projectId = await resourcePoliciesClient.getProjectId();

// The location of the snapshot schedule resource policy.
// region = 'us-central1';

// The name of the snapshot schedule.
// snapshotScheduleName = 'snapshot-schedule-name';

async function callGetSnapshotSchedule() {
  const [response] = await resourcePoliciesClient.get({
    project: projectId,
    region,
    resourcePolicy: snapshotScheduleName,
  });

  console.log(JSON.stringify(response));
}

await callGetSnapshotSchedule();

Python

Mostrar programaciones de capturas

from google.cloud import compute_v1
from google.cloud.compute_v1.services.resource_policies import pagers


def snapshot_schedule_list(project_id: str, region: str) -> pagers.ListPager:
    """
    Lists snapshot schedules for a specified project and region.
    Args:
        project_id (str): The ID of the Google Cloud project.
        region (str): The region where the snapshot schedules are located.
    Returns:
        ListPager: A pager for iterating through the list of snapshot schedules.
    """
    client = compute_v1.ResourcePoliciesClient()

    request = compute_v1.ListResourcePoliciesRequest(
        project=project_id,
        region=region,
        filter='status = "READY"',  # Optional filter
    )

    schedules = client.list(request=request)
    return schedules

Describe una programación de capturas

from google.cloud import compute_v1


def snapshot_schedule_get(
    project_id: str, region: str, snapshot_schedule_name: str
) -> compute_v1.ResourcePolicy:
    """
    Retrieves a snapshot schedule for a specified project and region.
    Args:
        project_id (str): The ID of the Google Cloud project.
        region (str): The region where the snapshot schedule is located.
        snapshot_schedule_name (str): The name of the snapshot schedule.
    Returns:
        compute_v1.ResourcePolicy: The retrieved snapshot schedule.
    """
    client = compute_v1.ResourcePoliciesClient()
    schedule = client.get(
        project=project_id, region=region, resource_policy=snapshot_schedule_name
    )
    return schedule

REST

Haz una GET a resourcePolicies.aggregatedList para obtener una lista de las programaciones de capturas de un proyecto.

GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/aggregated/resourcePolicies

Sustituye PROJECT_ID por el nombre del proyecto.

Ver programaciones de capturas por territorio

Para ver las programaciones de instantáneas de un proyecto en una región concreta, usa laGoogle Cloud consola, la CLI de gcloud o la API REST.

Consola

  1. En la Google Cloud consola, ve a la página Snapshots (Capturas).

    Ir a la página Capturas

  2. Selecciona la pestaña Programaciones de instantáneas.
  3. Usa el campo Filtrar para ver las programaciones de las copias de seguridad de una región específica.

gcloud

Para ver las programaciones de instantáneas de un proyecto en una región específica, usa el comando resource-policies list.

gcloud compute resource-policies list PROJECT_ID --filter REGION

Haz los cambios siguientes:

  • PROJECT_ID: nombre del proyecto
  • REGION: la región, por ejemplo, us-west1

REST

Haz una solicitud GET al método resourcePolicies.list para recuperar las programaciones de capturas creadas en una región.

GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/resourcePolicies

Haz los cambios siguientes:

  • PROJECT_ID: nombre del proyecto
  • REGION: la región, por ejemplo, us-west1

Cambiar una programación de capturas

Después de crear una programación de capturas, puede modificar los siguientes campos de forma dinámica mediante el procedimiento Actualizar una programación de capturas:

  • Descripción
  • Programación de capturas
  • Etiquetas aplicadas a las copias creadas
  • Política de eliminación de discos de origen para gestionar las instantáneas generadas automáticamente si se elimina el disco de origen.
  • Política de conservación para definir durante cuánto tiempo se conservarán las capturas generadas a partir de la programación de capturas

Para actualizar otros valores de una programación de capturas, debe eliminarla y crear una nueva, tal como se describe en Sustituir una programación de capturas.

Las actualizaciones de la programación de las instantáneas se aplican en la primera instantánea después de las actualizaciones. Si se está creando una captura cuando actualizas la programación de capturas, los cambios se aplicarán en la siguiente captura.

Actualizar una programación de capturas

Puedes usar la CLI de Google Cloud o la API Compute Engine para cambiar algunas de las propiedades de tu programación de instantáneas, tal como se describe en Cambiar una programación de instantáneas.

Para cambiar otras propiedades de tu programación de instantáneas, usa el método descrito en Sustituir una programación de instantáneas.

Consola

  1. En la Google Cloud consola, ve a la página Snapshots (Capturas).

    Ir a la página Capturas

  2. Selecciona Programaciones de instantáneas para ver una lista de tus programaciones.
  3. Haga clic en el nombre de la programación de la instantánea que quiera modificar.
  4. En la página de detalles de la programación de la instantánea, haz clic en el botón Editar programación.

gcloud

Usa el comando compute resource-policies update para actualizar la descripción, la programación, la política de conservación o las etiquetas de una programación de capturas.

gcloud compute resource-policies update snapshot-schedule SCHEDULE_NAME \
   --region=REGION \
   --description="DESCRIPTION" \
   --snapshot-labels="KEY=VALUE" \
   --max-retention-days=DAYS \
   --on-source-disk-delete=DELETE_OPTION \
   --start-time=START_TIME \
   SCHEDULE_FLAG

Haz los cambios siguientes:

  • SCHEDULE_NAME: el nombre de la programación de la captura.
  • REGION: la región en la que se encuentra tu programación de instantáneas.
  • DESCRIPTION: una descripción de la programación de las capturas. Escribe la descripción entre comillas.
  • KEY y VALUE: un par clave-valor que se puede usar para agrupar recursos relacionados o asociados.
  • DAYS: número máximo de días que se conserva la instantánea antes de eliminarse.
  • DELETE_OPTION: comportamiento de conservación de las copias de seguridad automáticas después de eliminar el disco original. El valor debe ser uno de los siguientes:
    • apply-retention-policy: Cuando se elimine el disco de origen, se seguirá aplicando el periodo de conservación a las capturas creadas por la programación de capturas.
    • keep-auto-snapshots: (Predeterminado) Si se elimina el disco de origen, se conservarán las instantáneas creadas por la programación de instantáneas, independientemente del periodo de retención.
  • START_TIME: la hora de inicio en UTC. La hora debe empezar en punto. Por ejemplo:
    • Las 14:00 (PST) son las 22:00.
    • Si defines una hora de inicio de 22:13, recibirás un error.
  • SCHEDULE_FLAG: una de las siguientes marcas:

    • --hourly-schedule=HOURLY_INTERVAL: el número de horas que transcurren entre cada instantánea. El valor HOURLY_INTERVAL debe ser un número entero comprendido entre 1 y 23. Por ejemplo, si se define --hourly-schedule en 12, la instantánea se genera cada 12 horas.
    • --daily-schedule: hace una captura diaria a las START_TIME
    • --weekly-schedule=WEEKLY_INTERVAL: define el día en el que quieres que se creen las capturas. Debes escribir el día de la semana completo. Los valores no distinguen entre mayúsculas y minúsculas.

    • --weekly-schedule-from-file=FILE_NAME: especifica un archivo que contiene la programación de las copias de seguridad semanales. Puedes especificar programaciones semanales en diferentes días de la semana y a diferentes horas mediante un archivo. Por ejemplo, tu archivo puede especificar una programación de instantáneas para los lunes y los miércoles: none [{"day": "MONDAY", "startTime": "04:00"}, {"day": "WEDNESDAY", "startTime": "02:00"}] Si incluyes una hora de inicio en el archivo, no es necesario que definas la marca --start-time. La programación usa la zona horaria UTC. La hora debe empezar en punto. Por ejemplo:

      • Las 14:00 (PST) son las 22:00.
      • Si defines una hora de inicio de 22:13, recibirás un error.

    Las marcas de frecuencia de instantánea hourly-schedule, daily-schedule, weekly-schedule y weekly-schedule-from-file son mutuamente exclusivas. Solo puedes usar una para tu programación de capturas.

Ejemplos:

Para cambiar una programación de capturas a una programación diaria, sigue estos pasos:

gcloud compute resource-policies update snapshot-schedule SCHEDULE_NAME \
    --region=REGION --daily-schedule --start-time=START_TIME

Para cambiar una captura a una programación horaria y actualizar la descripción y la etiqueta de la captura, sigue estos pasos:

gcloud compute resource-policies update snapshot-schedule SCHEDULE_NAME \
    --region=REGION --description="DESCRIPTION" \
    --hourly-schedule=HOURLY_INTERVAL --start-time=START_TIME \
    --snapshot-labels="KEY=VALUE"

Para cambiar las políticas de conservación de capturas y de eliminación de discos de origen de una programación de capturas, sigue estos pasos:

gcloud compute resource-policies update snapshot-schedule SCHEDULE_NAME \
    --region=REGION --max-retention-days=DAYS \
    --on-source-disk-delete=DELETE_OPTION

Go

import (
	"context"
	"fmt"
	"io"

	compute "cloud.google.com/go/compute/apiv1"
	computepb "cloud.google.com/go/compute/apiv1/computepb"
	"google.golang.org/protobuf/proto"
)

// editSnapshotSchedule edits a snapshot schedule.
func editSnapshotSchedule(w io.Writer, projectID, scheduleName, region string) error {
	// projectID := "your_project_id"
	// snapshotName := "your_snapshot_name"
	// region := "eupore-central2"

	ctx := context.Background()

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

	req := &computepb.PatchResourcePolicyRequest{
		Project:        projectID,
		Region:         region,
		ResourcePolicy: scheduleName,
		ResourcePolicyResource: &computepb.ResourcePolicy{
			Name:        proto.String(scheduleName),
			Description: proto.String("MY HOURLY SNAPSHOT SCHEDULE"),
			SnapshotSchedulePolicy: &computepb.ResourcePolicySnapshotSchedulePolicy{
				Schedule: &computepb.ResourcePolicySnapshotSchedulePolicySchedule{
					HourlySchedule: &computepb.ResourcePolicyHourlyCycle{
						HoursInCycle: proto.Int32(12),
						StartTime:    proto.String("22:00"),
					},
				},
			},
		},
	}
	op, err := snapshotsClient.Patch(ctx, req)
	if err != nil {
		return fmt.Errorf("unable to create snapshot schedule: %w", err)
	}

	if err = op.Wait(ctx); err != nil {
		return fmt.Errorf("unable to wait for the operation: %w", err)
	}

	fmt.Fprint(w, "Snapshot schedule changed\n")

	return nil
}

Java

import com.google.cloud.compute.v1.Operation;
import com.google.cloud.compute.v1.Operation.Status;
import com.google.cloud.compute.v1.PatchResourcePolicyRequest;
import com.google.cloud.compute.v1.ResourcePoliciesClient;
import com.google.cloud.compute.v1.ResourcePolicy;
import com.google.cloud.compute.v1.ResourcePolicySnapshotSchedulePolicy;
import com.google.cloud.compute.v1.ResourcePolicySnapshotSchedulePolicyRetentionPolicy;
import com.google.cloud.compute.v1.ResourcePolicySnapshotSchedulePolicyRetentionPolicy.OnSourceDiskDelete;
import com.google.cloud.compute.v1.ResourcePolicySnapshotSchedulePolicySchedule;
import com.google.cloud.compute.v1.ResourcePolicySnapshotSchedulePolicySnapshotProperties;
import com.google.cloud.compute.v1.ResourcePolicyWeeklyCycle;
import com.google.cloud.compute.v1.ResourcePolicyWeeklyCycleDayOfWeek;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

public class EditSnapshotSchedule {

  public static void main(String[] args) throws Exception {
    // 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 region where your snapshot schedule is located.
    String region = "us-central1";
    // Name of the snapshot schedule you want to update.
    String snapshotScheduleName = "YOUR_SCHEDULE_NAME";

    editSnapshotSchedule(projectId, region, snapshotScheduleName);
  }

  // Edits a snapshot schedule.
  public static Status editSnapshotSchedule(
          String projectId, String region, String snapshotScheduleName)
          throws IOException, InterruptedException, ExecutionException, 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.
    try (ResourcePoliciesClient resourcePoliciesClient = ResourcePoliciesClient.create()) {
      Map<String, String> snapshotLabels = new HashMap<>();
      snapshotLabels.put("key", "value");

      ResourcePolicySnapshotSchedulePolicySnapshotProperties.Builder snapshotProperties =
              ResourcePolicySnapshotSchedulePolicySnapshotProperties.newBuilder();
      snapshotProperties.putAllLabels(snapshotLabels);

      ResourcePolicyWeeklyCycleDayOfWeek dayOfWeek = ResourcePolicyWeeklyCycleDayOfWeek.newBuilder()
              .setDay("Tuesday")
              .setStartTime("09:00")
              .build();
      ResourcePolicyWeeklyCycle weeklySchedule = ResourcePolicyWeeklyCycle.newBuilder()
              .addDayOfWeeks(dayOfWeek)
              .build();

      int maxRetentionDays = 3;

      ResourcePolicySnapshotSchedulePolicyRetentionPolicy.Builder retentionPolicy =
              ResourcePolicySnapshotSchedulePolicyRetentionPolicy.newBuilder();
      retentionPolicy.setOnSourceDiskDelete(OnSourceDiskDelete.APPLY_RETENTION_POLICY.toString());
      retentionPolicy.setMaxRetentionDays(maxRetentionDays);

      String description = "Updated description";

      ResourcePolicy updatedSchedule = ResourcePolicy.newBuilder()
              .setName(snapshotScheduleName)
              .setDescription(description)
              .setSnapshotSchedulePolicy(
                      ResourcePolicySnapshotSchedulePolicy.newBuilder()
                              .setSchedule(ResourcePolicySnapshotSchedulePolicySchedule.newBuilder()
                                      .setWeeklySchedule(weeklySchedule))
                              .setSnapshotProperties(snapshotProperties)
                              .setRetentionPolicy(retentionPolicy.build())
                              .build())
              .build();

      PatchResourcePolicyRequest request = PatchResourcePolicyRequest.newBuilder()
              .setProject(projectId)
              .setRegion(region)
              .setResourcePolicy(snapshotScheduleName)
              .setResourcePolicyResource(updatedSchedule)
              .build();

      Operation response = resourcePoliciesClient.patchAsync(request).get(3, TimeUnit.MINUTES);

      if (response.hasError()) {
        throw new Error("Failed to update snapshot schedule! " + response.getError());
      }
      return response.getStatus();
    }
  }
}

Node.js

// Import the Compute library
const computeLib = require('@google-cloud/compute');
const compute = computeLib.protos.google.cloud.compute.v1;

// Instantiate a resourcePoliciesClient
const resourcePoliciesClient = new computeLib.ResourcePoliciesClient();
// Instantiate a regionOperationsClient
const regionOperationsClient = new computeLib.RegionOperationsClient();

/**
 * TODO(developer): Update/uncomment these variables before running the sample.
 */
// The project name.
const projectId = await resourcePoliciesClient.getProjectId();

// The location of the snapshot schedule resource policy.
// region = 'us-central1';

// The name of the snapshot schedule.
// snapshotScheduleName = 'snapshot-schedule-name';

async function callEditSnapshotSchedule() {
  const [response] = await resourcePoliciesClient.patch({
    project: projectId,
    region,
    resourcePolicy: snapshotScheduleName,
    resourcePolicyResource: compute.ResourcePolicy({
      snapshotSchedulePolicy:
        compute.ResourcePolicyInstanceSchedulePolicySchedule({
          schedule: compute.ResourcePolicySnapshotSchedulePolicySchedule({
            weeklySchedule: compute.ResourcePolicyWeeklyCycle({
              dayOfWeeks: [
                compute.ResourcePolicyWeeklyCycleDayOfWeek({
                  day: 'Tuesday',
                  startTime: '9:00',
                }),
              ],
            }),
          }),
        }),
    }),
  });

  let operation = response.latestResponse;

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

  console.log(`Snapshot schedule: ${snapshotScheduleName} edited.`);
}

await callEditSnapshotSchedule();

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 snapshot_schedule_update(
    project_id: str,
    region: str,
    schedule_name: str,
    schedule_description: str,
    labels: dict,
) -> compute_v1.ResourcePolicy:
    """
    Updates a snapshot schedule for a specified project and region.
    Args:
        project_id (str): The ID of the Google Cloud project.
        region (str): The region where the snapshot schedule is located.
        schedule_name (str): The name of the snapshot schedule to update.
        schedule_description (str): The new description for the snapshot schedule.
        labels (dict): A dictionary of new labels to apply to the snapshot schedule.
    Returns:
        compute_v1.ResourcePolicy: The updated snapshot schedule.
    """

    # Every Monday, starts between 12:00 AM and 1:00 AM
    day = compute_v1.ResourcePolicyWeeklyCycleDayOfWeek(
        day="MONDAY", start_time="00:00"
    )
    weekly_schedule = compute_v1.ResourcePolicyWeeklyCycle(day_of_weeks=[day])

    schedule = compute_v1.ResourcePolicySnapshotSchedulePolicySchedule()
    # You can change the schedule type to daily_schedule, weekly_schedule, or hourly_schedule
    schedule.weekly_schedule = weekly_schedule

    # Autodelete snapshots after 10 days
    retention_policy = compute_v1.ResourcePolicySnapshotSchedulePolicyRetentionPolicy(
        max_retention_days=10
    )
    snapshot_properties = (
        compute_v1.ResourcePolicySnapshotSchedulePolicySnapshotProperties(
            guest_flush=False, labels=labels
        )
    )

    snapshot_policy = compute_v1.ResourcePolicySnapshotSchedulePolicy()
    snapshot_policy.schedule = schedule
    snapshot_policy.retention_policy = retention_policy
    snapshot_policy.snapshot_properties = snapshot_properties

    resource_policy_resource = compute_v1.ResourcePolicy(
        name=schedule_name,
        description=schedule_description,
        snapshot_schedule_policy=snapshot_policy,
    )

    client = compute_v1.ResourcePoliciesClient()
    operation = client.patch(
        project=project_id,
        region=region,
        resource_policy=schedule_name,
        resource_policy_resource=resource_policy_resource,
    )
    wait_for_extended_operation(operation, "Resource Policy updating")

    return client.get(project=project_id, region=region, resource_policy=schedule_name)

REST

Crea una solicitud PATCH al método resourcePolicies para actualizar la descripción, la programación, la política de retención, la política de eliminación del disco de origen o las etiquetas de una programación de instantáneas. En el cuerpo de la solicitud, solo tienes que especificar el name y los campos que quieras actualizar.

  • Cambiar la descripción y la etiqueta:

    PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/resourcePolicies/SCHEDULE_NAME
    {
        "name": "SCHEDULE_NAME",
        "description": "DESCRIPTION",
        "snapshotProperties": {
            "labels": {"KEY": "VALUE"}
        }
    }
    
  • Cambia la programación de las capturas a cada hora:

    PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/resourcePolicies/SCHEDULE_NAME
    {
        "name": "SCHEDULE_NAME",
        "snapshotSchedulePolicy": {
            "schedule": {
              "hourlySchedule": {
                  "hoursInCycle": HOURLY_INTERVAL,
                  "startTime": START_TIME
               }
            }
        }
    }
    
  • Cambia la programación de las capturas a diaria:

    PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/resourcePolicies/SCHEDULE_NAME
    {
        "name": "SCHEDULE_NAME",
        "snapshotSchedulePolicy": {
            "schedule": {
              "dailySchedule": {
                  "daysInCycle": DAILY_INTERVAL,
                  "startTime": START_TIME
               }
            }
        }
    }
    
  • Para cambiar la programación de las capturas a semanal, haz lo siguiente:

    PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/resourcePolicies/SCHEDULE_NAME
    {
        "name": "SCHEDULE_NAME",
        "snapshotSchedulePolicy": {
            "schedule": {
               "weeklySchedule": {
                  "dayOfWeeks": [
                     {
                        "day": WEEKLY_INTERVAL,
                        "startTime": START_TIME
                     }
                  ]
               }
            }
        }
    }
    
  • Cambia la política de conservación de las copias de seguridad:

    PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/resourcePolicies/SCHEDULE_NAME
    {
        "name": "SCHEDULE_NAME",
        "snapshotSchedulePolicy": {
            "retentionPolicy": {
                "maxRetentionDays": DAYS,
                "onSourceDiskDelete":"DELETE_OPTION"
            }
       }
    }
    

Haz los cambios siguientes:

  • PROJECT_ID: el nombre del proyecto.
  • REGION: la región en la que se encuentra la programación de capturas.
  • SCHEDULE_NAME: el nombre de la programación de la captura.
  • DESCRIPTION: una descripción de la programación de las capturas. Escribe la descripción entre comillas.
  • KEY y VALUE: un par clave-valor que se puede usar para agrupar recursos relacionados o asociados.
  • HOURLY_INTERVAL: define el intervalo en el que quieres que se creen las copias. Define la programación horaria con un número entero entre 1 y 23. Para que las copias se creen a la misma hora todos los días, elige un número que divida 24 de forma exacta (1, 2, 3, 4, 6, 8 o 12). Por ejemplo, si se define --hourly-schedule en 12, significa que la instantánea se genera cada 12 horas.
  • DAILY_INTERVAL: define el número de días entre cada instantánea. Para crear una captura cada día, usa el valor 1.
  • WEEKLY_INTERVAL: define una programación que se ejecuta en días específicos de la semana. Especifique uno o varios días. Puede elegir entre las siguientes opciones: MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY y SUNDAY. Debes escribir los días de la semana completos, sin tener en cuenta si son mayúsculas o minúsculas. Puedes definir hasta 7 intervalos para dayOfWeeks, uno para cada día de la semana.
  • START_TIME: la hora de inicio en UTC. La hora debe empezar en punto. Por ejemplo:
    • Las 14:00 (PST) son las 22:00 (UTC).
    • Si defines una hora de inicio de 22:13, recibirás un error.
  • DAYS: número máximo de días que se conserva la instantánea antes de eliminarse.
  • DELETE_OPTION: comportamiento de conservación de las copias de seguridad automáticas después de eliminar el disco original. El valor debe ser uno de los siguientes:
    • APPLY_RETENTION_POLICY: Cuando se elimine el disco de origen, se seguirá aplicando el periodo de conservación a las capturas creadas por la programación de capturas.
    • KEEP_AUTO_SNAPSHOTS: (Predeterminado) Si se elimina el disco de origen, se conservarán las instantáneas creadas por la programación de instantáneas, independientemente del periodo de retención.

Sustituir una programación de capturas

Sigue estos pasos para eliminar la programación de las copias y crear una nueva. Usa este método para modificar las propiedades de la programación de capturas que no se pueden cambiar con el procedimiento actualizar una programación de capturas.

Si va a sustituir una programación de instantáneas que ya está asociada a un disco, primero debe desasociar la programación del disco y eliminarla. Después, puedes crear una nueva programación y adjuntarla al disco.

Las capturas generadas a partir de la programación de capturas independientes no se gestionarán con la nueva política. Esas copias se conservarán indefinidamente hasta que las elimines.

Usa la Google Cloud consola, gcloud CLI o REST para quitar y sustituir tu programación de instantáneas.

Consola

  1. En la Google Cloud consola, ve a la página Discos.

    Ir a la página Discos

  2. Selecciona el disco que tenga la programación que quieras separar.
  3. En la página Gestionar disco, haz clic en Editar. Puede que primero tengas que hacer clic en el menú Más acciones.
  4. Abre el menú desplegable Programación de la instantánea.
  5. Haz clic en Sin programación para separar la programación del disco.
  6. Puedes crear una nueva programación o cambiarla mientras editas las opciones del disco.
  7. Haz clic en Guardar para completar la tarea.

gcloud

  1. Usa el comando gcloud disks remove-resource-policies para separar la programación de capturas del disco con la programación que quieras cambiar.

    gcloud compute disks remove-resource-policies DISK_NAME \
        --resource-policies SCHEDULE_NAME \
        --region REGION \
        --zone ZONE
    

    Haz los cambios siguientes:

    • DISK_NAME: el nombre del disco con la programación de instantáneas adjunta
    • SCHEDULE_NAME: el nombre de la programación de instantáneas que quieres separar de este disco
    • REGION: la región en la que reside tu programación de instantáneas
    • ZONE: la zona en la que se encuentra tu disco zonal
  2. Usa el comando gcloud disks add-resource-policies para añadir la nueva programación de instantáneas al disco.

    gcloud compute disks add-resource-policies DISK_NAME \
         --resource-policies SCHEDULE_NAME \
         --zone ZONE
    

    Haz los cambios siguientes:

    • DISK_NAME: el nombre del disco con la política de recursos de la programación de capturas
    • SCHEDULE_NAME: el nombre de la programación de instantáneas que quieras añadir a este disco
    • ZONE: la zona en la que se encuentra tu disco

REST

  1. Desconecta la programación de la captura actual de un disco creando una solicitud POST a disks.removeResourcePolicies.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/disks/DISK_NAME/removeResourcePolicies
    
    {
      "resourcePolicies": [
         "regions/REGION/resourcePolicies/SCHEDULE_NAME"
      ]
    }
    

    Haz los cambios siguientes:

    • PROJECT_ID: nombre del proyecto
    • ZONE: la zona en la que reside el disco
    • DISK_NAME: el nombre del disco con la programación de instantáneas asociada
    • REGION: la ubicación de la programación de las copias de seguridad
    • SCHEDULE_NAME: el nombre de la programación de la captura que vas a eliminar de este disco
  2. Asocia la nueva programación de instantáneas al disco creando una solicitud POST al método disks.addResourcePolicies.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/disks/DISK_NAME/addResourcePolicies
    
    {
      "resourcePolicies": [
        "regions/REGION/resourcePolicies/SCHEDULE_NAME"
      ]
    }
    

    Haz los cambios siguientes:

    • PROJECT_ID: nombre del proyecto
    • ZONE: la ubicación del disco
    • DISK_NAME: el nombre del disco
    • REGION: la ubicación de la programación de las copias de seguridad
    • SCHEDULE_NAME: el nombre de la programación de instantáneas que vas a aplicar a este disco

Eliminar una programación de capturas

Si eliminas una programación de capturas, todas las capturas generadas automáticamente asociadas a ella se conservarán de forma permanente. Sin embargo, una vez que se elimina la programación, ya no se pueden generar instantáneas.

Tu política de conservación forma parte de tu programación de instantáneas. Una vez que se elimine la programación, tu política de conservación dejará de aplicarse. Las capturas que ya se han generado se conservan de forma permanente hasta que las eliminas manualmente.

Para eliminar una programación de snapshots, usa laGoogle Cloud consola, la CLI de Google Cloud o el método de la API de Compute Engine. Si la programación ya está asociada a un disco, primero desasocia la programación del disco y, a continuación, elimina la programación. No puedes eliminar una programación de instantáneas que esté vinculada a un disco.

Consola

  1. En la Google Cloud consola, ve a la página Snapshots (Capturas).

    Ir a la página Capturas

  2. Selecciona Programaciones de instantáneas para ver una lista de tus programaciones.
  3. Selecciona cualquier programación que no esté asociada a un disco.
  4. Haz clic en Eliminar.

gcloud

Para eliminar una programación de capturas, usa el comando resource-policies delete.

gcloud compute resource-policies delete SCHEDULE_NAME \
    --region REGION

Haz los cambios siguientes:

  • SCHEDULE_NAME: el nombre de la programación de capturas
  • REGION: la ubicación de la programación de las copias de seguridad

Go

import (
	"context"
	"fmt"
	"io"

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

// deleteSnapshotSchedule deletes a snapshot schedule.
func deleteSnapshotSchedule(w io.Writer, projectID, scheduleName, region string) error {
	// projectID := "your_project_id"
	// snapshotName := "your_snapshot_name"
	// region := "eupore-central2"

	ctx := context.Background()

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

	req := &computepb.DeleteResourcePolicyRequest{
		Project:        projectID,
		Region:         region,
		ResourcePolicy: scheduleName,
	}
	op, err := snapshotsClient.Delete(ctx, req)
	if err != nil {
		return fmt.Errorf("unable to delete snapshot schedule: %w", err)
	}

	if err = op.Wait(ctx); err != nil {
		return fmt.Errorf("unable to wait for the operation: %w", err)
	}

	fmt.Fprint(w, "Snapshot schedule deleted\n")

	return nil
}

Java

import com.google.cloud.compute.v1.DeleteResourcePolicyRequest;
import com.google.cloud.compute.v1.Operation;
import com.google.cloud.compute.v1.Operation.Status;
import com.google.cloud.compute.v1.ResourcePoliciesClient;
import java.io.IOException;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

public class DeleteSnapshotSchedule {
  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 region where your snapshot schedule is located.
    String region = "us-central1";
    // Name of the snapshot schedule you want to delete.
    String snapshotScheduleName = "YOUR_SCHEDULE_NAME";

    deleteSnapshotSchedule(projectId, region, snapshotScheduleName);
  }

  // Deletes a snapshot schedule policy.
  public static Status deleteSnapshotSchedule(
          String projectId, String region, String snapshotScheduleName)
          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.
    try (ResourcePoliciesClient resourcePoliciesClient = ResourcePoliciesClient.create()) {
      DeleteResourcePolicyRequest request = DeleteResourcePolicyRequest.newBuilder()
              .setProject(projectId)
              .setRegion(region)
              .setResourcePolicy(snapshotScheduleName)
              .build();
      Operation response = resourcePoliciesClient.deleteAsync(request).get(3, TimeUnit.MINUTES);

      if (response.hasError()) {
        throw new Error("Snapshot schedule deletion failed! " + response.getError());
      }
      return response.getStatus();
    }
  }
}

Node.js

// Import the Compute library
const computeLib = require('@google-cloud/compute');

// Instantiate a resourcePoliciesClient
const resourcePoliciesClient = new computeLib.ResourcePoliciesClient();
// Instantiate a regionOperationsClient
const regionOperationsClient = new computeLib.RegionOperationsClient();

/**
 * TODO(developer): Update/uncomment these variables before running the sample.
 */
// The project name.
const projectId = await resourcePoliciesClient.getProjectId();

// The location of the snapshot schedule resource policy.
// region = 'us-central1';

// The name of the snapshot schedule.
// snapshotScheduleName = 'snapshot-schedule-name'

async function callDeleteSnapshotSchedule() {
  // If the snapshot schedule is already attached to a disk, you will receive an error.
  const [response] = await resourcePoliciesClient.delete({
    project: projectId,
    region,
    resourcePolicy: snapshotScheduleName,
  });

  let operation = response.latestResponse;

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

  console.log(`Snapshot schedule: ${snapshotScheduleName} deleted.`);
}

await callDeleteSnapshotSchedule();

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 snapshot_schedule_delete(
    project_id: str, region: str, snapshot_schedule_name: str
) -> None:
    """
    Deletes a snapshot schedule for a specified project and region.
    Args:
        project_id (str): The ID of the Google Cloud project.
        region (str): The region where the snapshot schedule is located.
        snapshot_schedule_name (str): The name of the snapshot schedule to delete.
    Returns:
        None
    """
    client = compute_v1.ResourcePoliciesClient()
    operation = client.delete(
        project=project_id, region=region, resource_policy=snapshot_schedule_name
    )
    wait_for_extended_operation(operation, "Resource Policy deletion")

REST

Para eliminar una programación de capturas, haz una solicitud DELETE al método resourcePolicies.delete. Si la programación de instantáneas ya está asociada a un disco, se producirá un error.

DELETE https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/resourcePolicies/SCHEDULE_NAME

Haz los cambios siguientes:

  • PROJECT_ID: nombre del proyecto
  • REGION: la ubicación de la programación de las copias de seguridad
  • SCHEDULE_NAME: el nombre de la programación de capturas

Almacenamiento de registros y monitorización

Cada instantánea programada asociada a un disco crea continuamente un evento del sistema, que se monitoriza y registra en todo momento. Los registros de auditoría de los eventos del sistema están siempre habilitados.

Estos registros proporcionan información sobre el comportamiento de las instantáneas programadas de cada disco asociado. Puedes ver tus registros en el menú Logging de la Google Cloud consola.

Para obtener más información sobre cómo usar el Explorador de registros, consulta el artículo Ver registros con el Explorador de registros.

Consola

  1. En la Google Cloud consola, ve a la página Explorador de registros.

    Ir a la página Explorador de registros

  2. En la lista desplegable Todos los recursos, coloca el cursor sobre Disco y selecciona Todos los disk_id.

  3. En la lista desplegable Todos los registros, selecciona cloudaudit.googleapis.com/system_event y haz clic en Aceptar.

  4. En la lista desplegable Cualquier nivel de registro, selecciona el tipo de registro.

Siguientes pasos