Compute Engine-Instanzen aus Maschinen-Images erstellen


Nachdem Sie ein Maschinen-Image erstellt haben, können Sie damit Kopien der Quell-Compute-Instanz erstellen. Weitere Informationen zur Verwendung von Maschinen-Images finden Sie unter Gründe für die Verwendung von Maschinen-Images.

Ein Maschinen-Image enthält die meisten Informationen und Daten, die zum Erstellen einer Instanz erforderlich sind.

Maschinen-Images können nicht geändert werden. Bei der Erstellung einer Instanz aus einem Maschinen-Image können Sie jedoch fast alle Attribute des Maschinen-Images überschreiben.

Sie können Instanzen aus Maschinen-Images mit derGoogle Cloud Console, der Google Cloud CLI oder mit REST erstellen.

Hinweis

  • 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. 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 IAM-Rolle Compute Instance Admin (v1) (roles/compute.instanceAdmin.v1) für die Compute-Instanz oder das Projekt zu gewähren, um die Berechtigungen zu erhalten, die Sie zum Erstellen von Compute Engine-Instanzen aus Maschinenabbildern benötigen. Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.

Sie können die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.

Beschränkungen

Beim Erstellen von Instanzen aus Maschinen-Images gelten die folgenden Einschränkungen:

  • Sie können innerhalb von 60 Minuten maximal 6 Instanzen aus einem Quellmaschinen-Image erstellen. Wenn dieses Limit überschritten wird, schlägt der Vorgang zum Erstellen der Instanz fehl und gibt einen Fehler wie den folgenden zurück:

    Operation rate exceeded for resource 'projects/test/global/machineImages/machine-image-1'.
    Too frequent operations from the source resource.
    

    Wenn Sie mehr Instanzen als das festgelegte Limit (6 Instanzen in 60 Minuten) erstellen möchten, erstellen Sie zusätzliche Maschinen-Images aus der Quellinstanz oder kurzlebige Maschinen-Images aus den neuen Instanzen. Anschließend können Sie die erforderliche Anzahl von Instanzen aus den neuen Maschinen-Images erstellen.

  • Mit der Google Cloud Console können Sie keine Instanzen aus Maschinen-Images mit angehängten regionalen Laufwerken erstellen. Verwenden Sie die Google Cloud CLI oder REST und geben Sie die Parameter replicaZones und deviceName für jedes angeschlossene regionale Laufwerk an. Weitere Informationen finden Sie unter Instanz aus einem Maschinen-Image mit Attribut-Überschreibungen erstellen.

Instanz aus einem Maschinen-Image erstellen (kein Überschreiben)

Verwenden Sie diese Methode, wenn Sie eine Instanz erstellen möchten, die vollständig auf dem Maschinen-Image beruht, ohne die Attribute zu ändern.

Console

  1. Rufen Sie in der Google Cloud Console die Seite Instanz erstellen auf.

    Zur Seite „Instanz erstellen“

  2. Wählen Sie im Menü VM aus… erstellen die Option Maschinen-Images aus.

  3. Führen Sie im angezeigten Fenster VM aus Maschinen-Image erstellen die folgenden Schritte aus:

    1. Wählen Sie ein Maschinen-Image aus.

    2. Klicken Sie zum Erstellen und Starten der Instanz auf Erstellen.

gcloud

Verwenden Sie den Befehl gcloud compute instances create zum Erstellen einer Instanz aus einem Maschinen-Image.

gcloud compute instances create INSTANCE_NAME \
    --zone=ZONE \
    --source-machine-image=SOURCE_MACHINE_IMAGE_NAME

Ersetzen Sie Folgendes:

  • INSTANCE_NAME: der Name der Instanz
  • ZONE: Die Zone für die Instanz
  • SOURCE_MACHINE_IMAGE_NAME: das Maschinen-Image, aus dem die Instanz erstellt werden soll

Beispiel

Mit dem folgenden gcloud-Befehl können Sie beispielsweise eine Instanz namens my-instance in der Zone us-east1-b aus einem Maschinen-Image namens my-machine-image erstellen.

gcloud compute instances create my-instance \
    --zone=us-east1-b \
    --source-machine-image=my-machine-image

