VMs im Bulk erstellen


Wenn Sie eine große Anzahl von identischen und voneinander unabhängigen VM-Instanzen erstellen möchten, erstellen Sie VMs mithilfe der Google Cloud CLI oder der Compute Engine API im Bulk. Sie können diese VMs über alle Zonen in einer Region hinweg oder verteilt auf bestimmte Zonen erstellen.

Weitere Informationen und zugehörige Einschränkungen finden Sie unter Informationen zur Bulk-Erstellung von VMs.

Vorbereitung

  • Prüfen Sie für VMs und zugehörige Ressourcen, die Sie erstellen möchten, ob Ihr Kontingent ausreicht und Sie die erforderlichen Berechtigungen haben.
  • 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 so bei Compute Engine authentifizieren.

    Select the tab for how you plan to use the samples on this page:

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

Um die Berechtigungen zu erhalten, die Sie für die Erstellung von VMs im Bulk benötigen, bitten Sie Ihren Administrator, Ihnen die IAM-Rolle Compute Instance Admin (v1) (roles/compute.instanceAdmin.v1) für das Projekt zu gewähren. Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.

Diese vordefinierte Rolle enthält die Berechtigungen, die zum Erstellen mehrerer VMs erforderlich sind. Erweitern Sie den Abschnitt Erforderliche Berechtigungen, um die erforderlichen Berechtigungen anzuzeigen:

Erforderliche Berechtigungen

Die folgenden Berechtigungen sind erforderlich, um VMs im Bulk zu erstellen:

  • compute.instances.create für das Projekt
  • So erstellen Sie die VM mit einem benutzerdefinierten Image: compute.images.useReadOnly für das Image
  • Um die VM mit einem Snapshot zu erstellen: compute.snapshots.useReadOnly für den Snapshot
  • So verwenden Sie eine Instanzvorlage zum Erstellen der VM: compute.instanceTemplates.useReadOnly für die Instanzvorlage
  • So weisen Sie der VM ein Legacy-Netzwerk zu: compute.networks.use für das Projekt
  • Um eine statische IP-Adresse für die VM festzulegen: compute.addresses.use für das Projekt
  • So weisen Sie der VM eine externe IP-Adresse zu, wenn Sie ein Legacy-Netzwerk verwenden: compute.networks.useExternalIp für das Projekt
  • So geben Sie ein Subnetz für Ihre VM an: compute.subnetworks.use für das Projekt oder für das ausgewählte Subnetz
  • So weisen Sie der VM eine externe IP-Adresse zu, wenn Sie ein VPC-Netzwerk verwenden: compute.subnetworks.useExternalIp für das Projekt oder für das ausgewählte Subnetz
  • Um Metadaten der VM-Instanz für die VM festzulegen: compute.instances.setMetadata für das Projekt
  • Zum Festlegen von Tags für die VM: compute.instances.setTags auf der VM
  • So legen Sie Labels für die VM fest: compute.instances.setLabels auf der VM
  • So legen Sie ein Dienstkonto für die VM fest: compute.instances.setServiceAccount auf der VM
  • Um ein neues Laufwerk für die VM zu erstellen: compute.disks.create für das Projekt
  • So hängen Sie ein vorhandenes Laufwerk im Lese- oder Lese-/Schreibmodus an: compute.disks.use für das Laufwerk
  • So hängen Sie ein vorhandenes Laufwerk im Lesemodus an: compute.disks.useReadOnly für das Laufwerk

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

VMs im Bulk in einer Region erstellen

Wenn Sie in einer Region VMs im Bulk erstellen möchten, verwenden Sie die gcloud CLI oder die Compute Engine API.

Wenn Sie einen Maschinentyp oder Support für zusätzliche Hardware wie eine GPU oder eine lokale SSD angeben, werden die VMs in Compute Engine in einer Zone innerhalb der Region platziert, die den Maschinentyp und die zusätzliche Hardware unterstützt.

gcloud

Wenn Sie VMs in einer Region im Bulk erstellen möchten, verwenden Sie den folgenden gcloud compute instances bulk create-Befehl:

gcloud compute instances bulk create \
    ( --name-pattern="NAME_PATTERN" | --predefined-names=[PREDEFINED_NAMES] ) \
    --region=REGION \
    --count=COUNT \
    [ --min-count=MIN_COUNT \ ]
    [--location-policy=LOCATION_POLICY \ ]
    [--target-distribution-shape=TARGET_SHAPE ]

