In diesem Dokument wird beschrieben, wie API-Anfragen formuliert und API-Antworten der Compute Engine API behandelt werden. Folgende Themen werden abgedeckt:
- Formulierung eines Anfragetextes.
- Bestimmung der Ressource-URIs, die für die Anfrage erforderlich sind.
- Verarbeitung von API-Antworten.
- Prüfen, ob eine API-Anfrage erfolgreich war.
Die Authentifizierung bei der API wird in diesem Dokument nicht behandelt. Weitere Informationen zur Authentifizierung bei der API finden Sie unter Bei Compute Engine authentifizieren.
Vorbereitung
- Machen Sie sich mit REST APIs vertraut.
- Sie sollten wissen, wie Sie sich authenticate.
API-Anfrage erstellen
Die Compute Engine API erwartet API-Anfragen im JSON-Format.
Um eine API-Anfrage zu senden, können Sie entweder eine direkte HTTP-Anfrage stellen, indem Sie Tools wie curl
oder httplib2
verwenden, oder Sie können eine der verfügbaren Clientbibliotheken verwenden.
Wenn Sie eine API-Anfrage stellen, die einen Anfragetext erfordert, z. B. eine POST
-, UPDATE
- oder PATCH
-Anfrage, enthält der Anfragetext Ressourcenattribute, die Sie in der Anfrage festlegen sollten. Mit dem folgenden curl
-Befehl wird beispielsweise eine POST
-Anfrage an den URI der Instanzressource gesendet. Die Anfrage erstellt eine Instanz mit den im Anfragetext definierten Attributen. Der Anfragetext wird durch das Flag -d
angezeigt:
curl -X POST -H "Authorization: Bearer [OAUTH_TOKEN]" -H "Content-Type: application/json" https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances -d '{ "disks":[ { "boot":"true", "initializeParams":{ "sourceImage":"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-10-buster-v20210122" } } ], "machineType":"https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/machineTypes/e2-standard-2", "name":"VM_NAME", "networkInterfaces":[ { "accessConfigs":[ { "name":"external-nat", "type":"ONE_TO_ONE_NAT" } ], "network":"https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/default" } ] }'
Der Image-URI hat eine andere Projekt-ID (debian-cloud
) als Ihre Projekt-ID, da die Images je nach Image-Typ zu unterschiedlichen Projekten gehören.
So werden beispielsweise alle öffentlich verfügbaren Debian-Images, die von Compute Engine angeboten werden, im Projekt debian-cloud
gehostet.
Verwenden Sie beim Verweis auf eine andere Ressource den voll qualifizierten Ressourcen-URI.
Das Attribut network
verwendet beispielsweise einen voll qualifizierten URI zum default
-Netzwerk.
Beispiel: API-Anfragen
Python
Java
Ressourcen-URIs erstellen
In der Compute Engine API wird ein Verweis auf eine andere Google Cloud-Ressource als voll qualifizierter URI angegeben:
https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/RESOURCE_TYPE/SPECIFIC_RESOURCE
Jedes Mal, wenn Sie ein Image, einen Maschinentyp, ein Netzwerk oder irgendeine andere Ressource angeben, müssen Sie den URI zu der Ressource angeben, wenn Sie die API benutzen. Bei Client-Tools wie der Google Cloud CLI und der Google Cloud Console bleibt diese Komplexität unsichtbar, denn diese übernehmen das Erstellen dieser Ressourcen-URIs für Sie, aber wenn Sie direkt mit der API interagieren, müssen Sie diese Ressourcen-URIs selbst erstellen.
Bei unterschiedlichen Arten von Ressourcen kann es Abweichungen bezüglich der Ressourcen-URIs geben. Eine zonale Ressource hat beispielsweise die Spezifikation zone
im URI:
https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/machineTypes/e2-standard-2
Regionale Ressourcen ersetzen die Spezifikation zone
durch die Spezifikation region
:
https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/addresses/ADDRESS_NAME
Globale Ressourcen haben ebenfalls die Spezifikation global
:
https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images/VM_NAME
Die Compute Engine API akzeptiert auch Teil-URIs, da der Dienst Informationen wie die Projekt-ID ableiten kann. Daher sind auch die folgenden Teilversionen der früheren URIs akzeptabel:
zones/ZONE/machineTypes/e2-standard-2
regions/REGION/addresses/ADDRESS_NAME
project/PROJECT_ID/global/images/VM_NAME
In den Teil-URIs haben die zonalen und regionalen URIs die Projekt-ID jeweils weggelassen, die Image-URI jedoch nicht. Dies liegt daran, dass öffentlich verfügbare Compute Engine-Images in anderen Projekten gehostet werden, z. B. debian-cloud
für alle Debian-Images und ubuntu-os-cloud
für alle Ubuntu-Images. Bevor Sie diese Images verwenden können, müssen Sie die entsprechende Projekt-ID angeben. Wenn Sie die Projekt-ID für Images weglassen, versucht Compute Engine, das Image in Ihrem Projekt zu finden, und die Anfrage schlägt fehl, da das Image nicht vorhanden ist.
Wenn Sie jedoch ein benutzerdefiniertes Image verwenden, das zu Ihrem Projekt gehört (demselben Projekt, in dem Sie diese Ressource erstellen), können Sie die Projektspezifikation weglassen, wenn Sie ein Image-URI bereitstellen.
Erforderliche Properties ermitteln
In der Referenzdokumentation zur Compute Engine API, die sowohl für die v1 als auch für die beta APIs verfügbar ist, werden alle möglichen Attribute beschrieben, die Sie für eine bestimmte Ressource festlegen können. Die Referenzdokumentation unterscheidet zwischen veränderlichen und nicht veränderlichen Attributen (in der Attributbeschreibung mit [Output Only]
gekennzeichnet). Um die erforderlichen Attribute für eine Ressource zu bestimmen, müssen Sie jedoch die spezifische Dokumentation für diese Aufgabe nachschlagen.
Wenn Sie beispielsweise eine Instanz erstellen, lesen Sie die Dokumentation Instanz aus einem Image erstellen, um zu sehen, welche API-Attribute für die Anfrage erforderlich sind. Wenn Sie in der API eine statische externe IP-Adresse erstellen möchten, lesen Sie die Dokumentation Statische externe IP-Adressen.
API-Anfragen validieren
So validieren Sie API-Anfragen:
- Suchen Sie in der Referenz zur Compute Engine API nach der Methode, die Ihr Code aufruft. Beispiel:
v1/compute.instances.insert
. Klicken Sie im Inhaltsmenü auf Jetzt testen. Dadurch wird das Fenster API testen geöffnet.
Unter Anfrageparameter müssen Sie kein Projekt oder keine Zone angeben, da die Validierung keine Übermittlung der Anfrage erfordert.
Fügen Sie Ihre Anfrage unter Anfragetext ein.
Fehlerhafte Elemente der Anfrage sind blau unterstrichen. Klicken Sie auf jeden unterstrichenen Abschnitt, um weitere Informationen zu dem zu behebenden Problem zu erhalten.
Behandlung von API-Antworten
Wenn Sie eine Anfrage stellen, durch die Daten mutiert (geändert) werden, gibt Compute Engine ein Operation
-Objekt zurück, das Sie abfragen können, um den Status der Vorgänge für Ihre Anfrage abzurufen. Die Operation
-Ressource sieht so aus:
{ "kind": "compute#operation", "id": "7127550864823803662", "name": "operation-1458856416788-52ed27a803e22-1c3bd86a-9e95017b", "zone": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE", "operationType": "insert", "targetLink": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/EXAMPLE_VM", "targetId": "4132355614508179214", "status": "PENDING", "user": "user@example.com", "progress": 0, "insertTime": "2016-03-24T14:53:37.788-07:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/operations/operation-1458856416788-52ed27a803e22-1c3bd86a-9e95017b" }
Wenn die ursprüngliche Anfrage eine zonale Ressource mutieren (ändern) soll, z. B. zum Erstellen eines Snapshots eines Laufwerks oder zum Beenden einer Instanz, gibt Compute Engine ein zoneOperations
-Object zurück. Regionale und globale Ressourcen geben ein regionOperations
- bzw. globalOperations
-Objekt zurück. Sie können den Status eines Vorgangs abrufen, indem Sie eine Anfrage ausführen, die die Methode get
oder wait
für die jeweilige Ressource Operation
verwendet und den name
des Vorgangs angibt.
Ihre Anfrage ist erst abgeschlossen, wenn der Status der Vorgangsressource Operation
als DONE
zurückgegeben wird. Dies kann je nach Art Ihrer Anfrage etwas Zeit in Anspruch nehmen. Wenn der Status der Ressource Operation
schließlich als DONE
zurückgegeben wird, sollten Sie prüfen, ob der Vorgang erfolgreich war oder ob Fehler aufgetreten sind.
Die folgende Antwort gibt mit dem Status DONE
beispielsweise an, dass der vorherige Vorgang jetzt abgeschlossen ist:
endTime: '2016-03-24T14:54:07.119-07:00' id: '7127550864823803662' insertTime: '2016-03-24T14:53:37.788-07:00' kind: compute#operation name: operation-1458856416788-52ed27a803e22-1c3bd86a-9e95017b operationType: insert progress: 100 selfLink: https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/operations/operation-1458856416788-52ed27a803e22-1c3bd86a-9e95017b startTime: '2016-03-24T14:53:38.397-07:00' status: DONE targetId: '4132355614508179214' targetLink: https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/EXAMPLE_VM user: user@example.com zone: https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE
Stellen Sie zur Bestätigung eine get
-Anfrage an die Ressource, um zu prüfen, ob sie vorhanden ist und ausgeführt wird. Beispiel:
GET /compute/v1/projects/PROJECT_ID/zones/ZONE/instances/EXAMPLE_VM { "cpuPlatform": "Intel Haswell", "creationTimestamp": "2016-03-24T14:53:37.170-07:00", "disks": [ ..[snip].. "selfLink": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/EXAMPLE_VM", "status": "RUNNING", "tags": { "fingerprint": "42WmSpB8rSM=" }, "zone": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE" }
Vorgänge abfragen
Sie können Code schreiben, um den Vorgang regelmäßig mit einer get
- oder wait
-Anfrage abzufragen, die zurückgegeben wird, wenn der Vorgangsstatus DONE
lautet.
Bei einer get
-Anfrage wird der Vorgang sofort zurückgegeben, unabhängig vom Status des Vorgangs. Sie müssen den Vorgang regelmäßig abfragen, um zu erfahren, wann er abgeschlossen ist.
Wenn Sie eine wait
-Anfrage stellen, wird die Anfrage zurückgegeben, wenn der Vorgang DONE
ist oder wenn sich die Anfrage der Frist von zwei Minuten nähert. Sie können wait
oder get
verwenden, um Ihre Vorgänge abzufragen. Die Methode wait
bietet jedoch bestimmte Vorteile gegenüber der Methode get
:
- Sie können Ihre Clients so einrichten, dass sie den Vorgangsstatus weniger häufig abfragen, und somit die Abfragen pro Sekunde der Compute Engine API reduzieren.
- Die durchschnittliche Latenz zwischen der Fertigstellung des Vorgangs und dem Zeitpunkt, zu dem der Client über die Fertigstellung des Vorgangs informiert wird, reduziert sich erheblich, da der Server antwortet, sobald der Vorgang abgeschlossen ist.
- Die Methode bietet begrenzte Wartezeiten. Die Methode wartet nicht mehr als die standardmäßige HTTP-Zeitüberschreitung (2 Minuten) und gibt dann den aktuellen Status des Vorgangs zurück, der
DONE
oder "Noch in Bearbeitung" sein kann.
Die Methode wait
ist eine Best-Effort-API. Wenn der Server überlastet ist, wird die Anfrage möglicherweise zurückgegeben, bevor sie die Standardfrist erreicht oder nachdem nur null Sekunden gewartet wurde. Es wird auch nicht garantiert, dass die Methode nur zurückgegeben wird, wenn der Vorgang den Status DONE
hat. Wenn sich die Anfrage beispielsweise der Frist von 2 Minuten nähert, wird die Methode auch dann zurückgegeben, wenn der Vorgang nicht abgeschlossen ist. Zur Prüfung Ihrer Vorgänge empfehlen wir, die Methode wait
oder get
in einer Wiederholungsschleife mit zwischengeschaltetem Ruhemodus zu verwenden, um den Vorgangsstatus regelmäßig abzufragen. Das maximale Wiederholungsintervall sollte die Mindestaufbewahrungsdauer für Vorgänge nicht überschreiten.
Beispielabfragen
In den folgenden Beispielen wird die get
-Methode verwendet. Sie können die get
-Methode durch die wait
-Methode ersetzen: