Freigegebene Reservierung erstellen


In diesem Dokument wird erläutert, wie Sie freigegebene Reservierungen erstellen, die über mehrere Projekte hinweg freigegeben werden, und wie Sie festlegen, welche Projekte in Ihrer Organisation die freigegebenen Reservierungen nutzen können.

Eine freigegebene Reservierung kann von dem Projekt, von dem die Reservierung gehostet wird (Inhaberprojekt), und von den Projekten, für die die Reservierung freigegeben wird (Nutzerprojekte), verwendet werden. Verwenden Sie freigegebene Reservierungen, wenn Ihre Organisation mehrere Projekte hat, die VM-Instanzen mit denselben reservierten Attributen benötigen. Mit freigegebenen Reservierungen können Sie die Auslastung Ihrer Reservierungen verbessern und die Anzahl der Reservierungen verringern, die Sie erstellen und verwalten müssen. Informationen zu Reservierungen finden Sie unter Zonale Reservierungen von Compute Engine-Ressourcen.

Weitere Methoden zum Erstellen von Reservierungen finden Sie stattdessen auf den folgenden Seiten:

  • Wenn Sie im aktuellen Projekt 1- oder 3-Jahres-Zusicherungen haben, erhalten Ihre reservierten Ressourcen automatisch alle anwendbaren Rabatte für zugesicherte Nutzung (CUDs). Sie können eine Reservierung auch erstellen und an eine Zusicherung anhängen, wenn Sie die Zusicherung erwerben. Weitere Informationen finden Sie unter Reservierungen an Zusicherungen anhängen.

  • Informationen zum Erstellen einer Reservierung, die nur von einem einzelnen Projekt verwendet werden kann, finden Sie unter Reservierung für ein einzelnes Projekt erstellen.

Hinweise

  • Informationen zu den Anforderungen und Einschränkungen für Reservierungen
  • Informationen zu den Kontingentanforderungen und Einschränkungen für freigegebene Reservierungen.
  • Das Projekt, für das Sie freigegebene Reservierungen erstellen, muss der Zulassungsliste für die Organisationsrichtlinieneinschränkung der Inhaberprojekte für freigegebene Reservierungen (compute.sharedReservationsOwnerProjects) von einem Richtlinienadministrator hinzugefügt werden. Diese Zulassungsliste ist standardmäßig leer, sodass Sie freigegebene Reservierungen erst erstellen können, wenn Ihre Organisation diese Berechtigung für ein oder mehrere Projekte erteilt hat. Weitere Informationen zum Aufrufen und Bearbeiten der Organisationsrichtlinieneinschränkung finden Sie unter Erstellen und Ändern von freigegebenen Reservierungen für Projekte zulassen und beschränken in diesem Dokument.
  • Richten Sie die Authentifizierung ein, falls Sie dies noch nicht getan haben. Bei der Authentifizierung wird Ihre Identität für den Zugriff auf Google Cloud-Dienste und APIs überprüft. Zur Ausführung von Code oder Beispielen aus einer lokalen Entwicklungsumgebung können Sie sich bei Compute Engine authentifizieren. Wählen Sie dazu eine der folgenden Optionen aus:

    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. Install the Google Cloud CLI, then initialize it by running the following command:

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

      Wenn Sie die Terraform-Beispiele auf dieser Seite in einer lokalen Entwicklungsumgebung verwenden möchten, installieren und initialisieren Sie die gcloud CLI und richten dann die Standardanmeldedaten für Anwendungen mit Ihren Nutzeranmeldedaten ein.

      1. Install the Google Cloud CLI.
      2. To initialize the gcloud CLI, run the following command:

        gcloud init
      3. 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.

      Weitere Informationen unter Set up authentication for a local development environment.

      Go

      Wenn Sie die Go Beispiele auf dieser Seite in einer lokalen Entwicklungsumgebung verwenden möchten, installieren und initialisieren Sie die gcloud CLI und richten dann die Standardanmeldedaten für Anwendungen mit Ihren Nutzeranmeldedaten ein.

      1. Install the Google Cloud CLI.
      2. To initialize the gcloud CLI, run the following command:

        gcloud init
      3. 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.

      Weitere Informationen unter Set up authentication for a local development environment.

      Java

      Wenn Sie die Java Beispiele auf dieser Seite in einer lokalen Entwicklungsumgebung verwenden möchten, installieren und initialisieren Sie die gcloud CLI und richten dann die Standardanmeldedaten für Anwendungen mit Ihren Nutzeranmeldedaten ein.

      1. Install the Google Cloud CLI.
      2. To initialize the gcloud CLI, run the following command:

        gcloud init
      3. 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.

      Weitere Informationen unter Set up authentication for a local development environment.

      Node.js

      Wenn Sie die Node.js Beispiele auf dieser Seite in einer lokalen Entwicklungsumgebung verwenden möchten, installieren und initialisieren Sie die gcloud CLI und richten dann die Standardanmeldedaten für Anwendungen mit Ihren Nutzeranmeldedaten ein.

      1. Install the Google Cloud CLI.
      2. To initialize the gcloud CLI, run the following command:

        gcloud init
      3. 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.

      Weitere Informationen unter Set up authentication for a local development environment.

      Python

      Wenn Sie die Python Beispiele auf dieser Seite in einer lokalen Entwicklungsumgebung verwenden möchten, installieren und initialisieren Sie die gcloud CLI und richten dann die Standardanmeldedaten für Anwendungen mit Ihren Nutzeranmeldedaten ein.

      1. Install the Google Cloud CLI.
      2. To initialize the gcloud CLI, run the following command:

        gcloud init
      3. 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.

      Weitere Informationen unter Set up authentication for a local development environment.

      REST

      Verwenden Sie die von der gcloud CLI bereitgestellten Anmeldedaten, um die REST API-Beispiele auf dieser Seite in einer lokalen Entwicklungsumgebung zu verwenden.

        Install the Google Cloud CLI, then initialize it by running the following command:

        gcloud init

      Weitere Informationen finden Sie unter Für die Verwendung von REST authentifizieren in der Dokumentation zur Google Cloud-Authentifizierung.

Erforderliche Rollen

Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Erstellen gemeinsam genutzter Reservierungen benötigen:

Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.

Diese vordefinierten Rollen enthalten die Berechtigungen, die zum Erstellen freigegebener Reservierungen erforderlich sind. Erweitern Sie den Abschnitt Erforderliche Berechtigungen, um die erforderlichen Berechtigungen anzuzeigen:

Erforderliche Berechtigungen

Die folgenden Berechtigungen sind erforderlich, um freigegebene Reservierungen zu erstellen:

  • compute.reservations.create für das Projekt
  • So rufen Sie Organisationsrichtlinien auf: orgpolicy.policy.get für die Organisation
  • So bearbeiten Sie Organisationsrichtlinien: orgpolicy.policy.set für die Organisation
  • So geben Sie eine Instanzvorlage an: compute.instanceTemplates.useReadOnly für die Instanzvorlage

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

Best Practices

Die folgenden Best Practices für das Erstellen freigegebener Reservierungen werden empfohlen. Befolgen Sie diese, um die Verwaltung und Auslastung freigegebener Reservierungen in Ihrer Organisation zu optimieren.

  • Das Inhaberprojekt soll die gemeinsame Reservierung erstellen, sie aber nicht nutzen.
    • Um die Ausgaben auf Projekte zu verteilen, sollten Nutzerprojekte nur eine gemeinsame Reservierung nutzen. Das Inhaberprojekt sollte nur zum Erstellen der freigegebenen Reservierung verwendet werden.
    • Beim Erstellen einer freigegebenen Reservierung muss das Inhaberprojekt ein ausreichendes Kontingent für die Gesamtzahl der zu reservierenden Ressourcen haben. Nach dem Erstellen der Reservierung muss das Inhaberprojekt ein Kontingent für alle reservierten Ressourcen haben, die es nutzen möchte. Weitere Informationen finden Sie unter Zusätzliche Kontingentanforderungen für freigegebene Reservierungen.
  • Minimieren Sie die Anzahl der Projekte in Ihrer Organisation, für die freigegebene Reservierungen erstellt werden können. Sie können dies über die Organisationsrichtlinieneinschränkung für "Inhaberprojekte für freigegebene Reservierungen" (compute.sharedReservationsOwnerProjects) steuern.
    • Sie können nur die Reservierungen auflisten, die für ein Projekt erstellt wurden. Dies bedeutet, dass freigegebene Reservierungen nur in dem Inhaberprojekt aufgelistet werden. Sie können keine Reservierungen auflisten, die für ein Projekt freigegeben wurden, oder alle freigegebenen Reservierungen in einer Organisation. Daher ist es hilfreich, mit nur wenigen Inhaberprojekten zu arbeiten, damit das Überwachen und Verwalten der freigegebenen Reservierungen einfacher wird.
    • Beschränken Sie die Freigabe einer freigegebenen Reservierung auf wenige Projekte, um das Kontingent der reservierten Ressourcen leichter zu verwalten.
    • Weitere Informationen finden Sie unter Erstellen und Ändern von freigegebenen Reservierungen für Projekte zulassen und beschränken.
  • Minimieren Sie die Anzahl einzelner freigegebener Reservierungen mit identischen VM-Attributen.
    • Eine Organisation kann bis zu 100 freigegebene Reservierungen für jede einmalige Kombination von VM-Attributen haben. Wenn Sie die Anzahl der freigegebenen Reservierungen mit identischen VM-Attributen gering halten, lässt sich diese Beschränkung einfacher einhalten.
    • Weniger freigegebene Reservierungen verbessern die Verwaltung.
  • Geben Sie nur Reservierungen zwischen Projekten mit demselben Cloud-Rechnungskonto frei.
    • Beschränken Sie jede freigegebene Reservierung so, dass sie nur für Nutzerprojekte freigegeben wird, die dasselbe Cloud-Rechnungskonto wie das Inhaberprojekt haben. So können Sie einfacher feststellen, ob eine Reservierung genutzt wurde und wie sie abgerechnet wurde.
    • Wenn Sie die CUD-Freigabe aktiviert haben und Anspruch auf CUDs auf der Ebene des Cloud-Rechnungskontos haben, können Sie die folgenden Limits für die CUDs maximieren, die Sie für Ihre genutzten Reservierungen erhalten, um Ihre freigegebenen Reservierungen für das Cloud-Rechnungskonto dieser Zusicherung zu begrenzen. Auf diese Weise können Sie eine konsistente Abrechnung für Projekte gewährleisten, die freigegebene Reservierungen erstellen und nutzen.
  • Prüfen Sie bei zukünftigen Reservierungsanfragen die Gesamtzahl der VMs, die Sie anfordern.
    • Wenn Sie eine Anfrage für eine zukünftige Reservierung erhalten, sollten Sie eineGesamtzahl von VMs gewährleisten, die Folgendes berücksichtigen:
      • Alle übereinstimmenden reservierten VMs, die zum zukünftigen Zeitpunkt bereits existieren werden
      • Alle übereinstimmenden nicht reservierten VMs, die zu einem zukünftigen Zeitpunkt bereits existieren werden
      • Alle übereinstimmenden nicht verwendeten On-Demand-Reservierungen, die zu dem zukünftigen Datum bereits existieren werden
      • Die Erhöhung der Nutzung, die Sie zu einem zukünftigen Zeitpunkt reservieren möchten

      Angenommen, Sie benötigen zu einem späteren Zeitpunkt 10 zusätzliche VMs und Sie verfügen zu diesem Zeitpunkt bereits über die folgenden Ressourcen:

      • 40 übereinstimmende reservierte VMs
      • 50 übereinstimmende nicht reservierte VMs

      oder

      • 40 übereinstimmende reservierte VMs
      • 50 übereinstimmende nicht verwendete On-Demand-Reservierungen

      Da Ihre vorhandene Nutzung in der Zukunft bereits bis zu 90 übereinstimmende VMs und Reservierungen hinzufügt und Sie zusätzliche 10 VMs benötigen, müssen Sie in Ihrer zukünftigen Reservierungsanfrage eine Gesamtzahl von 100 angeben.

      Weitere Informationen finden Sie unter Reservierte Ressourcen zählen und bereitstellen.