Ersetzen Sie dabei Folgendes:

  • NAME_PATTERN ist das Namensmuster für die VMs. Verwenden Sie eine Abfolge von Hash-Zeichen (#) für Compute Engine, um sie durch eine Zahlenfolge zu ersetzen. Wenn Sie z. B. vm-# für das Namensmuster verwenden, werden VMs mit den Namen vm-1, vm-2 usw. bis zu der durch --count angegebenen Anzahl von VMs erzeugt, die kleiner oder gleich der Anzahl von VMs sein muss, die das Namensmuster zulässt.

    Bei Verwendung eines Namensmusters versucht Compute Engine, Namenskonflikte zu vermeiden. Dazu werden die Namen vorhandener VMs geprüft, die aus vorherigen Anfragen erstellt wurden.

  • PREDEFINED_NAMES ist eine Liste vordefinierter Namen für die zu erstellenden VMs. Wenn Sie dieses Flag verwenden und COUNT angeben, muss COUNT der Anzahl der angegebenen Namen entsprechen.

  • REGION ist die Region, in der die VMs erstellt werden sollen.

  • COUNT ist die Anzahl der zu erstellenden VMs. Diese muss kleiner oder gleich der Anzahl der durch NAME_PATTERN zugelassenen VMs sein. Wenn Sie --predefined-names verwenden, müssen Sie COUNT nicht angeben. Wenn Sie jedoch einen Wert angeben, muss dieser der Anzahl der angegebenen Namen entsprechen.

  • MIN_COUNT: die Mindestanzahl der zu erstellenden VMs. In der folgenden Tabelle wird das Verhalten der Anfrage beschrieben, je nachdem, wie Sie dieses Flag festlegen:

    Wert Beschreibung
    Nicht definiert Der Standardwert ist COUNT. Wenn Compute Engine nicht die Anzahl der von COUNT angegebenen VMs erstellen kann, schlägt die Anfrage fehl und es werden keine VMs erstellt.
    1 Compute Engine erstellt so viele VMs wie möglich und maximal COUNT.
    Größer als 1 und kleiner als COUNT Compute Engine erstellt mindestens MIN_COUNT VMs bis zu maximal COUNT VMs Wenn MIN_COUNT VMs nicht erstellt werden können, schlägt die Anfrage fehl und es werden keine VMs erstellt.
  • LOCATION_POLICY: die Zonen, die in einer Region ein- oder ausgeschlossen werden sollen. Verwenden Sie eine Liste von Schlüssel/Wert-Paaren, wobei die Zone als Schlüssel und die Richtlinie als Wert dienen. Gültige Werte für die Richtlinie sind allow, der Standardwert, und deny. Hier ein Beispielwert für dieses Flag:

    --location-policy=us-east1-b=allow,us-east1-c=deny
    
  • TARGET_SHAPE: Die Verteilung der VMs in den angegebenen Zonen. Verwenden Sie das Flag --location-policy, um die Zonen anzugeben. In der folgenden Tabelle sind die für dieses Flag gültigen Werte aufgeführt:

    Wert Beschreibung
    ANY_SINGLE_ZONE Erzwingt die VM-Platzierung innerhalb einer einzelnen Zone und priorisiert die Auslastung nicht verwendeter Reservierungen. Hiermit können Sie zonenübergreifenden ausgehenden Netzwerktraffic vermeiden und die Netzwerklatenz reduzieren. Dies ist der Standardwert.
    BALANCED Versucht, VMs gleichmäßig auf alle Zonen in der Region zu verteilen.
    ANY Ermöglicht die Verteilung von VMs auf mehrere Zonen in einer Region. Wählt Zonen mit verfügbaren Ressourcen, die nicht verwendete zonale Reservierungen maximieren.

REST

Verwenden Sie die folgende instances.bulkInsert-Methode, um VMs in einer Region im Bulk zu erstellen:

POST https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instances/bulkInsert

{
  ...
  "namePattern": "NAME_PATTERN",
  "perInstanceProperties": {
    "PREDEFINED_NAME_1": {},
    "PREDEFINED_NAME_2": {},
    ...
  },
  "count": COUNT,
  "minCount": MIN_COUNT,
  "locationPolicy": {
    "LOCATION_POLICY"
    },
    "targetShape": "TARGET_SHAPE"
  ...
}

Ersetzen Sie dabei Folgendes:

  • PROJECT_ID: die Projekt-ID.

  • REGION ist die Region, in der die VMs erstellt werden sollen.

  • NAME_PATTERN ist das Namensmuster für die VMs. Geben Sie entweder diesen Wert oder perInstanceProperties an. Verwenden Sie eine Abfolge von Hash-Zeichen (#) für Compute Engine, um sie durch eine Zahlenfolge zu ersetzen. Wenn Sie z. B. vm-# für das Namensmuster verwenden, werden VMs mit den Namen vm-1, vm-2 usw. bis zu der durch --count angegebenen Anzahl von VMs erzeugt, die kleiner oder gleich der Anzahl von VMs sein muss, die das Namensmuster zulässt.

    Bei Verwendung eines Namensmusters versucht Compute Engine, Namenskonflikte zu vermeiden. Dazu werden die Namen vorhandener VMs geprüft, die aus vorherigen Anfragen erstellt wurden.

  • PREDEFINED_NAME_1, PREDEFINED_NAME_2 ist eine Liste vordefinierter Namen für die zu erstellenden VMs. Geben Sie entweder diesen Wert oder namePattern an. Wenn Sie dieses Flag verwenden und COUNT angeben, muss COUNT der Anzahl der angegebenen Namen entsprechen.

  • COUNT ist die Anzahl der zu erstellenden VMs. Diese muss kleiner oder gleich der Anzahl der durch NAME_PATTERN zugelassenen VMs sein. Wenn Sie perInstanceProperties verwenden, müssen Sie COUNT nicht angeben. Wenn Sie jedoch einen Wert angeben, muss dieser der Anzahl der angegebenen Namen entsprechen.

  • MIN_COUNT: die Mindestanzahl der zu erstellenden VMs. In der folgenden Tabelle wird das Verhalten der Anfrage beschrieben, je nachdem, wie Sie dieses Flag festlegen:

    Wert Beschreibung
    Nicht definiert Der Standardwert ist COUNT. Wenn Compute Engine nicht die Anzahl der von COUNT angegebenen VMs erstellen kann, schlägt die Anfrage fehl und es werden keine VMs erstellt.
    1 Compute Engine erstellt so viele VMs wie möglich und maximal COUNT.
    Größer als 1 und kleiner als COUNT Compute Engine erstellt mindestens MIN_COUNT VMs bis zu maximal COUNT VMs Wenn MIN_COUNT VMs nicht erstellt werden können, schlägt die Anfrage fehl und es werden keine VMs erstellt.
  • LOCATION_POLICY: die Zonen, die in einer Region ein- oder ausgeschlossen werden sollen. Verwenden Sie eine Liste von Schlüssel/Wert-Paaren, wobei die Zone als Schlüssel und die Richtlinie als Wert dienen. Gültige Werte für die Richtlinie sind ALLOW, der Standardwert, und DENY. Hier ein Beispielwert für dieses Feld:

    "locations": {
      "zones/us-central1-a": { "preference": "ALLOW" },
      "zones/us-central1-c": { "preference": "DENY"  },
      ...
    },
    
  • TARGET_SHAPE: Die Verteilung der VMs in den angegebenen Zonen. Verwenden Sie das Feld locationPolicy, um die Zonen anzugeben. Die folgende Tabelle enthält die gültigen Werte für dieses Feld:

    Wert Beschreibung
    ANY_SINGLE_ZONE Erzwingt die VM-Platzierung innerhalb einer einzelnen Zone und priorisiert die Auslastung nicht verwendeter Reservierungen. Hiermit können Sie zonenübergreifenden ausgehenden Netzwerktraffic vermeiden und die Netzwerklatenz reduzieren. Dies ist der Standardwert.
    BALANCED Versucht, VMs gleichmäßig auf alle Zonen in der Region zu verteilen.
    ANY Ermöglicht die Verteilung von VMs auf mehrere Zonen in einer Region. Wählt Zonen mit verfügbaren Ressourcen, die nicht verwendete zonale Reservierungen maximieren.

VMs im Bulk in einer Zone erstellen

Wenn Sie VMs im Bulk in einer Zone erstellen möchten, verwenden Sie die gcloud CLI oder die Compute Engine API.

gcloud

Verwenden Sie den folgenden Befehl gcloud compute instances bulk create, um in einer bestimmten Zone VMs im Bulk zu erstellen.

gcloud compute instances bulk create \
    ( --name-pattern="NAME_PATTERN" | --predefined-names=[PREDEFINED_NAMES] ) \
    --zone=ZONE \
    --count=COUNT \
    [ --min-count=MIN_COUNT ]

Ersetzen Sie dabei Folgendes:

  • NAME_PATTERN ist das Namensmuster für die VMs. Verwenden Sie eine Abfolge von Hash-Zeichen (#) für Compute Engine, um sie durch eine Zahlenfolge zu ersetzen. Wenn Sie z. B. vm-# für das Namensmuster verwenden, werden VMs mit den Namen vm-1, vm-2 usw. bis zu der durch --count angegebenen Anzahl von VMs erzeugt, die kleiner oder gleich der Anzahl von VMs sein muss, die das Namensmuster zulässt.

    Bei Verwendung eines Namensmusters versucht Compute Engine, Namenskonflikte zu vermeiden. Dazu werden die Namen vorhandener VMs geprüft, die aus vorherigen Anfragen erstellt wurden.

  • PREDEFINED_NAMES ist eine Liste vordefinierter Namen für die zu erstellenden VMs. Wenn Sie dieses Flag verwenden und COUNT angeben, muss COUNT der Anzahl der angegebenen Namen entsprechen.

  • ZONE ist die Zone, in der die VMs erstellt werden sollen.

  • COUNT ist die Anzahl der zu erstellenden VMs. Diese muss kleiner oder gleich der Anzahl der durch NAME_PATTERN zugelassenen VMs sein. Wenn Sie --predefined-names verwenden, müssen Sie COUNT nicht angeben. Wenn Sie jedoch einen Wert angeben, muss dieser der Anzahl der angegebenen Namen entsprechen.

  • MIN_COUNT: die Mindestanzahl der zu erstellenden VMs. In der folgenden Tabelle wird das Verhalten der Anfrage beschrieben, je nachdem, wie Sie dieses Flag festlegen:

    Wert Beschreibung
    Nicht definiert Der Standardwert ist COUNT. Wenn Compute Engine nicht die Anzahl der von COUNT angegebenen VMs erstellen kann, schlägt die Anfrage fehl und es werden keine VMs erstellt.
    1 Compute Engine erstellt so viele VMs wie möglich und maximal COUNT.
    Größer als 1 und kleiner als COUNT Compute Engine erstellt mindestens MIN_COUNT VMs bis zu maximal COUNT VMs Wenn MIN_COUNT VMs nicht erstellt werden können, schlägt die Anfrage fehl und es werden keine VMs erstellt.

REST

Verwenden Sie die folgende instances.bulkInsert-Methode, um VMs in einer Region im Bulk zu erstellen.

POST https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/bulkInsert

{
  ...
  "namePattern": "NAME_PATTERN",
  "perInstanceProperties": {
    "PREDEFINED_NAME_1": {},
    "PREDEFINED_NAME_2": {},
    ...
  },
  "count": COUNT,
  "minCount": MIN_COUNT,
  ...
}

Ersetzen Sie dabei Folgendes:

  • PROJECT_ID: die Projekt-ID.

  • ZONE ist die Zone, in der die VMs erstellt werden sollen.

  • NAME_PATTERN ist das Namensmuster für die VMs. Geben Sie entweder diesen Wert oder perInstanceProperties an. Verwenden Sie eine Abfolge von Hash-Zeichen (#) für Compute Engine, um sie durch eine Zahlenfolge zu ersetzen. Wenn Sie z. B. vm-# für das Namensmuster verwenden, werden VMs mit den Namen vm-1, vm-2 usw. bis zu der durch --count angegebenen Anzahl von VMs erzeugt, die kleiner oder gleich der Anzahl von VMs sein muss, die das Namensmuster zulässt.

    Bei Verwendung eines Namensmusters versucht Compute Engine, Namenskonflikte zu vermeiden. Dazu werden die Namen vorhandener VMs geprüft, die aus vorherigen Anfragen erstellt wurden.

  • PREDEFINED_NAME_1, PREDEFINED_NAME_2 ist eine Liste vordefinierter Namen für die zu erstellenden VMs. Geben Sie entweder diesen Wert oder namePattern an. Wenn Sie dieses Flag verwenden und COUNT angeben, muss COUNT der Anzahl der angegebenen Namen entsprechen.

  • COUNT ist die Anzahl der zu erstellenden VMs. Diese muss kleiner oder gleich der Anzahl der durch NAME_PATTERN zugelassenen VMs sein. Wenn Sie perInstanceProperties verwenden, müssen Sie COUNT nicht angeben. Wenn Sie jedoch einen Wert angeben, muss dieser der Anzahl der angegebenen Namen entsprechen.

  • MIN_COUNT: die Mindestanzahl der zu erstellenden VMs. In der folgenden Tabelle wird das Verhalten der Anfrage beschrieben, je nachdem, wie Sie dieses Flag festlegen:

    Wert Beschreibung
    Nicht definiert Der Standardwert ist COUNT. Wenn Compute Engine nicht die Anzahl der von COUNT angegebenen VMs erstellen kann, schlägt die Anfrage fehl und es werden keine VMs erstellt.
    1 Compute Engine erstellt so viele VMs wie möglich und maximal COUNT.
    Größer als 1 und kleiner als COUNT Compute Engine erstellt mindestens MIN_COUNT VMs bis zu maximal COUNT VMs Wenn MIN_COUNT VMs nicht erstellt werden können, schlägt die Anfrage fehl und es werden keine VMs erstellt.

VMs mit benutzerdefinierten Hostnamen im Bulk erstellen

Sie können VMs mit benutzerdefinierten Hostnamen im Bulk in einer Region oder in einer Zone erstellen, indem Sie die gcloud CLI oder die Compute Engine API verwenden.

Sie müssen den DNS-Eintrag für Ihren benutzerdefinierten Hostnamen manuell konfigurieren. Weitere Informationen finden Sie unter Einschränkungen.

Wenn Sie keinen Hostnamen angeben, legt Compute Engine den Hostnamen für VMs auf eine der folgenden Optionen fest:

  • VM_NAME.c.PROJECT_ID.internal, wenn Sie das globale DNS aktivieren
  • VM_NAME.ZONE.c.PROJECT_ID.internal, wenn Sie das zonale DNS aktivieren

Weitere Informationen finden Sie unter Interne DNS-Namen.

gcloud

Verwenden Sie den folgenden gcloud beta compute instances bulk create-Befehl, um VMs im Bulk mit benutzerdefinierten Hostnamen in einer bestimmten Region zu erstellen.

gcloud beta compute instances bulk create \
    ( --name-pattern="NAME_PATTERN" | --predefined-names=[PREDEFINED_NAMES] ) \
    --per-instance-hostnames=[VM_NAME=HOSTNAME,...] \
    --zone=REGION \
    --count=COUNT \
    [ --min-count=MIN_COUNT ]
    [--location-policy=LOCATION_POLICY \ ]
    [--target-distribution-shape=TARGET_SHAPE ]

Ersetzen Sie dabei Folgendes:

  • NAME_PATTERN ist das Namensmuster für die VMs. Verwenden Sie eine Abfolge von Hash-Zeichen (#) für Compute Engine, um sie durch eine Zahlenfolge zu ersetzen. Wenn Sie z. B. vm-# für das Namensmuster verwenden, werden VMs mit den Namen vm-1, vm-2 usw. bis zu der durch --count angegebenen Anzahl von VMs erzeugt, die kleiner oder gleich der Anzahl von VMs sein muss, die das Namensmuster zulässt.

    Bei Verwendung eines Namensmusters versucht Compute Engine, Namenskonflikte zu vermeiden. Dazu werden die Namen vorhandener VMs geprüft, die aus vorherigen Anfragen erstellt wurden.

  • PREDEFINED_NAMES ist eine Liste vordefinierter Namen für die zu erstellenden VMs. Wenn Sie dieses Flag verwenden und COUNT angeben, muss COUNT der Anzahl der angegebenen Namen entsprechen.

  • [VM_NAME=HOSTNAME, ...] ist eine Liste von Schlüssel/Wert-Paaren vordefinierter Namen für die VMs und voll qualifizierten Domain-Hostnamen, die Sie den VMs zuweisen möchten. Benutzerdefinierte Hostnamen müssen den RFC 1035-Anforderungen für gültige Hostnamen entsprechen.

  • REGION ist die Zone, in der die VMs erstellt werden sollen.

  • COUNT ist die Anzahl der zu erstellenden VMs. Diese muss kleiner oder gleich der Anzahl der durch NAME_PATTERN zugelassenen VMs sein. Wenn Sie --predefined-names verwenden, müssen Sie COUNT nicht angeben. Wenn Sie jedoch einen Wert angeben, muss dieser der Anzahl der angegebenen Namen entsprechen.

  • MIN_COUNT: die Mindestanzahl der zu erstellenden VMs. In der folgenden Tabelle wird das Verhalten der Anfrage beschrieben, je nachdem, wie Sie dieses Flag festlegen:

    Wert Beschreibung
    Nicht definiert Der Standardwert ist COUNT. Wenn Compute Engine nicht die Anzahl der von COUNT angegebenen VMs erstellen kann, schlägt die Anfrage fehl und es werden keine VMs erstellt.
    1 Compute Engine erstellt so viele VMs wie möglich und maximal COUNT.
    Größer als 1 und kleiner als COUNT Compute Engine erstellt mindestens MIN_COUNT VMs bis zu maximal COUNT VMs Wenn MIN_COUNT VMs nicht erstellt werden können, schlägt die Anfrage fehl und es werden keine VMs erstellt.
  • LOCATION_POLICY: die Zonen, die in einer Region ein- oder ausgeschlossen werden sollen. Verwenden Sie eine Liste von Schlüssel/Wert-Paaren, wobei die Zone als Schlüssel und die Richtlinie als Wert dienen. Gültige Werte für die Richtlinie sind ALLOW, der Standardwert, und DENY. Hier ein Beispielwert für dieses Feld:

    "locations": {
      "zones/us-central1-a": { "preference": "ALLOW" },
      "zones/us-central1-c": { "preference": "DENY"  },
      ...
    },
    
  • TARGET_SHAPE: Die Verteilung der VMs in den angegebenen Zonen. Verwenden Sie das Feld locationPolicy, um die Zonen anzugeben. Die folgende Tabelle enthält die gültigen Werte für dieses Feld:

    Wert Beschreibung
    ANY_SINGLE_ZONE Erzwingt die VM-Platzierung innerhalb einer einzelnen Zone und priorisiert die Auslastung nicht verwendeter Reservierungen. Hiermit können Sie zonenübergreifenden ausgehenden Netzwerktraffic vermeiden und die Netzwerklatenz reduzieren. Dies ist der Standardwert.
    BALANCED Versucht, VMs gleichmäßig auf alle Zonen in der Region zu verteilen.
    ANY Ermöglicht die Verteilung von VMs auf mehrere Zonen in einer Region. Wählt Zonen mit verfügbaren Ressourcen, die nicht verwendete zonale Reservierungen maximieren.

REST

Verwenden Sie die folgende instances.bulkInsert-Methode, um in einer bestimmten Region VMs mit benutzerdefinierten Hostnamen im Bulk zu erstellen:

POST https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instances/bulkInsert

{
  ...
  "namePattern": "NAME_PATTERN",
  "perInstanceProperties": {
    "PREDEFINED_NAME_1": {"hostname": HOSTNAME_1},
    "PREDEFINED_NAME_2": {"hostname": HOSTNAME_2},
    ...
  },
  "count": COUNT,
  "minCount": MIN_COUNT,
  "locationPolicy": {
    "LOCATION_POLICY"
    },
    "targetShape": "TARGET_SHAPE"
  ...
}

Ersetzen Sie dabei Folgendes:

  • PROJECT_ID: die Projekt-ID.

  • REGION ist die Region, in der die VMs erstellt werden sollen.

  • NAME_PATTERN ist das Namensmuster für die VMs. Geben Sie entweder diesen Wert oder perInstanceProperties an. Verwenden Sie eine Abfolge von Hash-Zeichen (#) für Compute Engine, um sie durch eine Zahlenfolge zu ersetzen. Wenn Sie z. B. vm-# für das Namensmuster verwenden, werden VMs mit den Namen vm-1, vm-2 usw. bis zu der durch --count angegebenen Anzahl von VMs erzeugt, die kleiner oder gleich der Anzahl von VMs sein muss, die das Namensmuster zulässt.

    Bei Verwendung eines Namensmusters versucht Compute Engine, Namenskonflikte zu vermeiden. Dazu werden die Namen vorhandener VMs geprüft, die aus vorherigen Anfragen erstellt wurden.

  • PREDEFINED_NAME_1, PREDEFINED_NAME_2 ist eine Liste vordefinierter Namen für die zu erstellenden VMs. Geben Sie entweder diesen Wert oder namePattern an. Wenn Sie dieses Flag verwenden und COUNT angeben, muss COUNT der Anzahl der angegebenen Namen entsprechen.

  • HOSTNAME_1, HOSTNAME_2 sind voll qualifizierte Domainnamen, die Sie den VMs zuweisen möchten. Benutzerdefinierte Hostnamen müssen den RFC 1035-Anforderungen für gültige Hostnamen entsprechen.

    Wenn Sie beispielsweise die beiden VMs vm-1 und vm-2 mit den benutzerdefinierten Hostnamen my-host1234.example.com bzw. test.example.com erstellen möchten, geben Sie das Attribut hostname in perInstanceProperties so an:

    {
    ...
    "perInstanceProperties": {
    "vm-1": { "hostname": "my-host1234.example.com" },
    "vm-2": { "hostname": "test.example.com" },
    ...
    },
    
  • COUNT ist die Anzahl der zu erstellenden VMs. Diese muss kleiner oder gleich der Anzahl der durch NAME_PATTERN zugelassenen VMs sein. Wenn Sie perInstanceProperties verwenden, müssen Sie COUNT nicht angeben. Wenn Sie jedoch einen Wert angeben, muss dieser der Anzahl der angegebenen Namen entsprechen.

  • MIN_COUNT: die Mindestanzahl der zu erstellenden VMs. In der folgenden Tabelle wird das Verhalten der Anfrage beschrieben, je nachdem, wie Sie dieses Flag festlegen:

    Wert Beschreibung
    Nicht definiert Der Standardwert ist COUNT. Wenn Compute Engine nicht die Anzahl der von COUNT angegebenen VMs erstellen kann, schlägt die Anfrage fehl und es werden keine VMs erstellt.
    1 Compute Engine erstellt so viele VMs wie möglich und maximal COUNT.
    Größer als 1 und kleiner als COUNT Compute Engine erstellt mindestens MIN_COUNT VMs bis zu maximal COUNT VMs Wenn MIN_COUNT VMs nicht erstellt werden können, schlägt die Anfrage fehl und es werden keine VMs erstellt.
  • LOCATION_POLICY: die Zonen, die in einer Region ein- oder ausgeschlossen werden sollen. Verwenden Sie eine Liste von Schlüssel/Wert-Paaren, wobei die Zone als Schlüssel und die Richtlinie als Wert dienen. Gültige Werte für die Richtlinie sind ALLOW, der Standardwert, und DENY. Hier ein Beispielwert für dieses Feld:

    "locations": {
      "zones/us-central1-a": { "preference": "ALLOW" },
      "zones/us-central1-c": { "preference": "DENY"  },
      ...
    },
    
  • TARGET_SHAPE: Die Verteilung der VMs in den angegebenen Zonen. Verwenden Sie das Feld locationPolicy, um die Zonen anzugeben. Die folgende Tabelle enthält die gültigen Werte für dieses Feld:

    Wert Beschreibung
    ANY_SINGLE_ZONE Erzwingt die VM-Platzierung innerhalb einer einzelnen Zone und priorisiert die Auslastung nicht verwendeter Reservierungen. Hiermit können Sie zonenübergreifenden ausgehenden Netzwerktraffic vermeiden und die Netzwerklatenz reduzieren. Dies ist der Standardwert.
    BALANCED Versucht, VMs gleichmäßig auf alle Zonen in der Region zu verteilen.
    ANY Ermöglicht die Verteilung von VMs auf mehrere Zonen in einer Region. Wählt Zonen mit verfügbaren Ressourcen, die nicht verwendete zonale Reservierungen maximieren.

Status einer Anfrage zum Erstellen von VMs im Bulk prüfen

Wenn Sie eine Mutationsanfrage erstellen, gibt Compute Engine eine operation-Ressource zurück, die Sie abfragen können, um den Status des Vorgangs abzurufen. Weitere Informationen finden Sie unter API-Antworten verarbeiten.

Wenn Sie den Status einer Bulk-Insert-Anfrage abrufen möchten, senden Sie eine HTTP-GET-Anfrage an die Ressource operation:

GET compute/v1/projects/PROJECT_ID/zones/ZONE/operations/OPERATION_ID

Senden Sie die folgende Anfrage, um den Status einer regionalen Bulk-Insert-Anfrage abzurufen:

GET compute/v1/projects/PROJECT_ID/regions/REGION/operations/OPERATION_ID

Ersetzen Sie dabei Folgendes:

  • PROJECT_ID ist die ID des Projekts, in dem Sie VMs erstellen.
  • REGION: die Region, in der Sie VMs erstellen
  • ZONE: die Zone, in der Sie VMs erstellen
  • OPERATION_ID: die ID des Bulk-Insert-Vorgangs

Das Objekt instancesBulkInsertOperationMetadata in der Antwort enthält die folgenden Details des Vorgangs:

  • status: der Status ist einer der folgenden:
    • CREATING: VM wird erstellt
    • ROLLING_BACK: Die Anfrage ist fehlgeschlagen und wird zurückgesetzt.
    • DONE: Die VM-Erstellung oder das Rollback wurde erfolgreich abgeschlossen.
  • targetVmCount: Anzahl der VMs, die in der angegebenen Zone erstellt werden sollen
  • createdVmCount: Anzahl der VMs, die bereits in der angegebenen Zone erstellt wurden
  • failedToCreateVmCount: Anzahl der VMs, die in der angegebenen Zone nicht erstellt werden konnten
  • deletedVmCount ist die Anzahl der VMs, die im Rahmen eines Rollbacks eines fehlgeschlagenen Vorgangs gelöscht wurden

Das Feld progress in der Antwort stellt den Prozentsatz des Abschlusses des Vorgangs dar.

Der Status des Bulk-Insert-Vorgangs lautet RUNNING, bis Compute Engine mindestens die Mindestanzahl von VMs erstellt hat und keine weitere VM-Erstellung oder ein Rollback der Anfrage mehr erfolgt.

Wenn der Bulk-Insert-Vorgang ausgeführt wird, sollte eine Antwort ähnlich der folgenden angezeigt werden:

{
  "kind" : "compute#operation",
  "id": "4653028658507445766",
  "name": "operation-1587661030638-5a3f823c143e3-e33bbfa3-bd72185c",
  "operationType": "bulkInsert",
  "targetLink":  "https://googleapis.com/compute/v1/projects/my-project"
  "targetId": 4653028658507445766,
  "status": "RUNNING",
  "progress": 2,
  "user": "example@google.com",
  "insertTime": "2023-04-23T09:57:13.474-07:00",
  "startTime": "2023-04-23T09:57:13.474-07:00",
  "selfLink": "https://googleapis.com/compute/v1/projects/my-project/zones/us-central1-a/operations/operation-1587661030638-5a3f823c143e3-e33bbfa3-bd72185c",
  "operationGroupId": "4653028658507445766",
  "metadata":
    "instances_bulk_insert_operation_metadata": {
      "per_location_status": {
         "zones/us-central1-a": {
           "status": "CREATING",
           "targetVmCount": 50,
           "createdVmCount": 1
         }
      }
    }
}

In diesem Beispiel wurde eine Instanz erfolgreich erstellt und der Vorgang ist zu 2 % abgeschlossen.

Der Vorgang gibt den Status DONE zurück, wenn Compute Engine erfolgreich mindestens die von minCount angegebene Mindestanzahl von VMs erstellt hat oder wenn Compute Engine das Rollback der Anfrage ausführt. Nach erfolgreicher Erstellung der angeforderten Anzahl von VMs erhalten Sie eine Antwort ähnlich der folgenden:

{
  "endTime": "2023-04-23T09:58:13.474-07:00",
  "id": "5053101474378293244",
  "insertTime": "2023-04-23T09:57:13.474-07:00",
  "instancesBulkInsertOperationMetadata": {
    "perLocationStatus": {
      "zones/us-central1-a": {
        "status": "DONE",
        "createdVmCount": 50,
        "targetVmCount": 50
      }
    }
  },
  "kind": "compute#operation",
  "name": "operation-1587661030638-5a3f823c143e3-e33bbfa3-bd72185c",
  "operationGroupId": "4653028658507445766",
  "operationType": "bulkInsert",
  "progress": 100,
  "selfLink": "https://www.googleapis.com/compute/v1/projects/my-project/zones/us-central1-a/operations/operation-1587661030638-5a3f823c143e3-e33bbfa3-bd72185c",
  "startTime": "2023-09-11T16:21:55.629-07:00",
  "status": "DONE",
  "targetId": "625521788110",
  "targetLink": "https://www.googleapis.com/compute/v1/projects/my-project",
  "user": "example@google.com",
  "zone": "https://www.googleapis.com/compute/v1/projects/my-project/zones/us-central1-a"
}

Weitere Informationen finden Sie in der Dokumentation zum Objekt instancesBulkInsertOperationMetadata.

Status einer einzelnen VM prüfen

Zum Prüfen des Status einer einzelnen VM, die aus einer Anfrage zum Erstellen von VMs im Bulk erstellt wurde, verwenden Sie die gcloud CLI oder die Compute Engine API.

gcloud

  1. Rufen Sie aus der von der Anfrage zurückgegebenen Operation den Wert des Attributs operationGroupId ab.

  2. Verwenden Sie das Attribut operationGroupId als Filter mit dem Befehl gcloud compute operations list, um alle Vorgänge und alle Zonen im Projekt nach VMs zu durchsuchen, die mit der regionalen oder zonalen Anfrage verknüpft sind:

    gcloud compute operations list \
       --filter=(operationGroupId=OPERATION_GROUP_ID)
    
  3. Führen Sie einen der folgenden Schritte aus, um die restlichen Attribute der VM zu erhalten:

    • In der Liste der Vorgänge steht targetLink für den Pfad der VM. Verwenden Sie den Befehl gcloud compute instances describe mit diesem Pfad als Namen der VM, um die Attribute der VM zu erhalten:

      gcloud compute instances describe VM_NAME
      
    • Verwenden Sie den Befehl gcloud compute instances list mit einem Filter, der die Namen der VMs aus der Liste der Vorgänge enthält:

      gcloud compute instances list VM_NAME \
         --filter=(name=VM_NAME_1) OR (name=VM_NAME_2)
      
    • Verwenden Sie den Befehl gcloud compute instances list, um die Attribute der VMs aus allen Zonen und Regionen abzurufen. Filtern Sie entweder nach einem Label, das für die Instanzen eindeutig ist, oder nach Namen der Nutzer:

      gcloud compute instances list \
         --filter=(name=VM_NAME_1) OR (name=VM_NAME_2)
      

REST

  1. Rufen Sie aus der von der Anfrage zurückgegebenen Operation den Wert des Attributs operationGroupId ab.

  2. Verwenden Sie das Attribut operationGroupId, um die Liste der VM-Vorgänge abzurufen, die der regionalen oder zonalen Anfrage zugeordnet sind:

    • Wenn Sie eine regionale Anfrage gesendet haben, verwenden Sie die Methode globalOperations.aggregatedList und geben Sie das Attribut operationGroupId als Filter ein, um in allen Vorgängen und Zonen im Projekt zu suchen.

      GET https://compute.googleapis.com/compute/v1/projects/PROJECT_NAME/aggregated/operations?filter=(operationGroupId=OPERATION_GROUP_ID)
      
    • Wenn Sie eine zonale Anfrage gesendet haben, verwenden Sie die Methode zoneOperations.get und fügen Sie das Attribut operationGroupId in den Anfragetext ein, um die Liste der Vorgänge in dieser Zone aufzurufen:

      GET https://compute.googleapis.com/compute/v1/projects/PROJECT_NAME/zones/ZONE/instances/bulkInsert
      
      {
      ...
      "operationGroupId":"OPERATION_GROUP_ID"
      ...
      }
      
  3. Führen Sie einen der folgenden Schritte aus, um die restlichen Attribute der VM zu erhalten:

    • In der Liste der Vorgänge steht targetLink für den Pfad der VM. Verwenden Sie die Methode instances.get mit diesem Pfad als Namen der VM, um alle Attribute der VM abzurufen:

      GET https://compute.googleapis.com/compute/v1/projects/PROJECT_NAME/zones/ZONE/instances/VM_NAME
      
    • Verwenden Sie die Methode instances.get mit einem Filter, der die Namen der VMs aus der Liste der Vorgänge enthält:

      GET https://compute.googleapis.com/compute/v1/projects/PROJECT_NAME/zones/ZONE/instances?filter=(name=VM_NAME_1) OR (name=VM_NAME_2)
      
    • Verwenden Sie die Methode instances.aggregatedList, um die Attribute der VMs aus allen Zonen und Regionen abzurufen. Filtern Sie entweder nach einem Label, das für die Instanzen eindeutig ist, oder nach Namen der Nutzer:

      GET https://compute.googleapis.com/compute/v1/projects/PROJECT_NAME/aggregated/instances?filter=(name=VM_NAME_1) OR (name=VM_NAME_2)
      

Pseudocode-Beispiele

Die folgenden Pseudocode-Beispiele zeigen, wie Anfragen zum Erstellen von VMs im Bulk angepasst werden.

VMs im Bulk in einer Region aus einer Reihe von Regionen erstellen

Der folgende Pseudocode beschreibt, wie 1.000 VMs in einer Region aus einer Reihe von Regionen erstellt werden. Wenn Sie versuchen, VMs im Bulk in einer Region aus einer Reihe von Regionen zu erstellen, prüft die Anfrage zuerst die Kapazität. Wenn nicht genug Kapazitäten vorhanden sind, schlägt die Anfrage sofort fehl und versucht es mit der nächsten Region in der Gruppe.

  1. Geben Sie die Anzahl der VMs an, die innerhalb einer Zone erstellt werden sollen.

    nTarget = 1000
    
  2. Geben Sie die Regionen an, in denen die VMs erstellt werden sollen.

    acceptableRegions = ["us-central1", "us-east1", "us-west1"]
    
  3. Wiederholen Sie die Regionen und versuchen Sie, die VMs in jeder Region zu erstellen, bis sie erfolgreich sind.

    for region in acceptableRegions:
      call bulk API: region=region, location-policy=location-policy, count=nTarget
      if request succeeds and the operation succeeds:
        break
    

VMs im Bulk in einer Zone auf einem Maschinentyp erstellen

Der folgende Pseudocode beschreibt, wie mehrere VMs in einer Zone auf einem bestimmten Maschinentyp erstellt werden. Wenn Sie versuchen, VMs auf demselben Maschinentyp im Bulk zu erstellen, prüft die Anfrage zuerst die Verfügbarkeit dieser Maschinentypen. Wenn nicht genügend verfügbarer Maschinentyp vorhanden ist, schlägt die Anfrage sofort fehl und versucht es mit dem nächsten Maschinentyp noch einmal.

  1. Geben Sie die Anzahl der zu erstellenden VMs und die Region an, in der sie erstellt werden sollen.

    nTarget = 1000
    region = "us-central1"
    
  2. Geben Sie die Maschinenfamilien an, für die die VMs erstellt werden sollen.

    acceptableMachineFamilies = ["n2","c2","e2","n1"]
    
  3. Iterieren Sie durch die Maschinentypen und versuchen Sie, die VMs so lange zu erstellen, bis dies erfolgreich ist.

    for family in acceptableMachineFamilies:
      call bulk APIs: region=region, count=nTarget, machineFamily=family
      if request succeeds and the operation succeeds:
        break
    

Mehr als 5.000 VMs in einer Zone erstellen

Wenn Sie VMs im Bulk erstellen, können Sie mit jeder Anfrage nur 5.000 VMs erstellen. Im folgenden Pseudocode wird beschrieben, wie mehr als 5.000 VMs in einer Zone durch Senden mehrerer Anfragen erstellt werden.

  1. Geben Sie die Anzahl der zu erstellenden VMs, einen Zähler für die Gesamtzahl der erstellten VMs, die Region, in der die VMs erstellt werden und eine Variable zum Speichern der Zone an, in der Compute Engine die VMs erstellt.

    nTarget = 10000
    nCreated = 0
    region = "us-central1"
    targetZone = ""
    
  2. Senden Sie eine erste Anfrage, um 5.000 VMs zu erstellen, die von der Anfrage zurückgegebene Zone zu speichern und den Zähler der Anzahl der erstellten VMs zu aktualisieren.

    call bulk API: region=region, count=5000
    targetZone = zone chosen by bulk API
    nCreated += # of VMs created
    
  3. Stellen Sie weitere Anfragen zum Erstellen von bis zu 5.000 VMs gleichzeitig in der Zone, bis Compute Engine die festgelegte Anzahl von VMs erstellt.

    while(nTarget - nCreated > 0):
      call bulk API: zone=targetZone, count=5000
      nCreated += # of VMs created
    

VMs im Bulk erstellen und ihren Status ansehen

Das folgende Verfahren zeigt Ihnen, wie Sie eine Gruppe von VMs mit vordefinierten Namen erstellen und dann deren Status aufrufen:

  1. Geben Sie die Anzahl der zu erstellenden VMs, die Zone, in der sie erstellt werden sollen, sowie eine Datenstruktur zur Speicherung der Namen an.

    nTarget = 1000
    targetZone = "us-central-1a"
    names = []
    
  2. Generieren Sie die Musternamen für die VMs und fügen Sie die Namen der Datenstruktur hinzu.

    for n in range(0, 1000):
      names.push("instance-%d".format(n))
    
  3. Erstellen Sie die VMs und geben Sie die Namen mit perInstanceProperties an.

    call bulk API(zone=targetZone, count=nTarget, names=perInstanceProperties)
    
  4. Rufen Sie die Details der VMs mithilfe der Methode instances.list mit einem Filter für die Namen der VMs ab, für die Sie die Details abrufen möchten.

    instances.list(filter=(name = "instance-1") OR (name = "instance-2") ...)
    

Nächste Schritte

Nachdem Sie VMs im Bulk erstellt haben, führen Sie einen oder beide der folgenden Schritte aus, um die Verwaltung dieser VMs zu vereinfachen: