Il runtime Java è lo stack software responsabile dell'installazione del codice del servizio web e delle relative dipendenze e dell'esecuzione del servizio.
Dichiara il runtime Java per l'ambiente standard di App Engine nel file app.yaml. Ad esempio:
runtime: javaVERSION
dove VERSION è il numero di versione di Java MAJOR. Ad
esempio, per utilizzare l'ultima versione di Java, Java 25 (anteprima), specifica
25.
Per altre versioni di Java supportate e la versione di Ubuntu corrispondente alla tua versione di Java, consulta la pianificazione del supporto del runtime.
Prima di iniziare
Scarica l'ultima versione di Google Cloud CLI o aggiorna gcloud CLI alla versione attuale:
gcloud components updatePer eseguire il deployment utilizzando Maven, devi aggiungere il plug-in Maven per App Engine al file
pom.xml:<plugin> <groupId>com.google.cloud.tools</groupId> <artifactId>appengine-maven-plugin</artifactId> <version>2.8.1</version> </plugin>Altre opzioni per il deployment includono l'utilizzo del comando
gcloud app deployo del plug-in Gradle di App Engine.Segui le istruzioni per il tuo framework dell'applicazione per configurare la build di un file eseguibile
JAR.
Compatibilità del framework
Con il runtime Java di App Engine, puoi eseguire il deployment di file JAR eseguibili. I runtime non includono alcun framework di pubblicazione web, il che significa che non sei limitato all'utilizzo di framework o librerie basati su servlet. Utilizza le dipendenze native o stack di networking come la libreria Netty.
Non sei limitato a questi framework e ti invitiamo a provare quello che preferisci, come Grails, Blade, Play!, Vaadin o jHipster.
Esegui il deployment dei progetti di origine Maven nel runtime Java
Puoi eseguire il deployment del progetto Maven come codice sorgente e farlo compilare ed eseguire il deployment utilizzando i buildpack di Google Cloud.
Per eseguire il deployment di un progetto Maven come codice sorgente, vai alla directory di primo livello del progetto e digita:
gcloud app deploy pom.xml
I log di build e deployment verranno trasmessi in streaming e potrai visualizzare i log dettagliati nella sezione Cronologia build di Cloud Build nella consoleGoogle Cloud .
Utilizzo di eseguibili GraalVM
Il runtime Java dell'ambiente standard App Engine supporta gli eseguibili dell'immagine nativa GraalVM. Dopo aver compilato l'app Java in un'immagine nativa GraalVM, puoi utilizzare l'impostazione entrypoint nel file app.yaml per indicare l'eseguibile.
Ad esempio, un eseguibile con il nome file myexecutable potrebbe avere il seguente file di configurazioneapp.yaml:
runtime: 25 # or another supported runtime version. entrypoint: ./myexecutable
Le librerie clientGoogle Cloud possono essere utilizzate per compilare applicazioni come un'immagine nativa GraalVM. Per saperne di più, consulta la documentazione su come compilare immagini native.
Versione Java
L'ultima versione di Java supportata è la 25 (anteprima). Il runtime Java utilizza l'ultima release stabile della versione specificata nel file app.yaml. App Engine viene aggiornato automaticamente
alle nuove versioni patch, ma non aggiorna automaticamente la versione
secondaria.
Ad esempio, la tua applicazione potrebbe essere implementata in Java 21.0.4 e aggiornata automaticamente alla versione Java 21.0.5 in un'implementazione successiva della piattaforma gestita, ma non verrà aggiornata automaticamente a Java 22.
Per scoprire come eseguire l'upgrade della tua versione di Java, consulta Eseguire l'upgrade di un'applicazione esistente.
L'ambiente Open JDK del runtime
App Engine esegue app Java in un container protetto da gVisor su una distribuzione Ubuntu Linux aggiornata e sul runtime openjdk-17-jdk supportato per Java 17 o openjdk-21-jdk per Java 21.
Per le versioni di Ubuntu supportate per la tua versione di Java, consulta la pianificazione del supporto del runtime.
App Engine gestisce l'immagine di base e aggiorna i pacchetti OpenJDK 17 e OpenJDK 21 senza richiedere il redeploy dell'app.
L'app di cui è stato eseguito il deployment si trova nella directory /workspace del runtime. È
accessibile anche tramite un link simbolico all'indirizzo /srv.
Release di Java per App Engine
Tutti gli artefatti rilasciati che iniziano con la versione 2.x.x utilizzano il meccanismo di rilascio
open source. Per maggiori dettagli, consulta il
repository GitHub.
Dipendenze
Per ulteriori informazioni sulla dichiarazione e la gestione delle dipendenze, consulta Specifica delle dipendenze.
Avvio dell'applicazione
Framework come Spring Boot, Micronaut e Ktor creano un uber JAR eseguibile
per impostazione predefinita. Se il file di build Maven o Gradle produce un Uber JAR eseguibile,
il runtime avvia l'applicazione eseguendo un'applicazione Uber JAR.
In alternativa, App Engine utilizzerà i contenuti del campo
entrypoint facoltativo nel file app.yaml. Ad esempio:
runtime: java25 # or another supported runtime entrypoint: java -Xmx64m -jar YOUR-ARTIFACT.jar
Dove deve trovarsi il file JAR dell'applicazione YOUR-ARTIFACT.jar di esempio:
- Trovarti nella directory principale con il file
app.yaml. - Contenere una voce
Main-Classnel file di metadatiMETA-INF/MANIFEST.MF. - (Facoltativo) Contiene una voce
Class-Pathcon un elenco di percorsi relativi ad altri file JAR dipendenti. Verranno caricati automaticamente con l'applicazione.
Affinché la tua app riceva richieste HTTP, il punto di ingresso deve avviare un server web in ascolto sulla porta specificata dalla variabile di ambiente PORT. Il valore
della variabile di ambiente PORT
viene impostato dinamicamente dall'ambiente di pubblicazione di App Engine. Questo valore
non può essere impostato nella sezione env_variables del file app.yaml.
Con un punto di ingresso personalizzato, puoi creare e pacchettizzare l'applicazione come un file JAR sottile che contiene solo il codice dell'applicazione e le dipendenze dirette. Quando esegui il deployment dell'applicazione, il plug-in App Engine carica solo i file modificati, anziché l'intero pacchetto uber JAR.
Assicurati di utilizzare la variabile di ambiente PORT
Se nei file di log dell'app vengono visualizzati avvisi relativi alla porta 8080 e a NGINX, il server web dell'app è in ascolto sulla porta predefinita 8080. In questo modo, App Engine non utilizza il livello NGINX per comprimere le risposte HTTP. Ti
consigliamo di configurare il server web in modo che risponda alle richieste HTTP sulla
porta specificata dalla variabile di ambiente PORT, in genere 8081. Ad esempio:
Compatibilità con le versioni precedenti di Java
Per le differenze tra Java 8 e l'ultima versione di Java supportata, consulta Eseguire la migrazione da Java 8 all'ultimo runtime Java.
Variabili di ambiente
Le seguenti variabili di ambiente vengono impostate dal runtime:
| Variabile di ambiente | Descrizione |
|---|---|
GAE_APPLICATION
|
L'ID della tua applicazione App Engine. Questo ID ha il prefisso "region code~", ad esempio "e~" per le applicazioni di cui è stato eseguito il deployment in Europa. |
GAE_DEPLOYMENT_ID |
L'ID del deployment attuale. |
GAE_ENV |
L'ambiente App Engine. Imposta su standard. |
GAE_INSTANCE |
L'ID dell'istanza su cui è attualmente in esecuzione il servizio. |
GAE_MEMORY_MB |
La quantità di memoria disponibile per il processo dell'applicazione, in MB. |
GAE_RUNTIME |
Il runtime specificato nel file app.yaml. |
GAE_SERVICE |
Il nome del servizio specificato nel file app.yaml. Se non viene specificato alcun nome del servizio, viene impostato su default. |
GAE_VERSION |
L'etichetta della versione attuale del servizio. |
GOOGLE_CLOUD_PROJECT |
L'ID progetto Google Cloud associato alla tua applicazione. |
PORT |
La porta che riceve le richieste HTTP. |
NODE_ENV (disponibile solo nel runtime Node.js) |
Imposta su production quando il servizio viene implementato. |
Puoi
definire variabili di ambiente aggiuntive nel file app.yaml,
ma i valori sopra indicati non possono essere sostituiti, ad eccezione di NODE_ENV.
Proxy HTTPS e di forwarding
App Engine termina le connessioni HTTPS al bilanciatore del carico e
inoltra le richieste alla tua applicazione. Alcune applicazioni devono determinare
l'IP e il protocollo della richiesta originale. L'indirizzo IP dell'utente è disponibile
nell'intestazione standard X-Forwarded-For. Le applicazioni che richiedono queste
informazioni devono configurare il framework web in modo che consideri attendibile il proxy.
Accesso al file system
Il runtime include una directory /tmp scrivibile, mentre tutte le altre directory
hanno accesso in sola lettura. La scrittura su /tmp occupa la memoria di sistema.
Server di metadati
Ogni istanza della tua applicazione può utilizzare il server metadati di App Engine per eseguire query sulle informazioni relative all'istanza e al tuo progetto.
Puoi accedere al server di metadati tramite i seguenti endpoint:
http://metadatahttp://metadata.google.internal
Le richieste inviate al server dei metadati devono includere l'intestazione della richiesta
Metadata-Flavor: Google. Questa intestazione indica che la richiesta è stata inviata con
l'intenzione di recuperare i valori dei metadati.
La tabella seguente elenca gli endpoint in cui puoi effettuare richieste HTTP per metadati specifici:
| Endpoint dei metadati | Descrizione |
|---|---|
/computeMetadata/v1/project/numeric-project-id |
Il numero di progetto assegnato al tuo progetto. |
/computeMetadata/v1/project/project-id |
L'ID progetto assegnato al tuo progetto. |
/computeMetadata/v1/instance/region |
La regione in cui è in esecuzione l'istanza. |
/computeMetadata/v1/instance/service-accounts/default/aliases |
|
/computeMetadata/v1/instance/service-accounts/default/email |
L'email del account di servizio predefinito assegnato al tuo progetto. |
/computeMetadata/v1/instance/service-accounts/default/ |
Elenca tutti i service account predefiniti per il tuo progetto. |
/computeMetadata/v1/instance/service-accounts/default/scopes |
Elenca tutti gli ambiti supportati per i service account predefiniti. |
/computeMetadata/v1/instance/service-accounts/default/token |
Restituisce il token di autenticazione che può essere utilizzato per autenticare l'applicazione in altre API Google Cloud. |
Ad esempio, per recuperare l'ID progetto, invia una richiesta a
http://metadata.google.internal/computeMetadata/v1/project/project-id.