Reservierungen löschen


In diesem Dokument wird erläutert, wie Sie Reservierungen löschen. Informationen zum Löschen zukünftiger Reservierungsanfragen finden Sie unter Zukünftige Reservierungsanfragen abbrechen oder löschen.

Löschen Sie eine Reservierung, um keine Gebühren mehr für reservierte Ressourcen zu zahlen, die Sie nicht mehr benötigen.

Beschränkungen

Beachten Sie Folgendes, bevor Sie eine Reservierung löschen:

  • Sie können eine freigegebene Reservierung nur in dem Projekt löschen, in dem Sie sie erstellt haben.

  • Sie können eine spezifisch ausgerichtete Reservierung nur löschen, wenn sie von keiner Compute Engine-Instanz verwendet wird. Wenn Instanzen die Reservierung nutzen, haben Sie vor dem Löschen folgende Möglichkeiten:

    • Instanzen löschen

    • Beenden oder anhalten der Instanzen

  • Sie können eine automatisch erstellte Reservierung für eine vorausschauende Reservierung erst nach Ablauf des Reservierungszeitraums löschen.

  • Sie können eine Reservierung, die mit einer Zusicherung verbunden ist, nur löschen, wenn Sie sie zuerst durch Ersetzen der Reservierung aufheben.

Hinweise

Erforderliche Rollen

Bitten Sie Ihren Administrator, Ihnen die IAM-Rolle Compute-Administrator (roles/compute.admin) für das Projekt zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Löschen von Reservierungen benötigen. Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.

Diese vordefinierte Rolle enthält die Berechtigung compute.reservations.delete, die zum Löschen von Reservierungen erforderlich ist.

Sie können diese Berechtigung auch mit benutzerdefinierten Rollen oder anderen vordefinierten Rollen erhalten.

Eine Reservierung löschen

Wenn Sie eine Reservierung löschen, die automatisch von allen übereinstimmenden Compute-Instanzen genutzt werden kann, laufen alle Instanzen, die die gelöschte Reservierung nutzen, weiter. Für diese Instanzen fallen weiterhin Kosten an.

Sie können einzelne oder mehrere Reservierungen gleichzeitig löschen. Für mehrere Reservierungen verwenden Sie die Google Cloud Console. Wählen Sie für einzelne Reservierungen eine der folgenden Optionen aus:

Console

  1. Öffnen Sie in der Google Cloud Console die Seite Reservierungen.

    Zu „Reservierungen“

  2. Wählen Sie auf dem Tab On-Demand-Reservierungen (Standard) die Reservierungen aus, die Sie löschen möchten.

  3. Klicken Sie auf Löschen.

  4. Klicken Sie zur Bestätigung auf Löschen.

gcloud

Verwenden Sie den Befehl gcloud compute reservations delete, um eine Reservierung zu löschen:

gcloud compute reservations delete RESERVATION_NAME \
    --zone=ZONE

Ersetzen Sie Folgendes:

  • RESERVATION_NAME: der Name der Reservierung.

  • ZONE: die Zone, in der sich die Reservierung befindet.

Go

import (
	"context"
	"fmt"
	"io"

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

// Deletes the reservation for given project and zone
func deleteReservation(w io.Writer, projectID, zone, reservationName string) error {
	// projectID := "your_project_id"
	// zone := "us-west3-a"
	// reservationName := "your_reservation_name"

	ctx := context.Background()
	reservationsClient, err := compute.NewReservationsRESTClient(ctx)
	if err != nil {
		return err
	}
	defer reservationsClient.Close()

	req := &computepb.DeleteReservationRequest{
		Project:     projectID,
		Reservation: reservationName,
		Zone:        zone,
	}

	op, err := reservationsClient.Delete(ctx, req)
	if err != nil {
		return fmt.Errorf("unable to delete reservation: %w", err)
	}

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

	fmt.Fprintf(w, "Reservation deleted\n")

	return nil
}

Java

import com.google.cloud.compute.v1.DeleteReservationRequest;
import com.google.cloud.compute.v1.Operation;
import com.google.cloud.compute.v1.ReservationsClient;
import java.io.IOException;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

public class DeleteReservation {

  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 reservation you want to delete.
    String reservationName = "YOUR_RESERVATION_NAME";
    // Name of the zone.
    String zone = "us-central1-a";

    deleteReservation(projectId, zone, reservationName);
  }

  // Delete a reservation from the project.
  public static void deleteReservation(String projectId, String zone, String reservationName)
      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 (ReservationsClient reservationsClient = ReservationsClient.create()) {

      DeleteReservationRequest deleteReservationRequest = DeleteReservationRequest.newBuilder()
          .setProject(projectId)
          .setZone(zone)
          .setReservation(reservationName)
          .build();

      Operation response = reservationsClient.deleteAsync(
          deleteReservationRequest).get(5, TimeUnit.MINUTES);

      if (response.getStatus() == Operation.Status.DONE) {
        System.out.println("Deleted reservation: " + reservationName);
      }
    }
  }
}

Node.js

// Import the Compute library
const computeLib = require('@google-cloud/compute');
// Instantiate a reservationsClient
const reservationsClient = new computeLib.ReservationsClient();
// Instantiate a zoneOperationsClient
const zoneOperationsClient = new computeLib.ZoneOperationsClient();
/**
 * TODO(developer): Update/uncomment these variables before running the sample.
 */
// The ID of the project where your reservation is located.
const projectId = await reservationsClient.getProjectId();
// The zone where your reservation is located.
const zone = 'us-central1-a';
// The name of the reservation to delete.
// reservationName = 'reservation-01';

async function callDeleteReservation() {
  // Delete the reservation
  const [response] = await reservationsClient.delete({
    project: projectId,
    reservation: reservationName,
    zone,
  });

  let operation = response.latestResponse;

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

  console.log(`Reservation: ${reservationName} deleted.`);
}
await callDeleteReservation();

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_compute_reservation(
    project_id: str,
    zone: str = "us-central1-a",
    reservation_name="your-reservation-name",
) -> ExtendedOperation:
    """
    Deletes a compute reservation in Google Cloud.
    Args:
        project_id (str): The ID of the Google Cloud project.
        zone (str): The zone of the reservation.
        reservation_name (str): The name of the reservation to delete.
    Returns:
        The operation response from the reservation deletion request.
    """

    client = compute_v1.ReservationsClient()

    operation = client.delete(
        project=project_id,
        zone=zone,
        reservation=reservation_name,
    )

    wait_for_extended_operation(operation, "Reservation deletion")
    print(operation.status)
    # Example response:
    # Status.DONE
    return operation

REST

Wenn Sie eine Reservierung löschen möchten, senden Sie eine DELETE-Anfrage an die Methode reservation.delete:

DELETE https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/reservations/RESERVATION_NAME

Ersetzen Sie Folgendes:

  • PROJECT_ID: die ID des Projekts, in dem Sie die Reservierung erstellt haben.

  • ZONE: die Zone, in der sich die Reservierung befindet.

  • RESERVATION_NAME: der Name der Reservierung.

Nächste Schritte