Erstellen und Ändern von freigegebenen Reservierungen für Projekte zulassen und beschränken

Standardmäßig können freigegebene Reservierungen in einer Organisation nicht für einzelne Projekte erstellt oder geändert werden. Fügen Sie der Organisationsrichtlinieneinschränkung für Inhaberprojekte für freigegebene Reservierungen (compute.sharedReservationsOwnerProjects) die Projekte hinzu, denen für die freigegebene Reservierungen erstellt oder geändert werden sollen. Weitere Informationen zu Organisationsrichtlinieneinschränkungen finden Sie unter Einführung in den Organisationsrichtliniendienst.

Führen Sie die folgenden Schritte aus, um die Organisationsrichtlinieneinschränkung für Inhaberprojekte für freigegebene Reservierungen (compute.sharedReservationsOwnerProjects) aufzurufen und zu bearbeiten.

Organisationsrichtlinieneinschränkung für freigegebene Reservierungen aufrufen

Mit der Google Cloud Console oder mit der gcloud CLI können Sie feststellen, für welche Projekte freigegebene Reservierungen erstellt und geändert werden können.

Console

Führen Sie die Schritte unter Organisationsrichtlinien aufrufen aus, um die Einschränkung für Inhaberprojekte für freigegebene Reservierungen zu verwenden.

gcloud

So ermitteln Sie, für welche Projekte die Einschränkung compute.sharedReservationsOwnerProjects das Erstellen und Ändern freigegebener Reservierungen zulässt:

  1. Laden Sie die Richtlinie für Ihre Organisation als Datei mit dem Namen policy.yaml mithilfe des Befehls gcloud resource-manager org-policies describe herunter:

    gcloud resource-manager org-policies describe compute.sharedReservationsOwnerProjects --organization=ORGANIZATION_ID > policy.yaml
    

    Ersetzen Sie ORGANIZATION_ID durch die Organisations-ID Ihrer Organisation.

  2. Öffnen Sie die Datei policy.yaml mit einem Texteditor und rufen Sie die Einschränkung compute.sharedReservationsOwnerProjects auf. Die Projekte, für die freigegebene Reservierungen erstellt und geändert werden können, werden unter den zugehörigen allowedValues aufgelistet:

    ...
    constraint: constraints/compute.sharedReservationsOwnerProjects
    listPolicy:
      allowedValues:
      - projects/PROJECT_NUMBER_1
      - projects/PROJECT_NUMBER_2
      - projects/PROJECT_NUMBER_3
    ...
    

    Dabei sind PROJECT_NUMBER_1, PROJECT_NUMBER_2 und PROJECT_NUMBER_3 die Projektnummern der einzigen Projekte in Ihrer Organisation, für die freigegebene Reservierungen erstellt und geändert werden können.

  3. Optional: Löschen Sie die Datei policy.yaml.

    • Wenn Sie ein Linux- oder macOS-Terminal verwenden, verwenden Sie den folgenden Befehl:

      rm policy.yaml
      
    • Wenn Sie ein Windows-Terminal verwenden, verwenden Sie den folgenden Befehl:

      del policy.yaml
      

Organisationsrichtlinieneinschränkung für freigegebene Reservierungen bearbeiten

Mit der Google Cloud Console oder der gcloud CLI können Sie festlegen, für welche Projekte freigegebene Reservierungen erstellt und geändert werden können.

Console

Führen Sie die Schritte unter Richtlinien für Listeneinschränkungen anpassen mit der Einschränkung Inhaberprojekte für freigegebene Reservierungen aus.

gcloud

Mit einer der folgenden Methoden können Sie bearbeiten, für welche Projekte die Einschränkung compute.sharedReservationsOwnerProjects das Erstellen und Ändern freigegebener Reservierungen zulässt:

  • Verwenden Sie den Befehl gcloud resource-manager org-policies allow, um einem einzelnen Projekt die Berechtigung zum Erstellen und Ändern freigegebener Reservierungen zu erteilen. Sie können diesen Befehl für jedes Projekt wiederholen, dem Sie diese Berechtigung erteilen möchten.

    gcloud resource-manager org-policies allow compute.sharedReservationsOwnerProjects projects/PROJECT_NUMBER \
        --organization=ORGANIZATION_ID
    

    Ersetzen Sie Folgendes:

    • PROJECT_NUMBER: die Projektnummer (nicht die Projekt-ID) eines Projekts in Ihrer Organisation, für das Sie freigegebene Reservierungen erstellen und ändern möchten.
    • ORGANIZATION_ID: die Organisations-ID Ihrer Organisation.
  • Wenn Sie die Berechtigungen zum Erstellen und Ändern freigegebener Reservierungen mehreren Projekte erteilen oder entziehen möchten, ersetzen Sie die Einschränkung der Organisationsrichtlinie:

    1. Laden Sie die Richtlinie für Ihre Organisation als Datei mit dem Namen policy.yaml mithilfe des Befehls gcloud resource-manager org-policies describe herunter:

      gcloud resource-manager org-policies describe compute.sharedReservationsOwnerProjects --organization=ORGANIZATION_ID > policy.yaml
      

      Ersetzen Sie ORGANIZATION_ID durch die Organisations-ID Ihrer Organisation.

    2. Verwenden Sie einen Texteditor, um die Datei policy.yaml so zu ändern, dass die Einschränkung compute.sharedReservationsOwnerProjects unter allowedValues alle Projekte auflistet, die Sie zum Erstellen und Ändern von gemeinsamen Reservierungen zulassen möchten.

      • Fügen Sie für jedes Projekt, dem Sie die Berechtigung zum Erstellen und Ändern freigegebener Reservierungen gewähren möchten, das Projekt in einer neuen Zeile unter allowedValues hinzu.
      • Löschen Sie für jedes Projekt, für das Sie die Berechtigung zum Erstellen und Ändern freigegebener Reservierungen widerrufen möchten, die entsprechende Projektzeile.

      Wenn Sie fertig sind, sollte die Datei policy.yaml in etwa so aussehen:

      ...
      constraint: constraints/compute.sharedReservationsOwnerProjects
      listPolicy:
        allowedValues:
        - projects/PROJECT_NUMBER_1
        - projects/PROJECT_NUMBER_2
        - projects/PROJECT_NUMBER_3
      ...
      

      Dabei sind PROJECT_NUMBER_1, PROJECT_NUMBER_2 und PROJECT_NUMBER_3 die Projektnummern (nicht die Projekt-IDs) aller Projekte in Ihrer Organisation, die Sie zum Erstellen und Ändern gemeinsamer Reservierungen berechtigen möchten.

    3. Speichern Sie die Datei policy.yaml und schließen Sie den Editor.

    4. Verwenden Sie den Befehl gcloud resource-manager org-policies set-policy, um die Richtlinie für Ihre Organisation mit Ihren Änderungen zu aktualisieren:

      gcloud resource-manager org-policies set-policy --organization=ORGANIZATION_ID policy.yaml
      

      Ersetzen Sie ORGANIZATION_ID durch die Organisations-ID Ihrer Organisation.

    5. Optional: Löschen Sie die Datei policy.yaml.

      • Wenn Sie ein Linux- oder macOS-Terminal verwenden, verwenden Sie den folgenden Befehl:

        rm policy.yaml
        
      • Wenn Sie ein Windows-Terminal verwenden, verwenden Sie den folgenden Befehl:

        del policy.yaml
        

Es kann einige Minuten dauern, bis die Änderung wirksam wird.

Freigegebene Reservierung erstellen

In diesem Abschnitt wird erläutert, wie Sie freigegebene Reservierungen erstellen. Nachdem Sie eine freigegebene Reservierung erstellt haben, kann diese nur für das Inhaberprojekt geändert werden, die Ressourcen für eine freigegebene Reservierung können jedoch vom Inhaberprojekt oder von Nutzerprojekten verwendet werden.

Zum Verarbeiten einer Reservierung muss eine VM Attribute haben, die genau mit dieser Reservierung übereinstimmen. Wählen Sie einen der folgenden Abschnitte in diesem Dokument aus, um die Attribute der VMs anzugeben, die Sie reservieren möchten:

  • Empfohlen: Instanzvorlage angeben

    In diesem Abschnitt wird erläutert, wie Sie die Attribute einer Reservierung mithilfe einer freigegebenen Instanzvorlage definieren. Mithilfe einer Instanzvorlage können Sie die Attribute einer Reservierung und die VMs definieren, die die Reservierung an derselben Stelle nutzen können. Da Vorlagen jedoch projektspezifisch sind, können Sie nicht dieselbe Vorlage zum Erstellen von VMs verwenden, die die Reservierung außerhalb des Projekts nutzen können, für das die Reservierung erstellt wurde. Für die Projekte, für die die Reservierung freigegeben ist, müssen Sie ähnliche Vorlagen in diesen Projekten erstellen oder VMs erstellen, indem Sie Attribute direkt angeben.

  • Vorhandene VM angeben

    In diesem Abschnitt wird erläutert, wie Sie die Attribute einer Reservierung mithilfe einer vorhandenen VM definieren. Wenn Sie die Attribute einer vorhandenen VM verwenden, können Sie die Reservierung nutzen, indem Sie VMs mit Attributen erstellen, die mit der Referenz-VM übereinstimmen.

  • Attribute direkt angeben

    In diesem Abschnitt wird erläutert, wie Sie die Attribute einer freigegebenen Reservierung direkt definieren können. Bei dieser Methode müssen Sie manuell prüfen, ob die Attribute Ihrer VMs und Reservierungen exakt übereinstimmen –alle nicht übereinstimmenden Attribute verhindern die Nutzung.