Nachdem die Instanz erstellt wurde, sieht die Ausgabe in etwa so aus:

Created [https://www.googleapis.com/compute/v1/projects/project-12345/zones/us-east1-b/instances/my-instance].
NAME               ZONE        MACHINE_TYPE   PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP   STATUS
my-instance        us-east1-b  e2-standard-2               192.0.2.1   203.224.0.113  RUNNING

REST

Erstellen Sie mit der API eine POST-Anfrage an die Methode instances.insert. Geben Sie im Anfragetext die folgenden Parameter an:

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

{
  "name": "INSTANCE_NAME",
  "sourceMachineImage": "SOURCE_MACHINE_IMAGE_URL"
}

Ersetzen Sie dabei Folgendes:

  • PROJECT_ID: Ihre Projekt-ID.
  • ZONE: Zone für die Instanz.
  • INSTANCE_NAME: ein Name für die Instanz.
  • SOURCE_MACHINE_IMAGE_URL: die vollständige oder teilweise URL des Maschinen-Images, mit dem Sie die Instanz erstellen möchten. Beispiel: Sie haben ein Maschinen-Image mit dem Namen my-machine-image in einem Projekt namens myProject. Dementsprechend sind die folgenden URLs gültig:

    • https://www.googleapis.com/compute/v1/projects/myProject/global/machineImages/my-machine-image
    • projects/myProject/global/machineImages/my-machine-image
    • global/machineImages/my-machine-image

Instanz aus einem Maschinen-Image mit Attribut-Überschreibungen erstellen

Wenn Sie eine Instanz erstellen möchten, die hauptsächlich auf dem Maschinen-Image beruht, jedoch mit einigen Änderungen, können Sie Überschreibungen verwenden. Dafür übergeben Sie beim Erstellen der Instanz Attribute, die die vorhandenen Attribute des Maschinen-Images überschreiben.

Achten Sie bei der Verwendung der Überschreibungsfunktion auf die folgenden Hinweise:

  • Beim Erstellen einer Instanz aus dem Maschinen-Image können Sie nur die Attribute des angehängten Laufwerks außer dem Namen des Laufwerks überschreiben.
  • Sie müssen den Parameter replicaZones für jedes angeschlossene regionale Laufwerk sowie den deviceName des regionalen Laufwerks aus dem Maschinen-Image angeben.

  • Wenn die Quellinstanz (zum Generieren des Maschinen-Images verwendet) und die neue Instanz zum selben Projekt und zur selben Region gehören, gilt Folgendes:

    • Die meisten Attribute der Quellinstanz und der neuen Instanz sind identisch. Zu den abweichenden Attributen gehören z. B. sitzungsspezifische IP-Adressen, die automatisch zugewiesen werden.
    • Falls die Quellinstanz noch vorhanden ist, wenn Sie eine neue Instanz erstellen, kann die neue Instanz nicht denselben Namen und dieselbe Zone wie die Quellinstanz verwenden.
  • Wenn die Quellinstanz und die neue Instanz zum selben Projekt gehören, aber in unterschiedlichen Regionen sind, gilt Folgendes:

    • Sie müssen alle zonalen und regionalen Ressourcen für die neue Instanz überschreiben. Wenn Sie beispielsweise eine Instanz aus einem Maschinen-Image erstellen, dessen Quellinstanz zu einer anderen Region gehört, müssen Sie regionale Ressourcen wie das Subnetzwerk und regionale Firewallregeln überschreiben. Globale Ressourcen wie Load-Balancer und Dienstkonten brauchen Sie jedoch nicht zu überschreiben, es sei denn, Sie möchten diese ändern.

Console

  1. Rufen Sie in der Google Cloud Console die Seite Instanz erstellen auf.

    Zur Seite „Instanz erstellen“

  2. Wählen Sie im Menü VM aus… erstellen die Option Maschinen-Images aus.

  3. Wählen Sie im angezeigten Fenster VM aus Maschinen-Image erstellen eine Vorlage aus und klicken Sie dann auf Anpassen.

  4. Optional: Geben Sie weitere Konfigurationsoptionen an. Weitere Informationen finden Sie unter Konfigurationsoptionen beim Erstellen einer Instanz.

  5. Klicken Sie zum Erstellen und Starten der Instanz auf Erstellen.

gcloud

Verwenden Sie den Befehl gcloud compute instances create, um eine Instanz aus einem Maschinen-Image zu erstellen, und geben Sie dabei die Attribute an, die Sie überschreiben möchten.

Mit dem folgenden gcloud-Befehl können Sie beispielsweise die VM my-instance in der Zone us-east1-b aus dem Maschinen-Image my-machine-image erstellen. In diesem Beispiel werden Überschreibungen angewendet, um den Maschinentyp zu ändern, die Hostwartungsrichtlinie zu beenden und einen regionalen nichtflüchtigen Speicher mit dem Namen regional-disk-0 zu konfigurieren.

gcloud compute instances create my-instance \
    --zone=us-east1-b \
    --source-machine-image=my-machine-image \
    --machine-type=e2-standard-2 \
    --maintenance-policy=TERMINATE \
    --create-disk=device-name=boot-device-0,boot=true,auto-delete=true \
    --create-disk=device-name=regional-disk-0,\
      replica-zones=^:^us-east1-b:us-east1-c,boot=false

REST

Wenn Sie die Eigenschaften des Maschinen-Images bei der Instanzerstellung überschreiben möchten, erstellen Sie eine POST-Anfrage an die Methode instances.insert. Fügen Sie im Anfragetext den Parameter sourceMachineImage und alle gewünschten Überschreibungen ein. Sie können alle Attribute einfügen, die Sie auch bei der normalen Instanzerstellung festlegen können. Wenn Sie beispielsweise den Maschinentyp überschreiben möchten, würde Ihr API-Aufruf den Parameter machineType enthalten.

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

{
  "name": "INSTANCE_NAME",
  "machineType": "zones/ZONE/machineTypes/NEW_MACHINE_TYPE",
  "sourceMachineImage": "SOURCE_MACHINE_IMAGE_URL"
}

Ersetzen Sie Folgendes:

  • PROJECT_ID: die Projekt-ID.
  • ZONE: Zone für die Instanz.
  • INSTANCE_NAME: ein Name für die Instanz.
  • NEW_MACHINE_TYPE: Der Maschinentyp, den Sie für die Instanz verwenden möchten.
  • SOURCE_MACHINE_IMAGE_URL: die vollständige oder teilweise URL des Maschinen-Images, mit dem Sie die Instanz erstellen möchten. Beispiel: Sie haben ein Maschinen-Image mit dem Namen my-machine-image in einem Projekt namens myProject. Dementsprechend sind die folgenden URLs gültig:

    • https://www.googleapis.com/compute/v1/projects/myProject/global/machineImages/my-machine-image
    • projects/myProject/global/machineImages/my-machine-image
    • global/machineImages/my-machine-image

Überschreibungsverhalten

Das Überschreibungsverhalten in der Compute Engine API folgt den Regeln des Formats „JSON Merge Patch“, das in RFC 7396 beschrieben ist. Zusammenfassend gelten die folgenden Regeln:

  • Wenn Sie ein grundlegendes Feld überschreiben, wird das entsprechende grundlegende Feld im Maschinen-Image durch den grundlegenden Feldwert in der Anfrage ersetzt. Zu den grundlegenden Feldern gehören Parameter wie machineType und name.
  • Wenn Sie ein wiederkehrendes Feld überschreiben, werden alle wiederkehrenden Werte für dieses Attribut durch die entsprechenden Werte in der Anfrage ersetzt. Wiederkehrende Felder sind in der Regel Attribute vom Typ list. Zum Beispiel sind disks und networkInterfaces wiederkehrende Felder.
  • Wenn Sie ein nested object (verschachteltes Objekt) überschreiben, wird das Objekt im Maschinen-Image mit der entsprechenden Objektspezifikation in der Anfrage zusammengeführt. Wenn sich ein verschachteltes Objekt in einem wiederkehrenden Feld befindet, wird das Feld gemäß den Regeln für wiederkehrende Felder behandelt. Labels sind eine Ausnahme von dieser Regel und werden als wiederkehrende Felder behandelt, obwohl sie vom Typ object sind.

Wenn Sie beispielsweise eine VM aus einem Maschinen-Image erstellen und regionale Laufwerke mit der VM erstellen möchten, verwenden Sie ein Überschreiben für die Laufwerke, damit Sie die Option replicaZones angeben können. Da es sich bei dem Feld disks um ein wiederkehrendes Feld handelt, müssen Sie die Laufwerkkonfiguration für alle angehängten Laufwerke und das Bootlaufwerk angeben, nicht nur für die regionalen Laufwerke.

POST https://compute.googleapis.com/compute/v1/projects/my-proj/zones/us-west1-a/instances
{
  "name": "vm-from-image",
  "sourceMachineImage": "global/machineImages/my-machine-image",
  "disks": [
    {
      "kind": "compute#attachedDisks",
      "boot": true,
      "autoDelete": true,
      "deviceName": "boot-device",
      "initializeParams": {
        "sourceImage": "projects/my-proj/global/images/my-image",
        "diskType": "projects/my-proj/zones/us-west1-a/diskTypes/pd-standard",
      }
    },
    {
      "kind": "compute#attachedDisk",
      "boot": false,
      "autoDelete": true,
      "deviceName": "regional-device-0",
      "initializeParams": {
         "diskType": "projects/my-proj/zones/us-west1-a/diskTypes/pd-standard",
         "replicaZones": [
            "projects/my-proj/zones/us-west1-a",
            "projects/my-proj/zones/us-west1-c"
         ]
      }
    }
  ]
}

Instanz mit einem Maschinen-Image aus einem anderen Projekt erstellen

Wenn Sie eine Instanz mit einem Maschinen-Image aus einem anderen Projekt erstellen, haben Sie möglicherweise keinen Zugriff auf das Dienstkonto, das diesem Quellprojekt zugeordnet ist. Wenn Sie eine Instanz aus einem Maschinen-Image erstellen möchten, das sich in einem anderen Projekt befindet, müssen Sie dafür sorgen, dass Sie Zugriff auf das Maschinen-Image haben, und das Dienstkonto-Attribut auf der neuen Instanz überschreiben.

Wenn Sie ein Maschinen-Image für Projekte freigeben, die ein freigegebenes VPC-Netzwerk verwenden, müssen Sie die Details der freigegebenen VPC explizit angeben, wenn Sie eine Instanz aus dem Maschinen-Image erstellen. Wenn Sie beispielsweise eine Instanz in einem Nicht-Hostprojekt erstellen, geben Sie die Details zur freigegebenen VPC des Hostprojekts mit den Flags --network, --subnet oder --network-interface an.

In den folgenden Abschnitten wird beschrieben, wie Sie mithilfe der Google Cloud CLI eine Instanz aus einem Maschinen-Image erstellen, das sich in einem anderen Projekt befindet.

  1. Gewähren Sie Zugriff auf das Maschinen-Image, das in einem anderen Projekt gespeichert ist.

    Berechtigungen können entweder für das Quellprojekt oder das Maschinen-Image erteilt werden. Verwenden Sie den Befehl gcloud compute machine-images add-iam-policy-binding, um die Berechtigungen für das Maschinen-Image zu erteilen.

    gcloud compute machine-images add-iam-policy-binding MACHINE_IMAGE_NAME \
        --project=MACHINE_IMAGE_PROJECT \
        --member='ACCOUNT_EMAIL' \
        --role='roles/compute.admin'
    

    Ersetzen Sie dabei Folgendes:

    • MACHINE_IMAGE_PROJECT: die Projekt-ID des Projekts, das das Quellmaschinen-Image enthält.
    • MACHINE_IMAGE_NAME: der Name des Maschinen-Images, dem Sie die Berechtigungsbindung hinzufügen möchten.
    • ACCOUNT_EMAIL: die E-Mail-Adresse des serviceAccount oder user, das bzw. der die Instanz erstellt. Achten Sie darauf, dass die E-Mail so formatiert ist, dass sie das erforderliche Präfix enthält. Das Präfix muss einer der folgenden Optionen sein:

      • user: Geben Sie diesen Wert an, wenn die E-Mail-Adresse mit einem Nutzerkonto verknüpft ist. Beispiel: user:user@example.com.
      • serviceAccount: geben Sie diesen Wert an, wenn die E-Mail-Adresse mit einem Dienstkonto verknüpft ist. Beispiel: serviceAccount:123456789000-compute@developer.gserviceaccount.com

    Beispiel

    Wenn Sie beispielsweise eine compute.admin-Bindung zum Maschinen-Image my-machine-image der E-Mail-Adresse des Dienstkontos 123456789000-compute@developer.gserviceaccount.com hinzufügen möchten, verwenden Sie den folgenden gcloud CLI-Befehl:

    gcloud compute machine-images add-iam-policy-binding my-machine-image \
        --project=machine-image-project \
        --member='serviceAccount:123456789000-compute@developer.gserviceaccount.com' \
        --role='roles/compute.admin'
    
  2. Gewähren Sie dem Nutzer, der den Befehl gcloud compute instances create ausführt, die Rolle Dienstkontonutzer (roles/iam.serviceAccountUser) für das Dienstkonto, das dem Maschinen-Image zugeordnet ist.

  3. Verwenden Sie den Befehl gcloud compute instances create zum Erstellen einer Instanz aus einem Maschinen-Image.

    gcloud compute instances create INSTANCE_NAME \
        --project=INSTANCE_PROJECT_ID \
        --zone=ZONE \
        --source-machine-image=projects/MACHINE_IMAGE_PROJECT/global/machineImages/MACHINE_IMAGE_NAME \
        --service-account=SERVICE_ACCOUNT_EMAIL \
        --subnet=SUBNET
    

    Ersetzen Sie Folgendes:

    • INSTANCE_PROJECT_ID: die Projekt-ID des Projekts, in dem Sie die Instanz erstellen möchten
    • INSTANCE_NAME: ein Name für die Instanz
    • ZONE: Die Zone für die Instanz
    • MACHINE_IMAGE_PROJECT: die Projekt-ID des Projekts, in dem sich das Maschinen-Image befindet.
    • MACHINE_IMAGE_NAME: das Maschinen-Image, aus dem die Instanz erstellt werden soll.
    • SERVICE_ACCOUNT_EMAIL: die E-Mail-Adresse des Dienstkontos, das Sie an Ihre Instanz anhängen möchten
    • SUBNET: Wenn sich das Subnetz und die Instanz im selben Projekt befinden, ersetzen Sie SUBNET durch den Namen eines Subnetzes, das sich in derselben Region wie die Instanz befindet.

      Wenn Sie ein Subnetz in einem freigegebenen VPC-Netzwerk angeben möchten, ersetzen Sie SUBNET durch einen String im folgenden Format:

      projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME
      

      Ersetzen Sie Folgendes:

      • HOST_PROJECT_ID: Projekt-ID des freigegebenen VPC-Hostprojekts
      • REGION: Die Region des Subnetzes.
      • SUBNET_NAME: Name des Subnetzes

      Beispiel

      Mit dem folgenden Befehl wird beispielsweise eine VM mit dem Namen my-instance in vm-project in der Zone us-east1-b aus einem Maschinen-Image namens my-machine-image erstellt.

      Das Flag --service-account gibt das Dienstkonto an, das Sie an die neu erstellte VM anhängen möchten. Wenn Sie dieses Flag nicht angeben, kann das Quelldienstkonto nicht für beide Projekte freigegeben werden und der Vorgang schlägt fehl.

      gcloud compute instances create my-instance \
       --project=vm-project \
       --zone=us-east1-b \
       --source-machine-image=projects/machine-image-project/global/machineImages/my-machine-image \
       --service-account=000123456789-compute@developer.gserviceaccount.com
      

      Nachdem die VM erstellt wurde, sieht die Ausgabe in etwa so aus:

      Created [https://www.googleapis.com/compute/v1/projects/project-12345/zones/us-east1-b/instances/my-instance].
      NAME               ZONE        MACHINE_TYPE   PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP   STATUS
      my-instance        us-east1-b  e2-standard-2               192.0.2.1   203.224.0.113  RUNNING
      

Nächste Schritte