L'environnement d'exécution Java 11 est la pile logicielle chargée d'installer le code de votre service Web et ses dépendances, et d'exécuter votre service.
L'environnement d'exécution Java 11 dans l'environnement standard App Engine est déclaré dans le fichier app.yaml
:
runtime: java11
Avant de commencer
Téléchargez la dernière version de l'outil de ligne de commande
gcloud
ou mettez à jour votre outilgcloud
vers la version actuelle :gcloud components update
Pour déployer à l'aide de Maven, vous devez ajouter le plug-in App Engine Maven à votre fichier
pom.xml
:<plugin> <groupId>com.google.cloud.tools</groupId> <artifactId>appengine-maven-plugin</artifactId> <version>2.7.0</version> </plugin>
D'autres options de déploiement incluent l'utilisation de la commande
gcloud app deploy
ou du plug-in App Engine Gradle.Suivez les instructions concernant votre framework d'application pour configurer le build d'un fichier
JAR
exécutable.
Compatibilité avec le framework
Dans l'environnement d'exécution Java 11 d'App Engine, vous pouvez déployer des fichiers JAR exécutables. L'environnement d'exécution n'inclut aucun framework de diffusion Web, ce qui signifie que vous n'êtes pas limité à l'utilisation de frameworks ou de bibliothèques basés sur des servlets. Utilisez vos dépendances natives ou vos piles réseau, telles que la bibliothèque Netty.
Le dépôt GitHub de Google Cloud contient des exemples hello world
utilisant des frameworks Web Java populaires :
Vous n'êtes pas limité à ces frameworks et nous vous encourageons à essayer celui que vous préférez, comme Grails, Blade, Play!, Vaadin ou jHipster.
Déployer des projets sources Maven dans l'environnement d'exécution Java 11
Vous pouvez déployer votre projet Maven en tant que code source, puis le compiler et le déployer à l'aide d'App Engine Buildpacks.
Pour déployer un projet Maven en tant que code source, accédez au répertoire de premier niveau de votre projet et saisissez :
gcloud app deploy pom.xml
Les journaux de compilation et de déploiement sont diffusés. Vous pouvez consulter les journaux détaillés dans l'historique de Cloud Build sur Cloud Console.
Utiliser des exécutables GraalVM
L'environnement d'exécution Java 11 standard d'App Engine est compatible avec les fichiers exécutables d'images natives GraalVM. Une fois que vous avez compilé votre application Java 11 à l'aide d'une image native GraalVM, vous pouvez utiliser le paramètre entrypoint
de votre fichier app.yaml
pour pointer vers l'exécutable.
Par exemple, un fichier exécutable portant le nom de fichier myexecutable
peut avoir le fichier de configuration app.yaml
suivant :
runtime: java11 entrypoint: ./myexecutable
Version Java compatible
L'environnement d'exécution Java 11 exploite la dernière version stable de Java 11. App Engine se met automatiquement à jour en cas de révisions mineures, mais pas en cas de nouvelle version majeure.
Par exemple, l'application peut être déployée sur Java 11.0.4 et faire ultérieurement l'objet d'une mise à jour automatique vers la version 11.0.5, mais elle ne sera pas automatiquement mise à jour vers Java 12.
Environnement Open JDK de l'environnement d'exécution
App Engine exécute des applications Java 11 dans un conteneur sécurisé par gVisor sur une distribution Linux Ubuntu 18.04 mise à jour et son package openjdk-11-jdk compatible. App Engine gère l'image de base et met à jour le package OpenJDK 11, sans que vous ayez à redéployer votre application.
L'application déployée se situe dans le répertoire /workspace
de l'environnement d'exécution. Elle est également accessible via un lien symbolique à l'adresse /srv
.
Dépendances
Pour en savoir plus sur la déclaration et la gestion des dépendances, consultez la page Spécifier des dépendances.
Démarrage de l'application
Les frameworks tels que Spring Boot, Micronaut et Ktor créent par défaut un uber JAR
exécutable. Si votre fichier de version Maven ou Gradle produit un fichier uber JAR exécutable, l'environnement d'exécution démarre votre application en exécutant une application uber JAR.
App Engine peut également utiliser le contenu du champ facultatif entrypoint
dans votre fichier app.yaml
. Exemple :
runtime: java11 entrypoint: java -Xmx64m -jar YOUR-ARTIFACT.jar
Où l'exemple de fichier jar d'application YOUR-ARTIFACT.jar doit :
- Être dans le répertoire racine avec votre fichier
app.yaml
. - Contenir une entrée
Main-Class
dans son fichier de métadonnéesMETA-INF/MANIFEST.MF
. - Éventuellement, contenir une entrée
Class-Path
avec une liste de chemins relatifs vers d'autres fichiers jar dépendants. Ceux-ci seront importés automatiquement avec l'application.
Pour que l'application reçoive des requêtes HTTP, le point d'entrée doit lancer un serveur Web qui écoute le port spécifié par la variable d'environnement PORT
.
Avec un point d'entrée personnalisé, vous pouvez concevoir et empaqueter votre application sous la forme d'un fichier JAR fin ne contenant que le code de votre application et les dépendances directes. Lors du déploiement de votre application, le plug-in App Engine n'importe que les fichiers modifiés, et non l'ensemble du package uber JAR.
Assurez-vous d'utiliser la variable d'environnement PORT.
Si les avertissements concernant le port 8080 et NGINX s'affichent dans les fichiers journaux de votre application, le serveur Web de votre application écoute sur le port 8080 par défaut. Cela empêche App Engine d'utiliser sa couche NGINX pour compresser les réponses HTTP. Nous vous recommandons de configurer votre serveur Web pour répondre aux requêtes HTTP sur le port spécifié par la variable d'environnement PORT
, généralement 8081. Par exemple :
Compatibilité avec les versions précédentes de Java
Les utilisateurs peuvent accéder aux fonctionnalités suivantes à partir des versions précédentes de Java :
- Inférence de type avancé avec le mot clé
var
. - Création simple de listes ou de cartes avec des collections non modifiables.
- Appel d'hôtes distants à l'aide de HttpClient hiérarchisé.
- Utilisation du système de module JPMS.
- Utilisez d'autres langages JVM, tels que Apache Groovy, Kotlin ou Scala.
Variables d'environnement
Les variables d'environnement suivantes sont définies par l'environnement d'exécution :
Variable d'environnement | Description |
---|---|
GAE_APPLICATION
|
ID de votre application App Engine. Cet ID est précédé du préfixe "region code~", tel que "e~" pour les applications déployées en Europe. |
GAE_DEPLOYMENT_ID |
ID du déploiement actuel. |
GAE_ENV |
Environnement App Engine. Variable définie sur standard . |
GAE_INSTANCE |
ID de l'instance sur laquelle votre service est en cours d'exécution. |
GAE_MEMORY_MB |
Quantité de mémoire disponible pour le processus d'application, en Mo. |
GAE_RUNTIME |
Environnement d'exécution spécifié dans le fichier app.yaml . |
GAE_SERVICE |
Nom de service spécifié dans le fichier app.yaml . Si aucun nom de service n'est spécifié, il est défini par défaut sur default . |
GAE_VERSION |
Libellé de la version actuelle du service. |
GOOGLE_CLOUD_PROJECT |
ID du projet Cloud associé à votre application. |
PORT |
Port qui reçoit les requêtes HTTP. |
Vous pouvez définir des variables d'environnement supplémentaires dans le fichier app.yaml
, mais les valeurs ci-dessus ne peuvent pas être remplacées.
HTTPS et proxy de transfert
App Engine met fin aux connexions HTTPS au niveau de l'équilibreur de charge et transfère les requêtes à votre application. Certaines applications doivent déterminer l'adresse IP et le protocole de la requête d'origine. L'adresse IP de l'utilisateur est disponible dans l'en-tête standard X-Forwarded-For
. Les applications nécessitant ces informations doivent configurer leur framework Web pour qu'il fasse confiance au proxy.
Accès au système de fichiers
L'environnement d'exécution comprend un répertoire /tmp
accessible en écriture, tous les autres répertoires ayant un accès en lecture seule. Le fait d'écrire des données dans /tmp
utilise la mémoire système.
Serveur de métadonnées
Chaque instance de votre application peut demander des informations sur l'instance et votre projet à l'aide du serveur de métadonnées App Engine.
Vous pouvez accéder au serveur de métadonnées via les points de terminaison suivants :
http://metadata
http://metadata.google.internal
Les requêtes envoyées au serveur de métadonnées doivent inclure l'en-tête de requête Metadata-Flavor: Google
. Cet en-tête indique que la requête a été envoyée dans le but de récupérer les valeurs de métadonnées.
La table suivante répertorie les points de terminaison sur lesquels vous pouvez effectuer des requêtes HTTP pour des métadonnées spécifiques :
Point de terminaison des métadonnées | Description |
---|---|
/computeMetadata/v1/project/numeric-project-id |
Numéro de projet attribué à votre projet. |
/computeMetadata/v1/project/project-id |
ID de projet attribué à votre projet. |
/computeMetadata/v1/instance/zone |
Zone dans laquelle l'instance est en cours d'exécution. |
/computeMetadata/v1/instance/service-accounts/default/aliases |
|
/computeMetadata/v1/instance/service-accounts/default/email |
Adresse e-mail du compte de service par défaut attribué à votre projet. |
/computeMetadata/v1/instance/service-accounts/default/ |
Répertorie tous les comptes de service par défaut pour votre projet. |
/computeMetadata/v1/instance/service-accounts/default/scopes |
Répertorie tous les champs d'application disponibles pour les comptes de service par défaut. |
/computeMetadata/v1/instance/service-accounts/default/token |
Renvoie le jeton d'authentification pouvant servir à authentifier votre application auprès d'autres API Google Cloud. |
Par exemple, pour récupérer votre ID de projet, envoyez une requête à http://metadata.google.internal/computeMetadata/v1/project/project-id
.