Auf dieser Seite wird erläutert, wie Sie den Back-End-Code der API und den Extensible Service Proxy (ESP) in Google Kubernetes Engine, Compute Engine und der flexiblen App Engine-Umgebung bereitstellen.
Der genaue Ablauf der Bereitstellung hängt von der Plattform ab, auf der die API gehostet wird. Auf jeden Fall müssen in einem Schritt der Dienstname und eine Option, die ESP konfiguriert, an ESP übergeben werden. Nur so kann die aktuellste Cloud Endpoints-Dienstkonfiguration verwendet werden. Anhand dieser Informationen kann ESP die Endpoints-Konfiguration der API abrufen und Anfragen und Antworten weiterleiten, damit Endpoints die API verwalten kann.
Vorbereitung
Sie sollten Folgendes bereits haben:
- Sie haben ein Google Cloud Projekt erstellt.
- Konfigurierte Endpoints
- Eine bereitgestellte Endpoints-Konfiguration
Bereitstellung vorbereiten
Flexible App Engine-Umgebung
Abgesehen von einem kurzen zusätzlichen Konfigurationsschritt (nachfolgend beschrieben) erfolgt die Bereitstellung der API für die Verwaltung durch Endpoints genau wie die Bereitstellung einer anderen Anwendung in der flexiblen App Engine-Umgebung. In der App Engine-Dokumentation wird beschrieben, wie Sie:
- Konfigurationsdateien organisieren
-
die Konfigurationsdatei
app.yamlerstellen app.yaml-Dateien für einzelne Dienste konfigurieren, wenn Ihre Anwendung auf Mikrodiensten basiert (siehe Mehrere Dienstanwendungen bereitstellen)
Zur Bereitstellung der API in App Engine setzen Sie den Befehl gcloud app deploy ab. Dadurch wird mithilfe des Dienstes Container Builder automatisch ein Container-Image erstellt. Dieses Image wird anschließend in der flexiblen App Engine-Umgebung bereitgestellt.
Vor der Bereitstellung:
- Der Inhaber des Google Cloud Projekts muss die App Engine-Anwendung erstellen.
- Ihr Nutzerkonto muss die erforderlichen Berechtigungen enthalten.
Compute Engine
Damit Endpoints die API verwalten kann, müssen Sie den ESP sowie den Back-End-Servercode für die API installieren und konfigurieren. Sie müssen Docker auf Ihrer Compute Engine-VM-Instanz installieren, damit Sie das ESP-Docker-Image ausführen können, das über Artifact Registry kostenlos verfügbar ist.
Vor der Bereitstellung:
Im Folgenden werden die allgemeinen Schritte beschrieben, die erforderlich sind, bevor Sie die API und ESP in Compute Engine bereitstellen können. Grundsätzlich gehen Sie dabei genauso vor wie beim Ausführen des Back-End-Servercodes in Compute Engine.
- Erstellen, konfigurieren und starten Sie Ihre VM-Instanz. Entsprechende Informationen finden Sie in der Compute Engine-Dokumentation.
- Installieren Sie Docker Enterprise Edition (EE) oder Docker Community Edition (CE) auf der VM-Instanz. Siehe Docker installieren.
- Erstellen Sie einen Docker-Container für den Back-End-Servercode. Siehe Cloud-Build-Dokumentation.
- Verschieben Sie den Container in die Artifact Registry oder eine andere Registry.
- Überprüfen Sie, ob Sie folgende Vorgänge erfolgreich ausführen können:
- eine Verbindung zur VM-Instanz herstellen,
- das Docker-Image ausführen können, um den Back-End-Server auf der VM-Instanz zu starten (siehe Referenz zur Docker-Ausführung), und
- Anfragen an die API senden können.
GKE
Wenn Sie einen Cluster in der Google Cloud -Konsole erstellen, enthalten die OAuth-Bereiche, die dem Dienstkonto des Clusters gewährt werden, standardmäßig die von Endpoints benötigten Bereiche:
- Service Control: Aktiviert
- Service Management: Schreibgeschützt
Wenn Sie einen Cluster mit dem Befehl gcloud container clusters create oder mithilfe einer Konfigurationsdatei eines Drittanbieters erstellen, vergessen Sie nicht, die folgenden Bereiche anzugeben:
"https://www.googleapis.com/auth/servicecontrol""https://www.googleapis.com/auth/service.management.readonly"
Weitere Informationen finden Sie unter Was sind Zugriffsbereiche?.
Vor der Bereitstellung:
Wenn Sie die Manifestdatei der Bereitstellung um einen kleinen Abschnitt erweitern, können Sie das ESP-Docker-Image neben der containerisierten Anwendung auf Ihren Containerclustern ausführen. Im Folgenden wird beschrieben, welche allgemeinen Schritte erforderlich sind, bevor Sie Ihre API mit dem ESP in GKE bereitstellen können. Grundsätzlich gehen Sie dabei genauso vor wie beim Ausführen des Backend-Servercodes in GKE.
- Stellen Sie die containerisierte Anwendung auf den Containerclustern bereit. In der GKE-Dokumentation werden folgende Schritte beschrieben:
- Anwendung in einem Docker-Image verpacken
- Image in eine Registry hochladen
- Container-Cluster erstellen
- Anwendung auf dem Cluster bereitstellen
- Anwendung im Internet freigeben
- Überprüfen Sie, ob Sie folgende Vorgänge erfolgreich ausführen können:
- API-Server starten
- Anfragen an die API senden können.
API und ESP bereitstellen
Flexible App Engine-Umgebung
So stellen Sie die API und den ESP in App Engine bereit:
- Rufen Sie den Dienstnamen Ihrer API ab. Das ist der Name, den Sie im Feld
hostIhres OpenAPI-Dokuments angegeben haben. - Bearbeiten Sie die
app.yaml-Datei und fügen Sie einen Abschnitt namensendpoints_api_serviceein, der den Dienstnamen enthält. Sie können dieapp.yaml-Datei aus der Anleitung als Modell verwenden:Java Python Go PHP Ruby NodeJS Ersetzen Sie
ENDPOINTS-SERVICE-NAMEdurch den Dienstnamen der API.Fügen Sie die Laufzeit- und Umgebungsvariablen in die Konfigurationsdatei
app.yamlein.Beispiel:
runtime: nodejs env: flex endpoints_api_service: name: example-project-12345.appspot.com rollout_strategy: managed
Mit der Option
rollout_strategy: managedlegen Sie fest, dass der ESP die zuletzt bereitgestellte Dienstkonfiguration verwendet. Wenn Sie diese Option innerhalb von 5 Minuten nach der Bereitstellung einer neuen Dienstkonfiguration angeben, erkennt der ESP die Änderung und verwendet automatisch die neue Konfiguration. Wir empfehlen, diese Option anstelle einer konkreten Konfigurations-ID anzugeben, die vom ESP verwendet werden soll.Wenn Ihre Anwendung auf Mikrodiensten basiert, müssen Sie in jeder
app.yaml-Datei den Abschnittendpoints_api_serviceeinfügen. - Speichern Sie die
app.yaml-Datei (bzw. -Dateien). - Stellen Sie den Back-End-Code und den ESP in App Engine bereit:
gcloud app deploy
Da Sie den Abschnitt endpoints_api_service in die Datei app.yaml eingefügt haben, wird der ESP durch den Befehl gcloud app deploy in einem separaten Container in der flexiblen App Engine-Umgebung bereitgestellt und konfiguriert. Sämtliche Anfragen werden über ESP weitergeleitet. Dieser sendet Anfragen und Antworten zum und vom Container, in dem Ihr Back-End-Servercode ausgeführt wird.
Wenn Sie ESP für die Verwendung einer bestimmten Konfigurations-ID konfigurieren müssen:
- Fügen Sie im Abschnitt
endpoints_api_serviceder Dateiapp.yamldas Feldconfig_idein und legen Sie dafür eine bestimmte Konfigurations-ID fest. - Entfernen Sie entweder
rollout_strategy: managedoder legen Sierollout_strategyauffixedfest. Die Optionfixedkonfiguriert den ESP so, dass die inconfig_idangegebene Dienstkonfiguration verwendet wird. - Stellen Sie die API und den ESP wieder bereit:
gcloud app deploy
Es wird empfohlen, den ESP nicht für lange Zeit so zu konfigurieren, dass er eine bestimmte Konfigurations-ID verwendet. Andernfalls müssen Sie ihn nämlich nach jedem Bereitstellen einer aktualisierten Dienstkonfiguration neu starten, damit er sie verwendet.
So entfernen Sie eine bestimmte Konfigurations-ID:
- Entfernen Sie die Option
config_idaus der Dateiapp.yaml. - Fügen Sie die Option
rollout_strategy: managedein. - Setzen Sie den Befehl
gcloud app deployab.
Wenn Sie die Option rollout_strategy: managed verwenden, nehmen Sie config_id: YOUR_SERVICE_CONFIG_ID nicht in die Datei app.yaml auf. Andernfalls schlägt gcloud app deploy mit folgendem Fehler fehl:
config_id is forbidden when rollout_strategy is set to "managed".
Bei der erstmaligen Bereitstellung der API in der flexiblen App Engine-Umgebung kann es durch die Einrichtung der virtuellen Maschine (VM) und sonstiger Infrastruktur zu einer Verzögerung kommen. Weitere Informationen finden Sie unter Erfolgreiche Bereitstellung gewährleisten in der App Engine-Dokumentation.
Compute Engine
So stellen Sie die API und den ESP in Compute Engine mit Docker bereit:
- Stellen Sie eine Verbindung zur VM-Instanz her. Ersetzen Sie
INSTANCE_NAMEdurch den Namen der VM-Instanz:gcloud compute ssh INSTANCE_NAME
- Erstellen Sie Ihr eigenes Container-Netzwerk namens
esp_net.sudo docker network create --driver bridge esp_net
- Führen Sie eine Image-Instanz des Back-End-Servercodes aus und verbinden Sie diese mit dem Containernetzwerk
esp_net:sudo docker run \ --detach \ --name=YOUR_API_CONTAINER_NAME \ --net=esp_net \ gcr.io/YOUR_PROJECT_ID/YOUR_IMAGE:1.0- Ersetzen Sie
YOUR_API_CONTAINER_NAMEdurch den Namen des Containers. - Ersetzen Sie
YOUR_PROJECT_IDdurch die Google Cloud Projekt-ID, die Sie beim Hochladen des Images verwendet haben. - Ersetzen Sie
YOUR_IMAGEdurch den Namen des Images.
- Ersetzen Sie
- Rufen Sie den Dienstnamen Ihrer API ab. Das ist der Name, den Sie im Feld
hostIhres OpenAPI-Dokuments angegeben haben. - Führen Sie eine Instanz des ESP-Docker-Images aus:
sudo docker run \ --name=esp \ --detach \ --publish=80:8080 \ --net=esp_net \ gcr.io/endpoints-release/endpoints-runtime:1 \ --service=SERVICE_NAME \ --rollout_strategy=managed \ --backend=YOUR_API_CONTAINER_NAME:8080- Ersetzen Sie
SERVICE_NAMEdurch den Namen des Dienstes. - Ersetzen Sie
YOUR_API_CONTAINER_NAMEdurch den Namen des API-Containers.
Mit der Option
--rollout_strategy=managedlegen Sie fest, dass der ESP die zuletzt bereitgestellte Dienstkonfiguration verwendet. Wenn Sie diese Option innerhalb von 5 Minuten nach der Bereitstellung einer neuen Dienstkonfiguration angeben, erkennt der ESP die Änderung und verwendet automatisch die neue Konfiguration. Wir empfehlen, diese Option anstelle einer konkreten Konfigurations-ID anzugeben, die vom ESP verwendet werden soll. - Ersetzen Sie
Wenn Sie ESP für die Verwendung einer bestimmten Konfigurations-ID konfigurieren müssen:
- Fügen Sie die Option
--versionein und legen Sie dafür eine bestimmte Konfigurations-ID fest. - Entfernen Sie entweder die Option
--rollout_strategy=managedoder setzen Sie--rollout_strategyauffixed. Die Optionfixedkonfiguriert den ESP so, dass die in--versionangegebene Dienstkonfiguration verwendet wird. - Setzen Sie den Befehl
docker runnoch einmal ab.
Wenn Sie sowohl die Option --rollout_strategy=managed als auch --version angeben, startet der ESP mit der von Ihnen unter --version angegebenen Konfiguration, wird jedoch im verwalteten Modus ausgeführt und ruft die aktuellste Konfiguration ab.
Es wird empfohlen, den ESP nicht für lange Zeit so zu konfigurieren, dass er eine bestimmte Konfigurations-ID verwendet. Andernfalls müssen Sie ihn nämlich nach jedem Bereitstellen einer aktualisierten Dienstkonfiguration neu starten, damit er sie verwendet.
So entfernen Sie eine bestimmte Konfigurations-ID:
- Entfernen Sie die Option
--versionin den ESP-Flags fürdocker run. - Fügen Sie die Option
--rollout_strategy=managedein. - Geben Sie den Befehl
docker runaus, um den ESP neu zu starten.
Eine vollständige Liste der Optionen für den ESP-Start finden Sie unter ESP-Startoptionen.
GKE
So stellen Sie den ESP für GKE bereit:
- Rufen Sie den Dienstnamen der API ab. Das ist der Name, den Sie im Feld
hostdes OpenAPI-Dokuments konfiguriert haben. - Öffnen Sie die Manifestdatei der Bereitstellung (
deployment.yaml) und fügen Sie den folgenden Code in den Container-Abschnitt ein:containers: - name: esp image: gcr.io/endpoints-release/endpoints-runtime:1 args: [ "--http_port=8081", "--backend=127.0.0.1:8080", "--service=SERVICE_NAME", "--rollout_strategy=managed" ]Ersetzen Sie
SERVICE_NAMEdurch den Dienstnamen der API.Mit der Option
--rollout_strategy=managed"legen Sie fest, dass der ESP die zuletzt bereitgestellte Dienstkonfiguration verwendet. Wenn Sie diese Option innerhalb von 5 Minuten nach der Bereitstellung einer neuen Dienstkonfiguration angeben, erkennt der ESP die Änderung und verwendet automatisch die neue Konfiguration. Wir empfehlen, diese Option anstelle einer konkreten Konfigurations-ID anzugeben, die vom ESP verwendet werden soll. - Starten Sie den Kubernetes-Dienst mit dem Befehl kubectl create:
kubectl create -f deployment.yaml
Wenn Sie ESP für die Verwendung einer bestimmten Konfigurations-ID konfigurieren müssen:
- Fügen Sie die Option
--versionin die Manifestdatei der Bereitstellung ein und legen Sie dafür eine bestimmte Konfigurations-ID fest. - Entfernen Sie entweder
--rollout_strategy=managedoder legen Sie--rollout_strategyauffixedfest. Die Optionfixedkonfiguriert den ESP so, dass die in--versionangegebene Dienstkonfiguration verwendet wird. - Starten Sie den Kubernetes-Dienst:
kubectl create -f deployment.yaml
Wenn Sie sowohl die Option --rollout_strategy=managed als auch --version angeben, startet der ESP mit der von Ihnen unter --version angegebenen Konfiguration, wird jedoch im verwalteten Modus ausgeführt und ruft die neueste Konfiguration ab.
Es wird empfohlen, den ESP nicht für lange Zeit so zu konfigurieren, dass er eine bestimmte Konfigurations-ID verwendet. Andernfalls müssen Sie ihn nämlich nach jedem Bereitstellen einer aktualisierten Dienstkonfiguration neu starten, damit er diese verwendet.
So entfernen Sie eine bestimmte Konfigurations-ID:
- Entfernen Sie die Option
--versionaus der Manifestdatei der Bereitstellung. - Fügen Sie
--rollout_strategy=managedein. - Starten Sie den Kubernetes-Dienst:
kubectl create -f deployment.yaml
Eine vollständige Liste der Optionen für den ESP-Start finden Sie unter ESP-Startoptionen.
API-Aktivität verfolgen
Nach der Bereitstellung des ESP und des API-Back-Ends können Sie mit Tools wie etwa curl oder Postman Anfragen an die API senden. Wenn Sie als Antwort einen Fehler erhalten haben, lesen Sie die Informationen unter Fehlerbehebung bei Antwortfehlern.
Nachdem einige Anfragen gesendet wurden, haben Sie folgende Optionen:
Wechseln Sie zu Endpoints > Dienste, um die Aktivitätsdiagramme für die API anzusehen.
Es kann einige Momente dauern, bis die Anfrage in den Grafiken angezeigt wird.Sehen Sie sich die Anfragelogs für Ihre API auf der Cloud Logging-Seite an.
Nächste Schritte
- Fehlerbehebung bei der flexiblen App Engine-Bereitstellung
- Fehlerbehebung bei Cloud Endpoints auf Compute Engine
- Fehlerbehebung bei Cloud Endpoints in Google Kubernetes Engine