Chaque version d'un service est définie dans un fichier .yaml
, qui donne le nom du service et sa version. Le fichier YAML porte généralement le même nom que le service qu'il définit, mais ce n'est pas obligatoire. Si vous déployez plusieurs versions d'un service, vous pouvez créer plusieurs fichiers YAML dans le même répertoire, à savoir un pour chaque version.
Généralement, vous créez pour chaque service un répertoire contenant les fichiers YAML du service et le code source associé. Des fichiers de configuration facultatifs au niveau de l'application (dispatch.yaml
, cron.yaml
, index.yaml
et queue.yaml
) sont inclus dans le répertoire de premier niveau de l'application. L'exemple ci-dessous décrit trois services.
Dans service1
et service2
, les fichiers source se trouvent au même niveau que le fichier YAML. Dans service3
, il existe des fichiers YAML pour deux versions.
Pour les projets simples de petite taille, tous les fichiers de l'application peuvent se situer dans un même répertoire :
Chaque fichier YAML doit inclure un paramètre de version. Pour définir le service par défaut, vous pouvez explicitement inclure le paramètre service: default
ou l'exclure du fichier.
Le fichier de configuration de chaque service définit le type de scaling et la classe d'instance pour un service ou une version spécifique. Différents paramètres de scaling sont utilisés selon le type de scaling que vous indiquez. Si vous ne spécifiez pas ce type, le scaling automatique est utilisé par défaut. Les paramètres de scaling et de classe d'instance sont décrits dans la documentation de référence sur le fichier appengine-web.xml
.
Pour chaque service, vous pouvez également spécifier des paramètres qui mappent les requêtes URL à des scripts spécifiques et identifient les fichiers statiques pour améliorer l'efficacité du serveur. Ces paramètres sont également inclus dans le fichier yaml et sont décrits dans la documentation de référence sur le fichier appengine-web.xml
.
Service par défaut
Chaque application possède un seul service par défaut. Vous pouvez définir le service par défaut dans le fichier appengine-web.xml
avec le paramètre service: default
, mais ce n'est pas obligatoire. Tous les paramètres de configuration relatifs aux services peuvent s'appliquer au service par défaut.
Fichiers de configuration facultatifs
Ces fichiers de configuration contrôlent les fonctionnalités facultatives qui s'appliquent à tous les services d'une application :
dispatch.yaml
remplace les règles de routage par défaut en envoyant des requêtes entrantes à un service spécifique en fonction du chemin d'accès ou du nom d'hôte indiqué dans l'URL.queue.yaml
configure les files d'attente d'envoi et les files d'attente de retrait.index.yaml
spécifie les index dont l'application a besoin si vous utilisez des requêtes Datastore.cron.yaml
configure les tâches planifiées régulièrement qui fonctionnent à des heures définies ou à intervalles réguliers.
Pour déployer les mises à jour de ces fichiers de configuration sur App Engine, exécutez la commande suivante à partir du répertoire où ils se trouvent :
gcloud app deploy [CONFIG_FILE]
Exemple
Voici un exemple de configuration des différents fichiers dans une structure de répertoires WAR pour une application comportant deux services : un service par défaut qui gère les requêtes Web, ainsi qu'un autre service (nommé my-service
) pour le traitement en backend.
En supposant que le répertoire EAR de premier niveau est "my-application", définissez le fichier my-application/META-INF/appengine-application.xml
:
<?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>
Créez des répertoires WAR pour les deux services : my-application/default
et my-application/my-service
.
Créez maintenant un fichier appengine-web.xml
dans chaque fichier WAR, spécifiant les paramètres du service. Le fichier doit inclure un nom de version pour le service. Pour définir le service par défaut, vous pouvez explicitement inclure le paramètre <service>default</service>
ou l'exclure du fichier. Voici le fichier my-application/default/WEB-INF/appengine-web.xml
qui définit le service par défaut :
<?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>
Le fichier my-application/my-service/WEB-INF/appengine-web.xml
définit le service qui traitera les requêtes en arrière-plan :
<?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>
Enfin, définissez le fichier my-application/META-INF/application.xml
qui énumère les services. Notez que le service par défaut doit être le premier service répertorié.
<?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 ignorera les éléments <context-root>
. Par conséquent, les clients HTTP n'ont pas besoin de l'ajouter au chemin de l'URL lorsqu'ils définissent l'adresse d'un service.