Konfigurationsdateien

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.

Hierarchiegrafik von YAML-Diensten

Für kleine und einfache Projekte können alle Dateien der Anwendung in einem Verzeichnis gespeichert werden:

Hierarchiegrafik für kleine YAML-Dienste

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 werden
  • queue.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.