Standardmäßig kann eine Reservierung automatisch von allen VMs mit Attributen genutzt werden, die mit der Reservierung übereinstimmen. Wenn Sie die Nutzung von Reservierungen steuern möchten, haben Sie folgende Möglichkeiten:

Instanzvorlage angeben

Achten Sie auf Folgendes, bevor Sie eine Reservierung durch Angabe einer Instanzvorlage erstellen:

  • Eine Instanzvorlage enthält projektspezifische Einstellungen, sodass Sie nur auf eine Instanzvorlage im selben Projekt zugreifen und diese verwenden können. Wenn Sie eine freigegebene Reservierung durch Angabe einer Instanzvorlage erstellen, können Sie diese Vorlage nicht zum Erstellen von VMs verwenden, die die Reservierung außerhalb des Projekts nutzen können, für das die Reservierung erstellt wurde.

  • Erstellen Sie Ihre Reservierung in derselben Region und Zone wie die Ressourcen in der Instanzvorlage. In einer Instanzvorlage angegebene regionale oder zonale Ressourcen, z. B. ein Maschinentyp oder eine Persistent Disk, beschränken die Nutzung der Vorlage auf die Standorte, an denen diese Ressourcen vorhanden sind. Wenn Ihre Instanzvorlage beispielsweise eine vorhandene Persistent Disk-Volume in Zone us-central1-a angibt, können Sie Ihre Reservierung nur in derselben Zone erstellen. Wenn Sie prüfen möchten, ob eine vorhandene Vorlage Ressourcen enthält, die die Vorlage an eine bestimmte Region oder Zone binden, rufen Sie die Details der Vorlage auf und suchen Sie nach Verweisen auf regionale oder zonale Ressourcen, die darin enthalten sind.

Wenn Sie durch Angabe einer Instanzvorlage eine freigegebene Reservierung erstellen möchten, wählen Sie eine der folgenden Optionen aus:

Console

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

    Zu „Reservierungen“

    Die Seite Reservierungen wird angezeigt.

  2. Klicken Sie auf Reservierung erstellen.

    Die Seite Reservierung erstellen wird angezeigt.

  3. Geben Sie unter Name einen Namen für die Reservierung ein.

  4. Wählen Sie unter Region und Zone aus, wo Sie Ressourcen reservieren möchten.

  5. Führen Sie im Abschnitt Freigabetyp folgende Schritte aus:

    1. Wählen Sie Freigegeben aus, um eine freigegebene Reservierung anzugeben.

    2. Klicken Sie auf Projekte hinzufügen und wählen Sie die Projekte aus der Organisation des aktuellen Projekts aus, für die Sie die Reservierung freigeben möchten. Sie können bis zu 100 Nutzerprojekte auswählen.

  6. Optional: Wenn Sie zulassen möchten, dass eine Reservierung von GPU-VMs von benutzerdefinierten Trainingsjobs oder Vorhersagejobs in Vertex AI genutzt wird, wählen Sie im Abschnitt Google Cloud-Dienste die Option Reservierung freigeben aus.

  7. Wählen Sie im Abschnitt Mit VM-Instanz verwenden eine der folgenden Optionen:

    • Damit übereinstimmende VM-Instanzen diese Reservierung automatisch verwenden können, wählen Sie Reservierung automatisch verwenden aus, falls diese Option noch nicht ausgewählt ist.

    • Wenn Sie die Ressourcen der Reservierung nur zum Erstellen übereinstimmender VMs verbrauchen möchten, die ausdrücklich namentlich auf diese Reservierung abzielen, klicken Sie auf Spezifische Reservierung auswählen.

  8. Geben Sie unter Anzahl der VM-Instanzen die Anzahl der VMs ein, die Sie reservieren möchten.

  9. Wählen Sie im Abschnitt Maschinenkonfiguration die Option Instanzvorlage verwenden und dann die gewünschte Instanzvorlage aus. Wenn Sie eine regionale Instanzvorlage auswählen, können Sie Ressourcen nur innerhalb der Region der Vorlage reservieren.

  10. Im Abschnitt Automatisch löschen können Sie die Option zum automatischen Löschen aktivieren, damit Compute Engine die Reservierung zu einem bestimmten Datum und einer bestimmten Uhrzeit automatisch löscht. Das automatische Löschen von Reservierungen kann nützlich sein, um unnötige Gebühren zu vermeiden, wenn Sie die Reservierung nicht mehr nutzen.

  11. Klicken Sie zum Erstellen der Reservierung auf Erstellen.

    Die Seite Reservierungen wird geöffnet. Das Erstellen der freigegebenen Reservierung kann bis zu einer Minute dauern.

gcloud

Verwenden Sie zum Erstellen einer freigegebenen Reservierung den Befehl gcloud compute reservations create mit den Flags --share-setting=projects und --share-with.

Führen Sie den folgenden Befehl aus, um eine freigegebene Reservierung durch Angabe einer Instanzvorlage ohne optionale Flags zu erstellen:

gcloud compute reservations create RESERVATION_NAME \
    --share-setting=projects \
    --share-with=CONSUMER_PROJECT_IDS \
    --source-instance-template=projects/PROJECT_ID/LOCATION/instanceTemplates/INSTANCE_TEMPLATE_NAME \
    --vm-count=NUMBER_OF_VMS \
    --zone=ZONE

Ersetzen Sie Folgendes:

  • RESERVATION_NAME: der Name der Reservierung, die erstellt werden soll.

  • PROJECT_ID: die ID des Projekts, in dem Sie Ressourcen reservieren möchten und in dem sich die Instanzvorlage befindet.

  • CONSUMER_PROJECT_IDS: eine durch Kommas getrennte Liste von IDs von Projekten, die diese Reservierung nutzen können, z. B. project-1,project-2. Sie können bis zu 100 Nutzerprojekte hinzufügen. Diese Projekte müssen sich in derselben Organisation wie das Inhaberprojekt befinden. Geben Sie nicht das Inhaberprojekt an. Standardmäßig darf sie die Reservierung bereits nutzen.

  • LOCATION: der Speicherort der Instanzvorlage. Geben Sie einen der folgenden Werte an:

    • Für eine globale Instanzvorlage: global

    • Für eine regionale Instanzvorlage: regions/REGION. Ersetzen Sie REGION durch die Region, in der sich die Instanzvorlage befindet. Wenn Sie eine regionale Instanzvorlage angeben, können Sie VMs nur innerhalb der Region reservieren, in der sich die Vorlage befindet.

  • INSTANCE_TEMPLATE_NAME: der Name einer vorhandenen Instanzvorlage. Wenn in der Instanzvorlage ein A3-Maschinentyp angegeben ist, müssen Sie das Flag --require-specific-reservation angeben. Dies bedeutet, dass nur VMs, die spezifisch auf diese Reservierung abzielen, sie nutzen können. Weitere Informationen finden Sie unter VMs aus einer bestimmten Reservierung nutzen.

  • NUMBER_OF_VMS: die Anzahl der zu reservierenden VMs.

  • ZONE: die Zone, in der Ressourcen reserviert werden sollen.

Wenn Sie beispielsweise eine Reservierung durch Angabe einer globalen Instanzvorlage in Zone us-central1-a erstellen möchten, geben Sie die Reservierung für die Projekte project-1 und project-2 frei und reservieren Sie zehn VMs, die jeweils einen N2-vordefinierten Maschinentyp mit 4 vCPUs verwenden. Führen Sie den folgenden Befehl aus:

gcloud compute reservations create my-reservation \
    --share-setting=projects \
    --share-with=project-1,project-2 \
    --source-instance-template=projects/example-project/global/example-instance-template \
    --vm-count=10 \
    --zone=us-central1-a

Optional können Sie eine oder mehrere der folgenden Optionen angeben:

  • Wenn Sie angeben möchten, dass nur VMs, die speziell auf diese Reservierung abzielen, sie verbrauchen können, fügen Sie das Flag --require-specific-reservation ein.

    gcloud compute reservations create RESERVATION_NAME \
        --require-specific-reservation \
        --share-setting=projects \
        --share-with=CONSUMER_PROJECT_IDS \
        --source-instance-template=projects/PROJECT_ID/LOCATION/instanceTemplates/INSTANCE_TEMPLATE_NAME \
        --vm-count=NUMBER_OF_VMS \
        --zone=ZONE
    
  • Wenn Sie zulassen möchten, dass eine Reservierung von GPU-VMs von benutzerdefinierten Trainingsjobs oder Vorhersagejobs in Vertex AI genutzt wird, verwenden Sie den Befehl gcloud beta compute reservations create mit dem Flag --reservation-sharing-policy=ALLOW_ALL.

    gcloud beta compute reservations create RESERVATION_NAME \
        --reservation-sharing-policy=ALLOW_ALL \
        --share-setting=projects \
        --share-with=CONSUMER_PROJECT_IDS \
        --source-instance-template=projects/PROJECT_ID/LOCATION/instanceTemplates/INSTANCE_TEMPLATE_NAME \
        --vm-count=NUMBER_OF_VMS \
        --zone=ZONE
    
  • Wählen Sie eine der folgenden Methoden aus, damit Compute Engine die Reservierung automatisch löschen kann:

    • Verwenden Sie den Befehl gcloud beta compute reservations create mit dem Flag --delete-at-time, um die Reservierung zu einem bestimmten Datum und einer bestimmten Uhrzeit zu löschen.

      gcloud beta compute reservations create RESERVATION_NAME \
          --delete-at-time=DELETE_AT_TIME \
          --share-setting=projects \
          --share-with=CONSUMER_PROJECT_IDS \
          --source-instance-template=projects/PROJECT_ID/LOCATION/instanceTemplates/INSTANCE_TEMPLATE_NAME \
          --vm-count=NUMBER_OF_VMS \
          --zone=ZONE
      

      Ersetzen Sie DELETE_AT_TIME durch einen RFC 3339-Zeitstempel für Datum und Uhrzeit, der so aussehen muss:

      YYYY-MM-DDTHH:MM:SSOFFSET
      

      Ersetzen Sie Folgendes:

      • YYYY-MM-DD: ein Datum, formatiert als vierstelliges Jahr, zweistelliger Monat und zweistelliger Tag des Monats und durch Bindestriche (-) getrennt.

      • HH:MM:SS: eine Uhrzeit, die als zweistellige Stundenzahl im 24-Stunden-Format, zweistellige Minuten und zweistellige Sekunden formatiert und durch Doppelpunkte getrennt (:) ist.

      • OFFSET: die Zeitzone, formatiert als Versatz von der koordinierten Weltzeit (Coordinated Universal Time, UTC). Wenn Sie beispielsweise Pacific Standard Time (PST) verwenden möchten, geben Sie -08:00 an. Wenn Sie keinen Versatz verwenden möchten, geben Sie Z an.

    • Verwenden Sie den Befehl gcloud beta compute reservations create mit dem Flag --delete-after-duration, um die Reservierung nach einer bestimmten Dauer zu löschen.

      gcloud beta compute reservations create RESERVATION_NAME \
          --delete-after-duration=DELETE_AFTER_DURATION \
          --share-setting=projects \
          --share-with=CONSUMER_PROJECT_IDS \
          --source-instance-template=projects/PROJECT_ID/LOCATION/instanceTemplates/INSTANCE_TEMPLATE_NAME \
          --vm-count=NUMBER_OF_VMS \
          --zone=ZONE
      

      Ersetzen Sie DELETE_AFTER_DURATION durch eine Dauer in Tagen, Stunden, Minuten oder Sekunden. Geben Sie beispielsweise 30m für 30 Minuten oder 1d2h3m4s für 1 Tag, 2 Stunden, 3 Minuten und 4 Sekunden an.

