VM-Instanzen aus Maschinen-Images erstellen


Nachdem Sie ein Maschinen-Image erstellt haben, können Sie damit Kopien der Quell-VM-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.

Vorbereitung

  • 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:

    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.

Beschränkungen

Die folgenden Einschränkungen gelten, wenn Sie VMs aus Maschinen-Images erstellen:

  • Sie können in 60 Minuten maximal 6 VMs aus einem Quell-Maschinen-Image erstellen. Wenn Sie dieses Limit überschreiten, schlägt der Erstellungsvorgang 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 VMs als das definierte Limit erstellen möchten (6 VMs in 60 Minuten), erstellen Sie zusätzliche Maschinen-Images von der Quell-VM oder kurzlebige Maschinen-Images aus den neuen VMs. Anschließend können Sie die erforderliche Anzahl von VMs aus den neuen Maschinen-Images erstellen.

  • Sie können mit der Google Cloud Console keine VMs aus Maschinen-Images mit angehängten regionalen nichtflüchtigen Speichern erstellen. Verwenden Sie das Google Cloud CLI oder REST und geben Sie die Parameter replicaZones und deviceName für jeden angehängten regionalen nichtflüchtigen Speicher an. Weitere Informationen finden Sie unter VM aus einem Maschinen-Image mit Attribut-Überschreibungen erstellen.

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

Verwenden Sie diese Methode, wenn Sie eine VM erstellen möchten, die vollständig auf dem Maschinen-Image basiert und keine Änderungen an den Attributen aufweist.

Console

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

    Zur Seite „Instanz erstellen“

  2. Klicken Sie auf Neue VM-Instanz aus Maschinen-Image.

  3. Wählen Sie das gewünschte Maschinen-Image aus und klicken Sie auf Weiter.

  4. Optional: Passen Sie die VM-Details an.

  5. Klicken Sie auf Erstellen.

gcloud

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

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

Ersetzen Sie dabei Folgendes:

  • VM_NAME: der Name der zu erstellenden VM.
  • ZONE: die Zone für die VM.
  • SOURCE_MACHINE_IMAGE_NAME: das Maschinen-Image, aus dem die VM erstellt werden soll.

Beispiel

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.

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

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

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": "VM_NAME",
  "sourceMachineImage": "SOURCE_MACHINE_IMAGE_URL"
}

Ersetzen Sie dabei Folgendes:

  • PROJECT_ID: Ihre Projekt-ID.
  • ZONE: die Zone für die VM.
  • VM_NAME: der Name der zu erstellenden VM.
  • SOURCE_MACHINE_IMAGE_URL: die vollständige oder teilweise URL des Maschinen-Images, das Sie zum Erstellen der VM verwenden 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

VM aus einem Maschinen-Image erstellen (mit Attribut-Überschreibungen)

Wenn Sie eine VM 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 VM 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 jeden angehängten regionalen nichtflüchtigen Speicher zusammen mit den deviceName des regionalen Laufwerks aus dem Maschinen-Image angeben.

  • Wenn die zum Generieren des Maschinen-Images verwendete Quell-VM und die neue VM zu demselben Projekt und derselben Region gehören, gilt Folgendes:

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

    • Sie müssen alle zonalen und regionalen Ressourcen für die neue VM überschreiben. Wenn Sie beispielsweise eine VM-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. Klicken Sie auf Neue VM-Instanz aus Maschinen-Image.

  3. Wählen Sie das gewünschte Maschinen-Image aus und klicken Sie auf Weiter.

  4. Optional: Passen Sie die VM-Details an.

  5. Klicken Sie auf Erstellen.

    Weitere Informationen zur Einrichtung finden Sie unter VM-Instanz aus einem Image 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

Mit der instances.insert() API können Sie bei der VM-Erstellung die Attribute von Maschinen-Images überschreiben. Geben Sie dafür im Anfragetext alle Felder an, die Sie überschreiben möchten.

Erstellen Sie mit der API 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 etwa den Maschinentyp ändern 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": "VM_NAME",
  "machineType": "zones/ZONE/machineTypes/NEW_MACHINE_TYPE",
  "sourceMachineImage": "SOURCE_MACHINE_IMAGE_URL"
}

Ersetzen Sie dabei Folgendes:

  • PROJECT_ID: die Projekt-ID.
  • ZONE: die Zone für die VM.
  • VM_NAME: der Name der zu erstellenden VM.
  • NEW_MACHINE_TYPE: der Maschinentyp, den Sie für die VM verwenden möchten.
  • SOURCE_MACHINE_IMAGE_URL: die vollständige oder Teil-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 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 nichtflüchtige Speicher mit der VM erstellen möchten, verwenden Sie eine Überschreibung für die Laufwerke, sodass Sie die Option replicaZones angeben können. Da das Feld disks ein wiederkehrendes Feld ist, müssen Sie die Laufwerkskonfiguration für alle angehängten Laufwerke und das Bootlaufwerk angeben, nicht nur für die regionalen Laufwerke.

POST /compute/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"
         ]
      }
    }
  ]
}

VM mit einem Maschinen-Image aus einem anderen Projekt erstellen

Wenn Sie eine VM mithilfe eines Maschinen-Image aus einem anderen Projekt erstellen, haben Sie möglicherweise keinen Zugriff auf das Dienstkonto, das diesem Quellprojekt zugeordnet ist. Wenn Sie eine VM 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 VM überschreiben.

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

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

  1. Gewähren Sie Zugriff auf die Maschinen-Images, die in einem anderen Projekt gespeichert sind.

    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 VM erstellt. Achten Sie darauf, dass die E-Mail so formatiert ist, dass sie das erforderliche Präfix enthält. Das Präfix muss eines der folgenden 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-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, um eine VM aus einem Maschinen-Image zu erstellen.

    gcloud compute instances create VM_NAME \
        --project=VM_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 dabei Folgendes:

    • VM_PROJECT_ID: die Projekt-ID des Projekts, in dem Sie die VM erstellen möchten.
    • VM_NAME: der Name der zu erstellenden VM.
    • ZONE: Die Zone für die VM.
    • MACHINE_IMAGE_PROJECT: die Projekt-ID des Projekts, in dem sich das Maschinen-Image befindet.
    • MACHINE_IMAGE_NAME: das Maschinen-Image, aus dem die VM erstellt werden soll.
    • SERVICE_ACCOUNT_EMAIL: die E-Mail-Adresse des Dienstkontos, das Sie an Ihre VM 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 dabei Folgendes:

      • HOST_PROJECT_ID ist die 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