Jede Version eines Dienstes ist in einer .yaml
-Datei definiert. Sie gibt den Namen und die Version des Dienstes an. Die YAML-Datei hat in der Regel den gleichen Namen wie der durch sie definierte Dienst. Dies ist aber nicht unbedingt erforderlich. Wenn Sie mehrere Versionen eines Dienstes bereitstellen, können Sie mehrere YAML-Dateien (eine für jede Version) im selben Verzeichnis erstellen.
In der Regel erstellen Sie für jeden Dienst ein Verzeichnis, das die YAML-Dateien des Dienstes und den zugehörigen Quellcode enthält. Optionale Konfigurationsdateien auf Anwendungsebene (dispatch.yaml
, cron.yaml
, index.yaml
und queue.yaml
) befinden sich im übergeordneten Anwendungsverzeichnis. Das folgende Beispiel zeigt drei Dienste.
In service1
und service2
befinden sich die Quelldateien auf derselben Ebene wie die YAML-Datei. In service3
gibt es YAML-Dateien für zwei Versionen.
Für kleine und einfache Projekte können alle Dateien der Anwendung in einem Verzeichnis gespeichert werden:
Jede YAML-Datei muss einen Versionsparameter enthalten. Sie können den Parameter service: default
explizit in die Datei einfügen oder den Dienstparameter weglassen, um den Standarddienst zu definieren.
Die Konfigurationsdatei eines jeden Dienstes definiert den Skalierungstyp und die Instanzklasse für einen bestimmten Dienst bzw. eine bestimmte Version. Abhängig vom angegebenen Typ der Skalierung werden unterschiedliche Skalierungsparameter verwendet. Wenn Sie keine Skalierung angeben, wird Autoscaling als Standardeinstellung verwendet. Die Einstellungen für die Skalierung und die Instanzklasse werden in der Referenzdokumentation zu appengine-web.xml
beschrieben.
Für jeden Dienst können Sie auch Einstellungen festlegen, die URL-Anfragen bestimmten Skripts zuordnen und statische Dateien für bessere Servereffizienz ermitteln. Diese Einstellungen sind auch in der YAML-Datei enthalten und werden in der Referenzdokumentation zu appengine-web.xml
beschrieben.
Standarddienst
Jeder Anwendung ist ein einzelner Standarddienst zugeordnet. Sie können den Standarddienst in der Datei appengine-web.xml
mit der Einstellung service: default
definieren. Dies ist jedoch nicht erforderlich. Alle für die Dienste relevanten Konfigurationsparameter können auch auf den Standarddienst angewendet werden.
Optionale Konfigurationsdateien
Die folgenden Konfigurationsdateien steuern optionale Funktionen, die für alle Dienste in einer Anwendung gelten:
dispatch.yaml
überschreibt Standardregeln für Routing, indem eingehende Anfragen anhand des Pfads oder Hostnamens in der URL an einen bestimmten Dienst gesendet werdenqueue.yaml
konfiguriert sowohl Push- als auch Pull-Warteschlangen.index.yaml
gibt an, welche Indexe Ihre Anwendung bei Verwendung von Datastore-Abfragen benötigt.cron.yaml
konfiguriert regelmäßig geplante Aufgaben, die zu festgelegten Zeiten oder in regelmäßigen Intervallen ausgeführt werden.
Wenn Sie Aktualisierungen dieser Konfigurationsdateien in App Engine bereitstellen möchten, führen Sie in dem Verzeichnis, in dem sie sich befinden, den folgenden Befehl aus:
gcloud app deploy [CONFIG_FILE]
Beispiel
Im Folgenden finden Sie ein Beispiel für die Konfiguration der verschiedenen Dateien in einer WAR-Verzeichnisstruktur für eine Anwendung mit zwei Diensten: einem Standarddienst zur Verarbeitung von Webanfragen und einem weiteren Dienst mit dem Namen my-service
für die Backend-Verarbeitung.
Wenn das EAR-Verzeichnis der obersten Ebene „my-application“ lautet, definieren Sie die Datei my-application/META-INF/appengine-application.xml
so:
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<appengine-application xmlns="http://appengine.google.com/ns/1.0">
<application>my-application</application>
</appengine-application>
Erstellen Sie WAR-Verzeichnisse für die beiden Dienste my-application/default
und my-application/my-service
.
Erstellen Sie nun in jedem WAR-Verzeichnis eine appengine-web.xml
-Datei, die die Parameter für den Dienst angibt. Die Datei muss einen Versionsnamen für den Dienst enthalten. Sie können den Parameter <service>default</service>
zur Definition des Standarddienstes explizit in die Datei einfügen oder daraus weglassen. Hier definiert die Datei my-application/default/WEB-INF/appengine-web.xml
den Standarddienst:
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
<application>my-application</application>
<module>default</module>
<version>uno</version>
<threadsafe>true</threadsafe>
</appengine-web-app>
Die Datei my-application/my-service/WEB-INF/appengine-web.xml
definiert den Dienst, der Hintergrundanfragen verarbeiten soll:
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
<application>my-application</application>
<module>my-service</module>
<version>uno</version>
<threadsafe>true</threadsafe>
<manual-scaling>
<instances>5</instances>
</manual-scaling>
</appengine-web-app>
Definieren Sie abschließend die my-application/META-INF/application.xml
-Datei, in der die Dienste aufgezählt werden. Beachten Sie, dass der Standarddienst der erste aufgelistete Dienst sein muss.
<?xml version="1.0"
encoding="UTF-8"?>
<application
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/application_5.xsd"
version="5">
<description>GAE Java SuperFun app</description>
<display-name>SuperFun</display-name>
<!-- Services -->
<!-- The default service should be listed first -->
<module>
<web>
<web-uri>default</web-uri>
<context-root>default</context-root>
</web>
</module>
<module>
<web>
<web-uri>my-service</web-uri>
<context-root>my-service</context-root>
</web>
</module>
</application>
App Engine ignoriert die <context-root>
-Elemente, d. h., dass HTTP-Clients sie beim Adressieren eines Dienstes nicht dem URL-Pfad voranstellen müssen.