Go

import (
	"context"
	"fmt"
	"io"

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

// Creates shared reservation from given template in particular zone
func createSharedReservation(w io.Writer, client ClientInterface, projectID, baseProjectId, zone, reservationName, sourceTemplate string) error {
	// client, err := compute.NewReservationsRESTClient(ctx)
	// projectID := "your_project_id". Destination of sharing.
	// baseProjectId := "your_project_id2". Project where the reservation will be created.
	// zone := "us-west3-a"
	// reservationName := "your_reservation_name"
	// sourceTemplate: existing template path. Following formats are allowed:
	//  	- projects/{project_id}/global/instanceTemplates/{template_name}
	//  	- projects/{project_id}/regions/{region}/instanceTemplates/{template_name}
	//  	- https://www.googleapis.com/compute/v1/projects/{project_id}/global/instanceTemplates/instanceTemplate
	//  	- https://www.googleapis.com/compute/v1/projects/{project_id}/regions/{region}/instanceTemplates/instanceTemplate

	ctx := context.Background()

	shareSettings := map[string]*computepb.ShareSettingsProjectConfig{
		projectID: {ProjectId: proto.String(projectID)},
	}

	req := &computepb.InsertReservationRequest{
		Project: baseProjectId,
		ReservationResource: &computepb.Reservation{
			Name: proto.String(reservationName),
			Zone: proto.String(zone),
			SpecificReservation: &computepb.AllocationSpecificSKUReservation{
				Count:                  proto.Int64(2),
				SourceInstanceTemplate: proto.String(sourceTemplate),
			},
			ShareSettings: &computepb.ShareSettings{
				ProjectMap: shareSettings,
				ShareType:  proto.String("SPECIFIC_PROJECTS"),
			},
		},
		Zone: zone,
	}

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

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

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

	return nil
}

Java

import com.google.cloud.compute.v1.AllocationSpecificSKUReservation;
import com.google.cloud.compute.v1.Operation;
import com.google.cloud.compute.v1.Reservation;
import com.google.cloud.compute.v1.ReservationsClient;
import com.google.cloud.compute.v1.ShareSettings;
import com.google.cloud.compute.v1.ShareSettingsProjectConfig;
import java.io.IOException;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

public class CreateSharedReservation {
  private final ReservationsClient reservationsClient;

  // Constructor to inject the ReservationsClient
  public CreateSharedReservation(ReservationsClient reservationsClient) {
    this.reservationsClient = reservationsClient;
  }

  public static void main(String[] args)
      throws IOException, ExecutionException, InterruptedException, TimeoutException {
    // TODO(developer): Replace these variables before running the sample.
    // The ID of the project where you want to reserve resources
    // and where the instance template exists.
    // By default, no projects are allowed to create or modify shared reservations
    // in an organization. Add projects to the Shared Reservations Owner Projects
    // (compute.sharedReservationsOwnerProjects) organization policy constraint
    // to allow them to create and modify shared reservations.
    // For more information visit this page:
    // https://cloud.google.com/compute/docs/instances/reservations-shared#shared_reservation_constraint
    String projectId = "YOUR_PROJECT_ID";
    // Zone in which the reservation resides.
    String zone = "us-central1-a";
    // Name of the reservation to be created.
    String reservationName = "YOUR_RESERVATION_NAME";
    // The URI of the global instance template to be used for creating the reservation.
    String instanceTemplateUri = String.format(
        "projects/%s/global/instanceTemplates/YOUR_INSTANCE_TEMPLATE_NAME", projectId);
    // Number of instances for which capacity needs to be reserved.
    int vmCount = 3;
    // In your main method, create ReservationsClient
    ReservationsClient client = ReservationsClient.create();
    // Create an instance of your class, passing in the client
    CreateSharedReservation creator = new CreateSharedReservation(client);

    creator.createSharedReservation(projectId, zone, reservationName, instanceTemplateUri, vmCount);
  }

  // Creates a shared reservation with the given name in the given zone.
  public void createSharedReservation(
      String projectId, String zone,
      String reservationName, String instanceTemplateUri, int vmCount)
      throws ExecutionException, InterruptedException, TimeoutException {

    ShareSettings shareSettings = ShareSettings.newBuilder()
        .setShareType(String.valueOf(ShareSettings.ShareType.SPECIFIC_PROJECTS))
        // The IDs of projects that can consume this reservation. You can include up to 100
        // consumer projects. These projects must be in the same organization as
        // the owner project. Don't include the owner project. By default, it is already allowed
        // to consume the reservation.
        .putProjectMap("CONSUMER_PROJECT_ID_1", ShareSettingsProjectConfig.newBuilder().build())
        .putProjectMap("CONSUMER_PROJECT_ID_2", ShareSettingsProjectConfig.newBuilder().build())
        .build();

    // Create the reservation.
    Reservation reservation =
        Reservation.newBuilder()
            .setName(reservationName)
            .setZone(zone)
            .setSpecificReservationRequired(true)
            .setShareSettings(shareSettings)
            .setSpecificReservation(
                AllocationSpecificSKUReservation.newBuilder()
                    .setCount(vmCount)
                    .setSourceInstanceTemplate(instanceTemplateUri)
                    .build())
            .build();

    // Wait for the create reservation operation to complete.
    Operation response =
        this.reservationsClient.insertAsync(projectId, zone, reservation).get(3, TimeUnit.MINUTES);

    if (response.hasError()) {
      System.out.println("Reservation creation failed!" + response);
      return;
    }
    System.out.println("Reservation created. Operation Status: " + response.getStatus());
  }
}

Node.js

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

/**
 * TODO(developer): Uncomment reservationsClient and zoneOperationsClient before running the sample.
 */
// Instantiate a reservationsClient
// reservationsClient = new computeLib.ReservationsClient();
// Instantiate a zoneOperationsClient
// zoneOperationsClient = new computeLib.ZoneOperationsClient();

/**
 * TODO(developer): Update these variables before running the sample.
 */
// The ID of the project where you want to reserve resources and where the instance template exists.
const projectId = await reservationsClient.getProjectId();
// The zone in which to reserve resources.
const zone = 'us-central1-a';
// The name of the reservation to create.
const reservationName = 'reservation-01';
// The number of VMs to reserve.
const vmsNumber = 3;
// The name of an existing instance template.
const instanceTemplateName = 'global-instance-template-name';
// The location of the instance template.
const location = 'global';

async function callCreateComputeSharedReservation() {
  // Create reservation for 3 VMs in zone us-central1-a by specifying a instance template.
  const specificReservation = new compute.AllocationSpecificSKUReservation({
    count: vmsNumber,
    sourceInstanceTemplate: `projects/${projectId}/${location}/instanceTemplates/${instanceTemplateName}`,
  });

  // Create share settings. Share reservation with one customer project.
  const shareSettings = new compute.ShareSettings({
    shareType: 'SPECIFIC_PROJECTS',
    projectMap: {
      // The IDs of projects that can consume this reservation. You can include up to 100 consumer projects.
      // These projects must be in the same organization as the owner project.
      // Don't include the owner project. By default, it is already allowed to consume the reservation.
      consumer_project_id: {
        projectId: 'consumer_project_id',
      },
    },
  });

  // Create a reservation.
  const reservation = new compute.Reservation({
    name: reservationName,
    specificReservation,
    specificReservationRequired: true,
    shareSettings,
  });

  const [response] = await reservationsClient.insert({
    project: projectId,
    reservationResource: reservation,
    zone,
  });

  let operation = response.latestResponse;

  // Wait for the create 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} created.`);
  return response;
}

return await callCreateComputeSharedReservation();

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 create_compute_shared_reservation(
    project_id: str,
    zone: str = "us-central1-a",
    reservation_name="your-reservation-name",
    shared_project_id: str = "shared-project-id",
) -> compute_v1.Reservation:
    """Creates a compute reservation in GCP.
    Args:
        project_id (str): The ID of the Google Cloud project.
        zone (str): The zone to create the reservation.
        reservation_name (str): The name of the reservation to create.
        shared_project_id (str): The ID of the project that the reservation is shared with.
    Returns:
        Reservation object that represents the new reservation.
    """

    instance_properties = compute_v1.AllocationSpecificSKUAllocationReservedInstanceProperties(
        machine_type="n1-standard-1",
        # Optional. Specifies amount of local ssd to reserve with each instance.
        local_ssds=[
            compute_v1.AllocationSpecificSKUAllocationAllocatedInstancePropertiesReservedDisk(
                disk_size_gb=375, interface="NVME"
            ),
        ],
    )

    reservation = compute_v1.Reservation(
        name=reservation_name,
        specific_reservation=compute_v1.AllocationSpecificSKUReservation(
            count=3,  # Number of resources that are allocated.
            # If you use source_instance_template, you must exclude the instance_properties field.
            # It can be a full or partial URL.
            # source_instance_template="projects/[PROJECT_ID]/global/instanceTemplates/my-instance-template",
            instance_properties=instance_properties,
        ),
        share_settings=compute_v1.ShareSettings(
            share_type="SPECIFIC_PROJECTS",
            project_map={
                shared_project_id: compute_v1.ShareSettingsProjectConfig(
                    project_id=shared_project_id
                )
            },
        ),
    )

    # Create a client
    client = compute_v1.ReservationsClient()

    operation = client.insert(
        project=project_id,
        zone=zone,
        reservation_resource=reservation,
    )
    wait_for_extended_operation(operation, "Reservation creation")

    reservation = client.get(
        project=project_id, zone=zone, reservation=reservation_name
    )
    shared_project = next(iter(reservation.share_settings.project_map.values()))

    print("Name: ", reservation.name)
    print("STATUS: ", reservation.status)
    print("SHARED PROJECT: ", shared_project)
    # Example response:
    # Name:  your-reservation-name
    # STATUS:  READY
    # SHARED PROJECT:  project_id: "123456789012"

    return reservation

REST

Senden Sie zum Erstellen einer freigegebenen Reservierung eine POST-Anfrage an die Methode reservations.insert. Geben Sie im Anfragetext Folgendes an:

  • Das Feld projectMap.

  • Das Feld shareType ist auf SPECIFIC_PROJECTS gesetzt.

Wenn Sie beispielsweise eine freigegebene Reservierung erstellen möchten, indem Sie eine Instanzvorlage ohne optionale Felder angeben und die Reservierung für zwei Nutzerprojekte freigeben, stellen Sie die folgende POST-Anfrage:

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

{
  "name": "RESERVATION_NAME",
  "shareSettings": {
    "shareType": "SPECIFIC_PROJECTS",
    "projectMap": {
      "CONSUMER_PROJECT_ID_1": {
        "projectId": "CONSUMER_PROJECT_ID_1"
      },
      "CONSUMER_PROJECT_ID_2": {
        "projectId": "CONSUMER_PROJECT_ID_2"
      }
    }
  },
  "specificReservation": {
    "count": "NUMBER_OF_VMS",
    "sourceInstanceTemplate": "projects/PROJECT_ID/LOCATION/instanceTemplates/INSTANCE_TEMPLATE_NAME"
  }
}

Ersetzen Sie Folgendes:

  • PROJECT_ID: die ID des Projekts, in dem Sie Ressourcen reservieren möchten und in dem sich die Instanzvorlage befindet.

  • ZONE: die Zone, in der Ressourcen reserviert werden sollen.

  • RESERVATION_NAME: der Name der Reservierung, die erstellt werden soll.

  • CONSUMER_PROJECT_ID_1 und CONSUMER_PROJECT_ID_2: die IDs von Projekten, die diese Reservierung verwenden können. Sie können bis zu 100 Nutzerprojekte hinzufügen. Diese Projekte müssen sich in derselben Organisation wie das Inhaberprojekt befinden. Geben Sie nicht das Inhaberprojekt an. Standardmäßig darf diese Reservierung bereits genutzt werden.

  • NUMBER_OF_VMS: die Anzahl der zu reservierenden VMs.

  • LOCATION: der Speicherort der Instanzvorlage. Geben Sie einen der folgenden Werte an:

    • Für eine globale Instanzvorlage: global

    • Für eine regionale Instanzvorlage: regions/REGION. Ersetzen Sie REGION durch die Region, in der sich die Instanzvorlage befindet. Wenn Sie eine regionale Instanzvorlage angeben, können Sie VMs nur innerhalb der Region reservieren, in der sich die Vorlage befindet.

  • INSTANCE_TEMPLATE_NAME: der Name einer vorhandenen Instanzvorlage. Wenn in der Instanzvorlage ein A3-Maschinentyp angegeben ist, müssen Sie das Feld specificReservationRequired in den Anfragetext aufnehmen und auf true festlegen. Dies bedeutet, dass nur VMs, die spezifisch auf diese Reservierung abzielen, sie nutzen können. Weitere Informationen finden Sie unter VMs aus einer bestimmten Reservierung nutzen.

So erstellen Sie beispielsweise eine Reservierung für zehn VMs in Zone us-central1-a, indem Sie eine globale Instanzvorlage angeben und die Reservierung für Projekte project-1 und project-2 freigeben. Nehmen Sie folgende POST-Anfrage vor:

POST https://compute.googleapis.com/compute/v1/projects/example-project/zones/us-central1-a/reservations

{
  "name": "my-reservation",
  "shareSettings": {
    "shareType": "SPECIFIC_PROJECTS",
    "projectMap": {
      "project-1": {
        "projectId": "project-1"
      },
      "project-2": {
        "projectId": "project-2"
      }
    }
  },
  "specificReservation": {
    "count": "10",
    "sourceInstanceTemplate": "projects/example-project/global/instanceTemplates/example-instance-template"
  }
}

Optional können Sie eine oder mehrere der folgenden Optionen angeben:

  • Wenn Sie angeben möchten, dass nur VMs, die ausdrücklich auf diese Reservierung abzielen, diese verbrauchen können, fügen Sie das Feld specificReservationRequired im Anfragetext ein und legen Sie dafür das Feld auf true fest.

    Wenn Sie beispielsweise eine bestimmte Reservierung erstellen möchten, indem Sie eine Instanzvorlage angeben, und die Reservierung für zwei Nutzerprojekte freigeben, stellen Sie so eine Anfrage:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/reservations
    
    {
      "name": "RESERVATION_NAME",
      "shareSettings": {
        "shareType": "SPECIFIC_PROJECTS",
        "projectMap": {
          "CONSUMER_PROJECT_ID_1": {
            "projectId": "CONSUMER_PROJECT_ID_1"
          },
          "CONSUMER_PROJECT_ID_2": {
            "projectId": "CONSUMER_PROJECT_ID_2"
          }
        }
      },
      "specificReservation": {
        "count": "NUMBER_OF_VMS",
        "sourceInstanceTemplate": "projects/PROJECT_ID/LOCATION/instanceTemplates/INSTANCE_TEMPLATE_NAME"
      },
      "specificReservationRequired": true
    }
    
  • Wenn Sie zulassen möchten, dass eine Reservierung von GPU-VMs von benutzerdefinierten Trainingsjobs oder Vorhersagejobs in Vertex AI genutzt wird, senden Sie eine POST-Anfrage an die beta.reservations.insert-Methode. Fügen Sie im Anfragetext das Feld serviceShareType ein und legen Sie es auf ALLOW_ALL fest.

    POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE/reservations
    
    {
      "name": "RESERVATION_NAME",
      "reservationSharingPolicy": {
        "serviceShareType": "ALLOW_ALL"
      },
      "shareSettings": {
        "shareType": "SPECIFIC_PROJECTS",
        "projectMap": {
          "CONSUMER_PROJECT_ID_1": {
            "projectId": "CONSUMER_PROJECT_ID_1"
          },
          "CONSUMER_PROJECT_ID_2": {
            "projectId": "CONSUMER_PROJECT_ID_2"
          }
        }
      },
      "specificReservation": {
        "count": "NUMBER_OF_VMS",
        "sourceInstanceTemplate": "projects/PROJECT_ID/LOCATION/instanceTemplates/INSTANCE_TEMPLATE_NAME"
      }
    }
    
  • Wählen Sie eine der folgenden Methoden aus, damit Compute Engine die Reservierung automatisch löschen kann:

    • Wenn Sie die Reservierung zu einem bestimmten Datum und einer bestimmten Uhrzeit löschen möchten, stellen Sie eine POST-Anfrage an die Methode beta.reservations.insert. Geben Sie im Anfragetext das Feld deleteAtTime an.

      Wenn Sie beispielsweise eine Reservierung erstellen möchten, indem Sie eine Instanzvorlage angeben, die Reservierung zu einem bestimmten Datum und einer bestimmten Uhrzeit automatisch löschen und die Reservierung für zwei Nutzerprojekte freigeben, stellen Sie so eine Anfrage:

      POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE/reservations
      
      {
        "deleteAtTime": "DELETE_AT_TIME",
        "name": "RESERVATION_NAME",
        "shareSettings": {
          "shareType": "SPECIFIC_PROJECTS",
          "projectMap": {
            "CONSUMER_PROJECT_ID_1": {
              "projectId": "CONSUMER_PROJECT_ID_1"
            },
            "CONSUMER_PROJECT_ID_2": {
              "projectId": "CONSUMER_PROJECT_ID_2"
            }
          }
        },
        "specificReservation": {
          "count": "NUMBER_OF_VMS",
          "sourceInstanceTemplate": "projects/PROJECT_ID/LOCATION/instanceTemplates/INSTANCE_TEMPLATE_NAME"
        }
      }
      

      Ersetzen Sie DELETE_AT_TIME durch einen RFC 3339-Zeitstempel für Datum und Uhrzeit, der so aussehen muss:

      YYYY-MM-DDTHH:MM:SSOFFSET
      

      Ersetzen Sie Folgendes:

      • YYYY-MM-DD: ein Datum, formatiert als vierstelliges Jahr, zweistelliger Monat und zweistelliger Tag des Monats und durch Bindestriche (-) getrennt.

      • HH:MM:SS: eine Uhrzeit, die als zweistellige Stundenzahl im 24-Stunden-Format, zweistellige Minuten und zweistellige Sekunden formatiert und durch Doppelpunkte getrennt (:) ist.

      • OFFSET: die Zeitzone, formatiert als Versatz von der koordinierten Weltzeit (Coordinated Universal Time, UTC). Wenn Sie beispielsweise Pacific Standard Time (PST) verwenden möchten, geben Sie -08:00 an. Wenn Sie keinen Versatz verwenden möchten, geben Sie Z an.

    • Wenn Sie die Reservierung nach einer bestimmten Dauer löschen möchten, senden Sie eine POST-Anfrage an die Methode beta.reservations.insert. Geben Sie im Anfragetext das Feld deleteAfterDuration an.

      Wenn Sie beispielsweise eine Reservierung erstellen, indem Sie eine Instanzvorlage angeben, die Reservierung nach einer bestimmten Dauer automatisch löschen und die Reservierung für zwei Nutzerprojekte freigeben möchten, stellen Sie eine Anfrage wie die folgende:

      POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE/reservations
      
      {
        "deleteAfterDuration": {
          "seconds": "DELETE_AFTER_DURATION"
        },
        "name": "RESERVATION_NAME",
        "shareSettings": {
          "shareType": "SPECIFIC_PROJECTS",
          "projectMap": {
            "CONSUMER_PROJECT_ID_1": {
              "projectId": "CONSUMER_PROJECT_ID_1"
            },
            "CONSUMER_PROJECT_ID_2": {
              "projectId": "CONSUMER_PROJECT_ID_2"
            }
          }
        },
        "specificReservation": {
          "count": "NUMBER_OF_VMS",
          "sourceInstanceTemplate": "projects/PROJECT_ID/LOCATION/instanceTemplates/INSTANCE_TEMPLATE_NAME"
        }
      }
      

      Ersetzen Sie DELETE_AFTER_DURATION durch die Dauer in Sekunden. Geben Sie beispielsweise 86400 für 86.400 Sekunden (1 Tag) an.

Vorhandene VM angeben

Sie können eine freigegebene Reservierung nur auf der Grundlage einer vorhandenen VM im selben Projekt und in derselben Zone wie die VM erstellen.

Nachdem Sie die Reservierung erstellt haben, können Sie sie nutzen, indem Sie VMs mit Attributen erstellen, die mit der Referenz-VM übereinstimmen. Dazu können Sie eines der folgenden Dinge tun:

So erstellen Sie eine freigegebene Reservierung, bei der die Eigenschaften einer vorhandenen VM verwendet werden:

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

    Zu „Reservierungen“

  2. Klicken Sie auf dem Tab On-Demand-Reservierungen (Standard) auf Reservierung erstellen.

    Die Seite Reservierung erstellen wird geöffnet.

  3. Geben Sie unter Name einen Namen für die Reservierung ein.

  4. Wählen Sie unter Region und Zone aus, wo Sie Ressourcen reservieren möchten.

  5. Führen Sie im Abschnitt Freigabetyp folgende Schritte aus:

    1. Wählen Sie Freigegeben aus, um eine freigegebene Reservierung anzugeben.

    2. Klicken Sie auf Projekte hinzufügen und wählen Sie die Projekte aus der Organisation des aktuellen Projekts aus, für die Sie die Reservierung freigeben möchten. Sie können bis zu 100 Nutzerprojekte auswählen.

  6. Wählen Sie im Abschnitt Mit VM-Instanz verwenden eine der folgenden Optionen:

    • Damit übereinstimmende VMs diese Reservierung automatisch verwenden können, wählen Sie Reservierung automatisch verwenden aus, falls diese Option noch nicht ausgewählt ist.

    • Wenn Sie die Ressourcen der Reservierung nur zum Erstellen übereinstimmender VMs verbrauchen möchten, die ausdrücklich namentlich auf diese Reservierung abzielen, klicken Sie auf Spezifische Reservierung auswählen.

  7. Geben Sie unter Anzahl der VM-Instanzen die Anzahl der VMs ein, die Sie reservieren möchten.

  8. Führen Sie im Abschnitt Maschinenkonfiguration die folgenden Schritte aus:

    1. Wählen Sie Vorhandene VM verwenden aus.

    2. Wählen Sie unter Vorhandene VM die VM mit den Attributen aus, die Sie zum Erstellen der Reservierung verwenden möchten.

  9. Im Abschnitt Automatisch löschen können Sie die Option zum automatischen Löschen aktivieren, damit Compute Engine die Reservierung zu einem bestimmten Datum und einer bestimmten Uhrzeit automatisch löscht. Das automatische Löschen von Reservierungen kann nützlich sein, um unnötige Gebühren zu vermeiden, wenn Sie die Reservierung nicht mehr nutzen.

  10. Klicken Sie zum Erstellen der Reservierung auf Erstellen.

    Die Seite Reservierungen wird geöffnet. Das Erstellen der Reservierung kann bis zu einer Minute dauern.

Attribute direkt angeben

Wenn Sie eine freigegebene Reservierung durch direkte Angabe von Attributen erstellen möchten, wählen Sie eine der folgenden Optionen aus:

Console

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

    Zu „Reservierungen“

  2. Klicken Sie auf dem Tab On-Demand-Reservierungen (Standard) auf Reservierung erstellen.

  3. Klicken Sie auf Reservierung erstellen.

    Die Seite Reservierung erstellen wird angezeigt.

  4. Geben Sie unter Name einen Namen für die Reservierung ein.

  5. Wählen Sie unter Region und Zone aus, wo Sie Ressourcen reservieren möchten.

  6. Führen Sie im Abschnitt Freigabetyp folgende Schritte aus:

    1. Wählen Sie Freigegeben aus, um eine freigegebene Reservierung anzugeben.

    2. Klicken Sie auf Projekte hinzufügen und wählen Sie die Projekte aus der Organisation des aktuellen Projekts aus, für die Sie die Reservierung freigeben möchten. Sie können bis zu 100 Nutzerprojekte auswählen.

  7. Optional: Wenn Sie zulassen möchten, dass eine Reservierung von GPU-VMs von benutzerdefinierten Trainingsjobs oder Vorhersagejobs in Vertex AI genutzt wird, wählen Sie im Abschnitt Google Cloud-Dienste die Option Reservierung freigeben aus.

  8. Wählen Sie im Abschnitt Mit VM-Instanz verwenden eine der folgenden Optionen:

    • Klicken Sie auf Reservierung automatisch verwenden (Standardeinstellung), damit übereinstimmende VMs diese Reservierung automatisch verwenden können.

    • Wenn Sie die Ressourcen der Reservierung nur zum Erstellen übereinstimmender VMs verbrauchen möchten, die ausdrücklich namentlich auf diese Reservierung abzielen, klicken Sie auf Spezifische Reservierung auswählen.

  9. Geben Sie unter Anzahl der VM-Instanzen die Anzahl der VMs ein, die Sie reservieren möchten.

  10. Wählen Sie im Abschnitt Maschinenkonfiguration die Option Maschinentyp angeben aus und geben Sie Folgendes an:

    1. Wählen Sie eine Maschinenfamilie, Reihe und einen Maschinentyp für eine Maschinenfamilie, eine Reihe und einen Maschinentyp aus.

    2. Optional: So geben Sie eine Mindest-CPU-Plattform an oder binden GPUs an N1-VMs an:

      1. Klicken Sie zum Erweitern des Abschnitts CPU-Plattform und GPU auf den Erweiterungspfeil .

      2. Optional: Wählen Sie unter CPU-Formular eine Option aus, um eine Minimalanforderung für die CPU-Plattform anzugeben.

      3. Optional: Wenn Sie GPUs an N1-VMs anhängen möchten, klicken Sie auf GPU hinzufügen. Wählen Sie unter GPU-Typ und die Anzahl der GPUs den Typ und die Anzahl der GPUs aus, die an jede N1-VM angehängt werden sollen.

    3. Optional: So fügen Sie lokale SSD-Laufwerke hinzu:

      1. Wählen Sie unter Anzahl der Laufwerke die Anzahl der lokalen SSD-Laufwerke für jede VM aus.

      2. Wählen Sie unter Schnittstellentyp die Schnittstelle für die lokalen SSD-Laufwerke aus.

  11. Im Abschnitt Automatisch löschen können Sie die Option zum automatischen Löschen aktivieren, damit Compute Engine die Reservierung zu einem bestimmten Datum und einer bestimmten Uhrzeit automatisch löscht. Das automatische Löschen von Reservierungen kann nützlich sein, um unnötige Gebühren zu vermeiden, wenn Sie die Reservierung nicht mehr nutzen.

  12. Klicken Sie zum Erstellen der Reservierung auf Erstellen.

    Die Seite Reservierungen wird geöffnet. Das Erstellen der freigegebenen Reservierung kann bis zu einer Minute dauern.

gcloud

Verwenden Sie zum Erstellen einer freigegebenen Reservierung den Befehl gcloud compute reservations create mit den Flags --share-setting=projects und --share-with.

Wenn Sie eine freigegebene Reservierung erstellen möchten, indem Sie Attribute direkt angeben und keine optionalen Flags verwenden, führen Sie den folgenden Befehl aus:

gcloud compute reservations create RESERVATION_NAME \
    --machine-type=MACHINE_TYPE \
    --share-setting=projects \
    --share-with=CONSUMER_PROJECT_IDS \
    --vm-count=NUMBER_OF_VMS \
    --zone=ZONE

Ersetzen Sie Folgendes:

  • RESERVATION_NAME: der Name der Reservierung, die erstellt werden soll.

  • MACHINE_TYPE: Maschinentyp, der für jede VM verwendet werden soll. Wenn Sie einen A3-Maschinentyp angeben, müssen Sie das Flag --require-specific-reservation angeben. Dies bedeutet, dass nur VMs, die spezifisch auf diese Reservierung abzielen, sie nutzen können. Weitere Informationen finden Sie unter VMs aus einer bestimmten Reservierung nutzen.

  • CONSUMER_PROJECT_IDS: eine durch Kommas getrennte Liste von IDs von Projekten, die diese Reservierung nutzen können, z. B. project-1,project-2. Sie können bis zu 100 Nutzerprojekte hinzufügen. Diese Projekte müssen sich in derselben Organisation wie das Inhaberprojekt befinden. Geben Sie nicht das Inhaberprojekt an. Standardmäßig darf diese Reservierung bereits genutzt werden.

  • NUMBER_OF_VMS: die Anzahl der zu reservierenden VMs.

  • ZONE: die Zone, in der Ressourcen reserviert werden sollen.

Um beispielsweise eine Reservierung in der Zone us-central1-a für zehn VMs zu erstellen, die jeweils einen vordefinierten Maschinentyp N2 mit 4 vCPUs verwenden, und die Reservierung mit den Projekten project-1 und project-2 zu teilen, führen Sie den folgenden Befehl aus:

gcloud compute reservations create my-reservation \
    --machine-type=n2-standard-4 \
    --share-setting=projects \
    --share-with=project-1,project-2 \
    --vm-count=10 \
    --zone=us-central1-a

Optional können Sie eine oder mehrere der folgenden Optionen angeben:

  • Wenn Sie GPUs an Ihre reservierten N1-VMs anhängen möchten, fügen Sie das Flag --accelerator ein.

    gcloud compute reservations create RESERVATION_NAME \
        --accelerator=count=NUMBER_OF_ACCELERATORS,type=ACCELERATOR_TYPE
        --machine-type=MACHINE_TYPE \
        --share-setting=projects \
        --share-with=CONSUMER_PROJECT_IDS \
        --vm-count=NUMBER_OF_VMS \
        --zone=ZONE
    

    Ersetzen Sie Folgendes:

    • NUMBER_OF_ACCELERATORS: die Anzahl der GPUs, die pro reservierter VM hinzugefügt werden sollen.

    • ACCELERATOR_TYPE: ein unterstütztes GPU-Modell für N1-VMs. Das von Ihnen ausgewählte GPU-Modell muss in der Zone verfügbar sein, in der Sie Ressourcen reservieren möchten. Andernfalls schlägt das Erstellen der Reservierung fehl.

  • Fügen Sie ein oder mehrere --local-ssd-Flags hinzu, um jeder reservierten VM eine oder mehrere lokale SSDs hinzuzufügen. Sie können bis zu 24 lokale SSDs angeben. Jede lokale SSD ist 375 GB groß.

    Wenn Sie beim Erstellen einer freigegebenen Reservierung beispielsweise zwei lokale SSDs angeben möchten, fügen Sie zwei --local-ssd-Flags hinzu:

    gcloud compute reservations create RESERVATION_NAME \
        --local-ssd=size=375,interface=INTERFACE_1 \
        --local-ssd=size=375,interface=INTERFACE_2 \
        --machine-type=MACHINE_TYPE \
        --share-setting=projects \
        --share-with=CONSUMER_PROJECT_IDS \
        --vm-count=NUMBER_OF_VMS \
        --zone=ZONE
    

    Ersetzen Sie INTERFACE_1 und INTERFACE_2 durch den Schnittstellentyp, den jedes lokale SSD verwenden soll. Geben Sie einen der folgenden Werte an:

    • NVMe-Laufwerkschnittstellen: nvme

    • SCSI-Festplattenschnittstellen: scsi

    Der von Ihnen für die reservierten VMs angegebene Maschinentyp muss die ausgewählten Laufwerkschnittstellen unterstützen. Andernfalls schlägt das Erstellen der Reservierung fehl. Weitere Informationen finden Sie unter Laufwerkschnittstelle auswählen.

  • Damit die reservierten VMs eine bestimmte Mindest-CPU-Plattform anstelle der Standard-CPU-Plattform der Zone verwenden, fügen Sie das Flag --min-cpu-platform ein.

    gcloud compute reservations create RESERVATION_NAME \
        --machine-type=MACHINE_TYPE \
        --min-cpu-platform="MIN_CPU_PLATFORM" \
        --share-setting=projects \
        --share-with=CONSUMER_PROJECT_IDS \
        --vm-count=NUMBER_OF_VMS \
        --zone=ZONE
    

    Ersetzen Sie MIN_CPU_PLATFORM durch eine Mindest-CPU-Plattform. Um sicherzustellen, dass eine CPU-Plattform in der Zone verfügbar ist, in der Sie Ressourcen reservieren, rufen Sie die verfügbaren CPU-Plattformen nach Zone auf.

  • Wenn Sie angeben möchten, dass nur VMs, die speziell auf diese Reservierung abzielen, sie verbrauchen können, fügen Sie das Flag --require-specific-reservation ein.

    gcloud compute reservations create RESERVATION_NAME \
        --machine-type=MACHINE_TYPE \
        --require-specific-reservation \
        --share-setting=projects \
        --share-with=CONSUMER_PROJECT_IDS \
        --vm-count=NUMBER_OF_VMS \
        --zone=ZONE
    
  • Wenn Sie zulassen möchten, dass eine Reservierung von GPU-VMs von benutzerdefinierten Trainingsjobs oder Vorhersagejobs in Vertex AI genutzt wird, verwenden Sie den Befehl gcloud beta compute reservations create mit dem Flag --reservation-sharing-policy=ALLOW_ALL.

    gcloud beta compute reservations create RESERVATION_NAME \
        --machine-type=MACHINE_TYPE \
        --reservation-sharing-policy=ALLOW_ALL \
        --share-setting=projects \
        --share-with=CONSUMER_PROJECT_IDS \
        --vm-count=NUMBER_OF_VMS \
        --zone=ZONE
    
  • Wählen Sie eine der folgenden Methoden aus, damit Compute Engine die Reservierung automatisch löschen kann:

    • Verwenden Sie den Befehl gcloud beta compute reservations create mit dem Flag --delete-at-time, um die Reservierung zu einem bestimmten Datum und einer bestimmten Uhrzeit zu löschen.

      gcloud beta compute reservations create RESERVATION_NAME \
          --delete-at-time=DELETE_AT_TIME \
          --machine-type=MACHINE_TYPE \
          --share-setting=projects \
          --share-with=CONSUMER_PROJECT_IDS \
          --vm-count=NUMBER_OF_VMS \
          --zone=ZONE
      

      Ersetzen Sie DELETE_AT_TIME durch einen RFC 3339-Zeitstempel für Datum und Uhrzeit, der so aussehen muss:

      YYYY-MM-DDTHH:MM:SSOFFSET
      

      Ersetzen Sie Folgendes:

      • YYYY-MM-DD: ein Datum, formatiert als vierstelliges Jahr, zweistelliger Monat und zweistelliger Tag des Monats und durch Bindestriche (-) getrennt.

      • HH:MM:SS: eine Uhrzeit, die als zweistellige Stundenzahl im 24-Stunden-Format, zweistellige Minuten und zweistellige Sekunden formatiert und durch Doppelpunkte getrennt (:) ist.

      • OFFSET: die Zeitzone, formatiert als Versatz von der koordinierten Weltzeit (Coordinated Universal Time, UTC). Wenn Sie beispielsweise Pacific Standard Time (PST) verwenden möchten, geben Sie -08:00 an. Wenn Sie keinen Versatz verwenden möchten, geben Sie Z an.

    • Verwenden Sie den Befehl gcloud beta compute reservations create mit dem Flag --delete-after-duration, um die Reservierung nach einer bestimmten Dauer zu löschen.

      gcloud beta compute reservations create RESERVATION_NAME \
          --delete-after-duration=DELETE_AFTER_DURATION \
          --machine-type=MACHINE_TYPE \
          --share-setting=projects \
          --share-with=CONSUMER_PROJECT_IDS \
          --vm-count=NUMBER_OF_VMS \
          --zone=ZONE
      

      Ersetzen Sie DELETE_AFTER_DURATION durch eine Dauer in Tagen, Stunden, Minuten oder Sekunden. Geben Sie beispielsweise 30m für 30 Minuten oder 1d2h3m4s für 1 Tag, 2 Stunden, 3 Minuten und 4 Sekunden an.

Terraform

Verwenden Sie zum Erstellen einer Reservierung die Terraform-Ressource google_compute_reservation. Definieren Sie den Block share_settings, um eine freigegebene Reservierung anzugeben:

  • Setzen Sie das Feld share_type auf SPECIFIC_PROJECTS.
  • Geben Sie im project_map-Block die Projekt-IDs der Projekte an, für die Sie diese Reservierung freigeben möchten.

Weitere Informationen zur Verwendung von Terraform finden Sie unter Terraform mit Google Cloud verwenden.

REST

Senden Sie zum Erstellen einer freigegebenen Reservierung eine POST-Anfrage an die Methode reservations.insert. Geben Sie im Anfragetext Folgendes an:

  • Das Feld projectMap.

  • Das Feld shareType ist auf SPECIFIC_PROJECTS gesetzt.

Wenn Sie beispielsweise eine freigegebene Reservierung ohne optionale Felder erstellen und die Reservierung für zwei Nutzerprojekte freigeben möchten, stellen Sie die folgende POST-Anfrage:

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

{
  "name": "RESERVATION_NAME",
  "shareSettings": {
    "shareType": "SPECIFIC_PROJECTS",
    "projectMap": {
      "CONSUMER_PROJECT_ID_1": {
        "projectId": "CONSUMER_PROJECT_ID_1"
      },
      "CONSUMER_PROJECT_ID_2": {
        "projectId": "CONSUMER_PROJECT_ID_2"
      }
    }
  },
  "specificReservation": {
    "count": "NUMBER_OF_VMS",
    "instanceProperties": {
      "machineType": "MACHINE_TYPE"
    }
  }
}

Ersetzen Sie Folgendes:

  • PROJECT_ID: die ID des Projekts, in dem Sie Ressourcen reservieren möchten.

  • ZONE: die Zone, in der Ressourcen reserviert werden sollen.

  • RESERVATION_NAME: der Name der Reservierung, die erstellt werden soll.

  • CONSUMER_PROJECT_ID_1 und CONSUMER_PROJECT_ID_2: die IDs von Projekten, die diese Reservierung verwenden können. Sie können bis zu 100 Nutzerprojekte hinzufügen. Diese Projekte müssen sich in derselben Organisation wie das Inhaberprojekt befinden. Geben Sie nicht das Inhaberprojekt an. Standardmäßig darf diese Reservierung bereits genutzt werden.

  • NUMBER_OF_VMS: die Anzahl der zu reservierenden VMs.

  • MACHINE_TYPE: Maschinentyp, der für jede VM verwendet werden soll. Wenn Sie einen A3-Maschinentyp angeben, müssen Sie das Feld specificReservationRequired in den Anfragetext einfügen und auf true festlegen. Dies bedeutet, dass nur VMs, die spezifisch auf diese Reservierung abzielen, sie nutzen können.

Wenn Sie beispielsweise eine Reservierung durch Angabe einer globalen Instanzvorlage in Zone us-central1-a erstellen möchten, geben Sie die Reservierung für die Projekte project-1 und project-2 frei und reservieren Sie zehn VMs, die jeweils einen N2-vordefinierten Maschinentyp mit 4 vCPUs verwenden. Stellen Sie folgende POST-Anfrage:

POST https://compute.googleapis.com/compute/v1/projects/example-project/zones/us-central1-a/reservations

{
  "name": "my-reservation",
  "shareSettings": {
    "shareType": "SPECIFIC_PROJECTS",
    "projectMap": {
      "project-1": {
        "projectId": "project-1"
      },
      "project-2": {
        "projectId": "project-2"
      }
    }
  },
  "specificReservation": {
    "count": "10",
    "instanceProperties": {
      "machineType": "n2-standard-4",
    }
  }
}

Optional können Sie eine oder mehrere der folgenden Optionen angeben:

  • Wenn Sie GPUs an Ihre reservierten N1-VMs anhängen möchten, fügen Sie das Feld guestAccelerators in den Anfragetext ein.

    Wenn Sie beispielsweise eine Reservierung erstellen möchten, die für zwei Nutzerprojekte freigegeben ist, und GPUs an alle reservierten N1-VMs anhängen möchten, stellen Sie so eine Anfrage:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/reservations
    
    {
      "name": "RESERVATION_NAME",
      "shareSettings": {
        "shareType": "SPECIFIC_PROJECTS",
        "projectMap": {
          "CONSUMER_PROJECT_ID_1": {
            "projectId": "CONSUMER_PROJECT_ID_1"
          },
          "CONSUMER_PROJECT_ID_2": {
            "projectId": "CONSUMER_PROJECT_ID_2"
          }
        }
      },
      "specificReservation": {
        "count": "NUMBER_OF_VMS",
        "instanceProperties": {
          "guestAccelerators": [
            {
              "acceleratorCount": NUMBER_OF_ACCELERATORS,
              "acceleratorType": "ACCELERATOR_TYPE"
            }
          ],
          "machineType": "MACHINE_TYPE"
        }
      }
    }
    

    Ersetzen Sie Folgendes:

    • NUMBER_OF_ACCELERATORS: die Anzahl der GPUs, die pro reservierter VM hinzugefügt werden sollen.

    • ACCELERATOR_TYPE: ein unterstütztes GPU-Modell für N1-VMs. Das von Ihnen ausgewählte GPU-Modell muss in der Zone verfügbar sein, in der Sie Ressourcen reservieren möchten. Andernfalls schlägt das Erstellen der Reservierung fehl.

  • Wenn Sie jeder reservierten VM eine oder mehrere lokale SSDs hinzufügen möchten, fügen Sie das Feld localSsds im Anfragetext ein. Sie können bis zu 24 lokale SSDs angeben. Jede lokale SSD ist 375 GB groß.

    Wenn Sie beispielsweise eine freigegebene Reservierung erstellen und dabei zwei lokale SSDs und zwei Nutzerprojekte angeben möchten, stellen Sie eine Anfrage wie die folgende:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/reservations
    
    {
      "name": "RESERVATION_NAME",
      "shareSettings": {
        "shareType": "SPECIFIC_PROJECTS",
        "projectMap": {
          "CONSUMER_PROJECT_ID_1": {
            "projectId": "CONSUMER_PROJECT_ID_1"
          },
          "CONSUMER_PROJECT_ID_2": {
            "projectId": "CONSUMER_PROJECT_ID_2"
          }
        }
      },
      "specificReservation": {
        "count": "NUMBER_OF_VMS",
        "instanceProperties": {
          "localSsds": [
            {
              "diskSizeGb": "375",
              "interface": "INTERFACE_1"
            },
            {
              "diskSizeGb": "375",
              "interface": "INTERFACE_2"
            }
          ],
          "machineType": "MACHINE_TYPE"
        }
      }
    }
    

    Ersetzen Sie INTERFACE_1 und INTERFACE_2 durch den Schnittstellentyp, den jedes lokale SSD verwenden soll. Geben Sie einen der folgenden Werte an:

    • NVMe-Laufwerkschnittstellen: NVME

    • SCSI-Festplattenschnittstellen: SCSI

    Der von Ihnen für die reservierten VMs angegebene Maschinentyp muss die ausgewählten Laufwerkschnittstellen unterstützen. Andernfalls schlägt das Erstellen der Reservierung fehl. Weitere Informationen finden Sie unter Laufwerkschnittstelle auswählen.

  • Damit die reservierten VMs eine bestimmte Mindest-CPU-Plattform anstelle der Standard-CPU-Plattform der Zone verwenden, fügen Sie das Feld minCpuPlatform im Anfragetext ein.

    Wenn Sie beispielsweise eine freigegebene Reservierung erstellen und dabei eine Mindest-CPU-Plattform und zwei Nutzerprojekte angeben möchten, stellen Sie eine Anfrage wie die folgende:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/reservations
    
    {
      "name": "RESERVATION_NAME",
      "shareSettings": {
        "shareType": "SPECIFIC_PROJECTS",
        "projectMap": {
          "CONSUMER_PROJECT_ID_1": {
            "projectId": "CONSUMER_PROJECT_ID_1"
          },
          "CONSUMER_PROJECT_ID_2": {
            "projectId": "CONSUMER_PROJECT_ID_2"
          }
        }
      },
      "specificReservation": {
        "count": "NUMBER_OF_VMS",
        "instanceProperties": {
          "machineType": "MACHINE_TYPE",
          "minCpuPlatform": "MIN_CPU_PLATFORM"
        }
      }
    }
    

    Ersetzen Sie MIN_CPU_PLATFORM durch eine Mindest-CPU-Plattform. Um sicherzustellen, dass eine CPU-Plattform in der Zone verfügbar ist, in der Sie Ressourcen reservieren, rufen Sie die verfügbaren CPU-Plattformen nach Zone auf.

  • Wenn Sie angeben möchten, dass nur VMs, die ausdrücklich auf diese Reservierung abzielen, diese verbrauchen können, fügen Sie das Feld specificReservationRequired im Anfragetext ein und legen Sie dafür das Feld auf true fest.

    Wenn Sie beispielsweise eine bestimmte Reservierung erstellen und für zwei Nutzerprojekte freigeben möchten, stellen Sie eine Anfrage wie die folgende:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/reservations
    
    {
      "name": "RESERVATION_NAME",
      "shareSettings": {
        "shareType": "SPECIFIC_PROJECTS",
        "projectMap": {
          "CONSUMER_PROJECT_ID_1": {
            "projectId": "CONSUMER_PROJECT_ID_1"
          },
          "CONSUMER_PROJECT_ID_2": {
            "projectId": "CONSUMER_PROJECT_ID_2"
          }
        }
      },
      "specificReservation": {
        "count": "NUMBER_OF_VMS",
        "instanceProperties": {
          "machineType": "MACHINE_TYPE"
        }
      },
      "specificReservationRequired": true
    }
    
  • Wenn Sie zulassen möchten, dass eine Reservierung von GPU-VMs von benutzerdefinierten Trainingsjobs oder Vorhersagejobs in Vertex AI genutzt wird, senden Sie eine POST-Anfrage an die beta.reservations.insert-Methode. Fügen Sie im Anfragetext das Feld serviceShareType ein und legen Sie es auf ALLOW_ALL fest.

    POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE/reservations
    
    {
      "name": "RESERVATION_NAME",
      "reservationSharingPolicy": {
        "serviceShareType": "ALLOW_ALL"
      },
      "shareSettings": {
        "shareType": "SPECIFIC_PROJECTS",
        "projectMap": {
          "CONSUMER_PROJECT_ID_1": {
            "projectId": "CONSUMER_PROJECT_ID_1"
          },
          "CONSUMER_PROJECT_ID_2": {
            "projectId": "CONSUMER_PROJECT_ID_2"
          }
        }
      },
      "specificReservation": {
        "count": "NUMBER_OF_VMS",
        "instanceProperties": {
          "machineType": "MACHINE_TYPE"
        }
      }
    }
    
  • Wählen Sie eine der folgenden Methoden aus, damit Compute Engine die Reservierung automatisch löschen kann:

    • Wenn Sie die Reservierung zu einem bestimmten Datum und einer bestimmten Uhrzeit löschen möchten, stellen Sie eine POST-Anfrage an die Methode beta.reservations.insert. Geben Sie im Anfragetext das Feld deleteAtTime an.

      Wenn Sie beispielsweise eine Reservierung erstellen und dabei ein Datum und eine Uhrzeit für das Löschen der Reservierung angeben und die Reservierung für zwei Nutzerprojekte freigeben möchten, stellen Sie eine Anfrage wie die folgende:

      POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE/reservations
      
      {
        "deleteAtTime": "DELETE_AT_TIME",
        "name": "RESERVATION_NAME",
        "shareSettings": {
          "shareType": "SPECIFIC_PROJECTS",
          "projectMap": {
            "CONSUMER_PROJECT_ID_1": {
              "projectId": "CONSUMER_PROJECT_ID_1"
            },
            "CONSUMER_PROJECT_ID_2": {
              "projectId": "CONSUMER_PROJECT_ID_2"
            }
          }
        },
        "specificReservation": {
          "count": "NUMBER_OF_VMS",
          "instanceProperties": {
            "machineType": "MACHINE_TYPE"
          }
        }
      }
      

      Ersetzen Sie DELETE_AT_TIME durch einen RFC 3339-Zeitstempel für Datum und Uhrzeit, der so aussehen muss:

      YYYY-MM-DDTHH:MM:SSOFFSET
      

      Ersetzen Sie Folgendes:

      • YYYY-MM-DD: ein Datum, formatiert als vierstelliges Jahr, zweistelliger Monat und zweistelliger Tag des Monats und durch Bindestriche (-) getrennt.

      • HH:MM:SS: eine Uhrzeit, die als zweistellige Stundenzahl im 24-Stunden-Format, zweistellige Minuten und zweistellige Sekunden formatiert und durch Doppelpunkte getrennt (:) ist.

      • OFFSET: die Zeitzone, formatiert als Versatz von der koordinierten Weltzeit (Coordinated Universal Time, UTC). Wenn Sie beispielsweise Pacific Standard Time (PST) verwenden möchten, geben Sie -08:00 an. Wenn Sie keinen Versatz verwenden möchten, geben Sie Z an.

    • Wenn Sie die Reservierung nach einer bestimmten Dauer löschen möchten, senden Sie eine POST-Anfrage an die Methode beta.reservations.insert. Geben Sie im Anfragetext das Feld deleteAfterDuration an.

      Wenn Sie beispielsweise eine Reservierung erstellen möchten, die von der Compute Engine nach einer bestimmten Dauer gelöscht wird, und die Reservierung für zwei Nutzerprojekte freigeben möchten, stellen Sie so eine Anfrage:

      POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE/reservations
      
      {
        "deleteAfterDuration": {
          "seconds": "DELETE_AFTER_DURATION"
        },
        "name": "RESERVATION_NAME",
        "shareSettings": {
          "shareType": "SPECIFIC_PROJECTS",
          "projectMap": {
            "CONSUMER_PROJECT_ID_1": {
              "projectId": "CONSUMER_PROJECT_ID_1"
            },
            "CONSUMER_PROJECT_ID_2": {
              "projectId": "CONSUMER_PROJECT_ID_2"
            }
          }
        },
        "specificReservation": {
          "count": "NUMBER_OF_VMS",
          "instanceProperties": {
            "machineType": "MACHINE_TYPE"
          }
        }
      }
      

      Ersetzen Sie DELETE_AFTER_DURATION durch die Dauer in Sekunden. Geben Sie beispielsweise 86400 für 86.400 Sekunden (1 Tag) an.

Fehlerbehebung

Fehlerbehebung beim Erstellen von Reservierungen.

Nächste Schritte