ID de la région
Le REGION_ID
est un code abrégé que Google attribue en fonction de la région que vous sélectionnez lors de la création de votre application. Le code ne correspond pas à un pays ou une province, même si certains ID de région peuvent ressembler aux codes de pays et de province couramment utilisés. Pour les applications créées après février 2020, REGION_ID.r
est inclus dans les URL App Engine. Pour les applications existantes créées avant cette date, l'ID de région est facultatif dans l'URL.
En savoir plus sur les ID de région
Vous ne devez utiliser le fichier appengine-web.xml
pour configurer votre application que si vous migrez une application existante de l'environnement d'exécution Java 8 d'App Engine vers la dernière version Java compatible et que vous souhaitez utiliser l'ancienne version services groupés.
Si vous utilisez un appengine-web.xml
dans votre projet, le fichier app.yaml
est automatiquement généré lors du déploiement.
Les applications Java App Engine utilisent un fichier de configuration nommé appengine-web.xml
pour spécifier les informations concernant votre application et identifier les fichiers statiques (tels que les images) dans le fichier WAR
de l'application ainsi que les fichiers de ressources utilisés par l'application.
Syntaxe
Toute application Java App Engine doit comporter un fichier appengine-web.xml
dans son fichier d'archives WAR, dans le répertoire WEB-INF/
. Il s'agit d'un fichier XML dont l'élément racine est <appengine-web-app>
.
Vous trouverez la définition du type de document et les spécifications de schéma du fichier appengine-web.xml
dans le répertoire docs/
du SDK.
Élément | Description |
---|---|
<application> |
Non obligatoire si vous déployez votre application à l'aide d'outils basés sur le SDK Google Cloud, tels que la commande |
|
Facultatif. Si vous souhaitez utiliser les anciens services groupés App Engine pour des environnements d'exécution de deuxième génération, définissez ce champ sur |
|
Facultatif et uniquement pour les environnements d'exécution de deuxième génération. Remplace le point d'entrée par défaut, qui est la ligne de commande du processus qui démarre l'application Java. Par défaut, l'entrypoint généré pour une classe d'instance F4 (les paramètres de mémoire sont calculés à partir de la classe d'instance) équivaut à la configuration suivante : <appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <entrypoint> java -showversion -Xms32M -Xmx819M -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:+PrintCommandLineFlags --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.nio.charset=ALL-UNNAMED --add-opens java.logging/java.util.logging=ALL-UNNAMED --add-opens java.base/java.util.concurrent=ALL-UNNAMED -Dclasspath.runtimebase=/base/java_runtime -Djava.class.path=/base/java_runtime/runtime-main.jar -Djava.library.path=/base/java_runtime: com/google/apphosting/runtime/JavaRuntimeMainWithDefaults --fixed_application_path=/workspace /base/java_runtime </entrypoint> </appengine-web-app>
Vous pouvez modifier la configuration pour ajouter des indicateurs de processus JVM supplémentaires ou définir votre propre processus de démarrage.
Notez que l'application est déployée dans le répertoire |
<async-session-persistence> |
Facultatif. Il est possible de réduire la latence de la requête en configurant votre application pour une écriture asynchrone des données de session HTTP dans le datastore : <async-session-persistence enabled="true" /> Avec la persistance de session asynchrone activée, App Engine soumet une tâche de file d'attente de tâches pour écrire des données de session dans le datastore avant de les écrire dans Memcache. Par défaut, la tâche sera soumise à la file d'attente "default" (par défaut). Si vous souhaitez utiliser une autre file d'attente, ajoutez l'attribut "queue-name" comme suit : <async-session-persistence enabled="true" queue-name="myqueue"/> Les données de session sont toujours écrites de manière synchrone dans le memcache. Si une requête essaie de lire les données de session alors que le memcache n'est pas disponible (ou que les données de session ont été vidées), elle basculera sur Datastore, qui ne dispose peut-être pas encore des données de session les plus récentes. Cela signifie que la persistance de session asynchrone peut amener votre application à afficher des données de session obsolètes. Cependant, pour la plupart des applications, l'avantage du temps de latence compense largement le risque encouru. |
<auto-id-policy> |
Facultatif. Si vous configurez automatiquement des identifiants d'entité, vous pouvez modifier la méthode employée en définissant une règle d'ID automatique. Les options suivantes sont valides :
|
<automatic-scaling> |
Facultatif. Pour une explication complète, consultez la section Mise à l'échelle automatique. |
<basic-scaling> |
Facultatif. Pour une explication complète, consultez la section relative au scaling de base. |
<env-variables> |
Facultatif.
Le fichier <env-variables> <env-var name="DEFAULT_ENCODING" value="UTF-8" /> </env-variables> Pour éviter les conflits avec votre environnement local, le serveur de développement ne définit pas de variables d'environnement basées sur ce fichier et requiert que ces variables soient déjà définies dans l'environnement local avec des valeurs correspondantes. export DEFAULT_ENCODING="UTF-8" dev_appserver war Lorsqu'il est déployé dans App Engine, l'environnement est créé avec ces variables déjà définies. |
<inbound-services> |
Facultatif.
Avant qu'une application puisse recevoir un e-mail, elle doit être configurée pour activer le service.
Afin d'activer le service pour une application Java, vous devez inclure une section Le service entrant suivant est disponible :
|
<instance-class> |
Facultatif. Taille de la classe d'instance pour ce module. Les classes d'instance suivantes sont disponibles lorsque vous spécifiez différentes options de scaling :
|
<manual-scaling> |
Facultatif. Pour une explication complète, consultez la section relative au scaling manuel. |
<precompilation-enabled> |
Facultatif. App Engine utilise un processus de "précompilation" avec le bytecode Java d'une application pour améliorer les performances de l'application au sein de l'environnement d'exécution Java. Le code précompilé fonctionne de la même manière que le bytecode d'origine. Si, pour une raison quelconque, vous préférez que votre application n'utilise pas la précompilation, il vous est possible de la désactiver en insérant le code suivant dans le fichier <precompilation-enabled>false</precompilation-enabled> |
<module> |
Remarque : Les modules sont maintenant appelés services et les services sont toujours déclarés dans les fichiers Obligatoire si vous créez un service. Facultatif pour le service par défaut. Un nom doit avoir été attribué à chaque service et à chaque version. Il peut contenir des chiffres, des lettres et des traits d'union. Il ne peut pas comporter plus de 63 caractères, commencer ou se terminer par un trait d'union ni contenir la chaîne "-dot". Choisissez un nom unique pour chaque service et chaque version. N'utilisez pas le même nom pour plusieurs services ou versions. Consultez également l'élément service. |
<public-root> |
Facultatif.
La valeur L'exemple suivant permet de mapper le chemin d'URL <public-root>/static</public-root> |
<resource-files> |
Facultatif. Les fichiers répertoriés dans l'élément Un élément
Les fichiers de ressources App Engine sont lus à l'aide de |
<runtime> |
Pour utiliser la dernière version Java compatible, vous devez spécifier cette entrée avec la valeur <runtime>java21</runtime> |
<service> |
Les services étaient anciennement appelés modules. Actuellement, seules les commandes gcloud app sont compatibles avec la définition d'un service comme suit : |
<service-account> |
Facultatif. L'élément <service-account>[SERVICE_ACCOUNT_NAME]@[PROJECT_ID].iam.gserviceaccount.com</service-account> |
<sessions-enabled> |
Facultatif. App Engine comprend une mise en œuvre de sessions, à l'aide de l'interface de session du servlet. La mise en œuvre stocke les données de session dans Datastore pour la persistance, et utilise également le memcache pour la rapidité. Au même titre que la plupart des autres conteneurs du servlet, les attributs de session définis à l'aide de "session.setAttribute()" pendant la requête sont conservés à l'issue de cette requête.
Cette fonctionnalité est désactivée par défaut. Pour l'activer, entrez le code suivant dans le fichier <sessions-enabled>true</sessions-enabled>
L'implémentation crée des entités Datastore de type Remarque : App Engine stocke les données de session dans Datastore et Memcache. Toutes les valeurs stockées dans la session doivent donc mettre en œuvre l'interface Consultez l'élément |
<ssl-enabled> |
Facultatif. Par défaut, un utilisateur peut accéder à n'importe quelle URL via HTTP ou HTTPS. À l'aide du fichier descripteur de déploiement, vous pouvez configurer une application de manière à forcer l'utilisation du protocole HTTPS pour certaines URL. Consultez la section Descripteur de déploiement : URL sécurisées. Pour interdire l'utilisation du protocole HTTPS pour l'application, insérez le code suivant dans le fichier <ssl-enabled>false</ssl-enabled> Toutefois, dans l'environnement d'exécution Java, il n'est pas possible d'interdire le protocole HTTPS pour certains chemins d'URL seulement. |
<static-error-handlers> |
Facultatif.
Lorsque certaines erreurs se produisent, App Engine diffuse une page d'erreur générique. Vous pouvez configurer votre application de sorte qu'elle diffuse un fichier statique personnalisé au lieu de ces pages d'erreur génériques, tant que les données d'erreur personnalisées sont inférieures à 10 kilo-octets. Vous pouvez configurer la diffusion de fichiers statiques différents pour chaque code d'erreur pris en charge, en les spécifiant dans le fichier <static-error-handlers> <handler file="default_error.html" /> <handler file="over_quota.html" error-code="over_quota" /> </static-error-handlers> Avertissement : Veillez à ce que le chemin du fichier à diffuser en cas d'erreur ne chevauche pas les chemins vers le gestionnaire de fichiers statiques.
Chaque entrée
L'attribut
Vous pouvez éventuellement spécifier un élément |
<static-files> |
Facultatif.
L'élément Un élément
<static-files> <include path="/my_static-files" > <http-header name="Access-Control-Allow-Origin" value="http://example.org" /> </include> </static-files> |
<system-properties> |
Facultatif. Le fichier <system-properties> <property name="myapp.maximum-message-length" value="140" /> <property name="myapp.notify-every-n-signups" value="1000" /> <property name="myapp.notify-url" value="http://www.example.com/signupnotify" /> </system-properties> <env-variables> <env-var name="DEFAULT_ENCODING" value="UTF-8" /> </env-variables> Facultatif. Vous pouvez configurer un connecteur HTTP pour améliorer l'utilisation du processeur et de la mémoire. <system-properties> <property name="appengine.use.httpconnector" value="true"/> </system-properties> À partir de Java 21, vous pouvez configurer votre serveur Web Java pour qu'il utilise des threads virtuels. Par exemple : <system-properties> <property name="appengine.use.virtualthreads" value="true"/> </system-properties>Pour en savoir plus sur la compatibilité avec les threads, consultez la page Jetty 12 : Compatibilité avec les threads virtuels. |
<url-stream-handler> |
Facultatif. Les valeurs possibles sont La valeur par défaut est Si vous définissez <url-stream-handler>urlfetch</url-stream-handler> |
<version> |
L'élément
Les noms des versions doivent commencer par une lettre pour les distinguer des instances numériques qui sont toujours spécifiées par un nombre. Cela évite toute ambiguïté avec les URL comme |
<warmup-requests-enabled> |
Facultatif. Valeur par défaut : "true". Les requêtes de préchauffage sont activées par défaut pour les applications Java.
Lorsque les requêtes de préchauffage sont activées, App Engine émet des requêtes GET auprès de Pour désactiver les requêtes de préchauffage, spécifiez la valeur <warmup-requests-enabled>false</warmup-requests-enabled> |
<vpc-access-connector> |
Facultatif.
Configure votre application pour utiliser un connecteur d'accès au VPC sans serveur afin d'envoyer des requêtes à des ressources internes du réseau VPC. Spécifiez le nom complet d'un connecteur dans l'élément <vpc-access-connector> <name>projects/[PROJECT_ID]/locations/[REGION]/connectors/[CONNECTOR_NAME]</name> </vpc-access-connector> Pour en savoir plus, consultez la page Se connecter aux ressources internes d'un réseau VPC. |
Éléments de scaling
Le tableau suivant répertorie les options permettant de définir le type de scaling de votre application.
Pour comparer les fonctionnalités de performances des types de scaling, consultez la section Scaling des instances dynamiques.
Élément | Description |
---|---|
<automatic-scaling> |
Facultatif. Le scaling automatique est défini avec une classe d'instance L'élément Cet élément peut contenir les éléments suivants :
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <application>simple-app</application> <module>default</module> <version>uno</version> <instance-class>F2</instance-class> <automatic-scaling> <target-cpu-utilization>0.65</target-cpu-utilization> <min-instances>5</min-instances> <max-instances>100</max-instances> <max-concurrent-requests>50</max-concurrent-requests> </automatic-scaling> </appengine-web-app> |
<basic-scaling> |
Facultatif.
L'élément Cet élément peut contenir les éléments suivants :
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <application>simple-app</application> <module>default</module> <version>uno</version> <instance-class>B8</instance-class> <basic-scaling> <max-instances>11</max-instances> <idle-timeout>10m</idle-timeout> </basic-scaling> </appengine-web-app> |
<manual-scaling> |
Facultatif.
L'élément Cet élément peut contenir les éléments suivants :
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <application>simple-app</application> <module>default</module> <version>uno</version> <instance-class>B8</instance-class> <manual-scaling> <instances>5</instances> </manual-scaling> </appengine-web-app> |
Éléments de préproduction
Une grande partie du travail effectué lors d'un déploiement est réalisé localement au cours d'une étape de préparation appelée préproduction, où les fichiers JAR sont assemblés, les fichiers JSP compilés, etc. Si nécessaire, vous pouvez configurer certaines parties du comportement de préproduction, à l'aide des éléments de préproduction présents dans le fichier de configuration de l'application. La plupart des applications seront correctement déployées sans configuration manuelle du comportement de préproduction. Si votre application ne se déploie pas, vous devrez peut-être configurer la préproduction à l'aide des options présentées ci-dessous.
Élément | Description |
---|---|
<staging> |
Facultatif. Pour la plupart des applications, il n'est pas nécessaire de modifier le comportement par défaut. L'élément "staging" vous permet de spécifier, si nécessaire, une configuration de préproduction particulière pour le déploiement. Cet élément peut contenir les éléments suivants :
Exemple : <staging> <delete-jsps>false</delete-jsps> </staging> |
Options de préproduction par défaut
Les valeurs par défaut pour les options de préproduction diffèrent selon que vous utilisez des outils basés sur Google Cloud SDK, tels que la gcloud CLI, ou les plug-ins basés sur Google Cloud SDK Maven, Gradle, Eclipse ou IntelliJ.
Élément de préproduction | Valeurs par défaut basées sur le SDK App Engine | Valeurs par défaut basées sur le SDK Google Cloud |
---|---|---|
enable-jar-splitting |
false |
true |
jar-splitting-excludes |
NA | N/A |
disable-jar-jsps |
false |
false |
enable-jar-classes |
false |
true . Cet élément peut influencer l'ordre de chargement des classes. Si votre application dépend d'un certain ordre utilisant l'ancienne valeur par défaut false , vous pouvez donc définir cet élément sur false . |
delete-jsps |
false |
true |
compile-encoding |
utf-8 |
utf-8 |
Inclure et exclure la syntaxe
Le format des chemins d'accès est défini à l'aide des éléments <include>
et <exclude>
. Dans un format, '*'
représente de zéro à plusieurs caractères dans un nom de fichier ou de répertoire, tandis que **
représente de zéro à plusieurs répertoires dans un chemin d'accès. Les fichiers et répertoires correspondant aux formats <exclude>
ne sont pas importés lorsque vous déployez votre application vers App Engine. Toutefois, ces fichiers et répertoires resteront accessibles à votre application lors de son exécution sur le serveur de développement local.
L'élément <include>
se substitue au comportement par défaut, à savoir l'inclusion de tous les fichiers. L'élément <exclude>
s'applique à la fin de tous les formats <include>
(ainsi que de la valeur par défaut si aucun élément <include>
explicite n'est fourni).
L'exemple ci-dessous montre comment définir l'ensemble des fichiers .png
en tant que fichiers statiques (à l'exception de ceux situés dans le répertoire data/
et ses sous-répertoires) :
<static-files>
<include path="/**.png" />
<exclude path="/data/**.png" />
</static-files>
Vous pouvez également définir les en-têtes HTTP à utiliser pour répondre aux requêtes adressées à ces ressources statiques.
<static-files>
<include path="/my_static-files" >
<http-header name="Access-Control-Allow-Origin"
value="http://example.org" />
</include>
</static-files>
Types MIME pour les fichiers statiques
Par défaut, les fichiers statiques sont diffusés à l'aide d'un type MIME sélectionné en fonction de l'extension du nom de fichier. Vous pouvez associer des types MIME personnalisés à des extensions de nom de fichier pour des fichiers statiques à l'aide des éléments mime-mapping
dans web.xml
.
Délai avant expiration des requêtes URLFetch
Vous pouvez définir un délai pour chaque requête URLFetch. Par défaut, le délai pour une récupération est de 5 secondes.
Vous pouvez modifier cette valeur par défaut en incluant le paramètre suivant dans votre fichier de configuration appengine-web.xml
. Spécifiez le délai avant expiration en secondes :
<system-properties>
<property name="appengine.api.urlfetch.defaultDeadline" value="10"/>
</system-properties>