Il runtime Java è lo stack software responsabile dell'installazione del codice del servizio web e delle relative dipendenze ed esegue il 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 la versione Java più recente, Java 21, specifica 21
.
Per altre versioni Java supportate e la versione di Ubuntu corrispondente alla tua versione Java, consulta la pianificazione del supporto del runtime.
Prima di iniziare
Scarica la versione più recente di Google Cloud CLI o aggiorna gcloud CLI alla versione corrente:
gcloud components update
Per eseguire il deployment utilizzando Maven, devi aggiungere il plug-in Maven per App Engine al tuo file
pom.xml
:<plugin> <groupId>com.google.cloud.tools</groupId> <artifactId>appengine-maven-plugin</artifactId> <version>2.7.0</version> </plugin>
Altre opzioni per il deployment includono l'utilizzo del comando
gcloud app deploy
o del plug-in Gradle di App Engine.Segui le istruzioni per il framework dell'applicazione per configurare la compilazione di un file
JAR
eseguibile.
Compatibilità del framework
Con il runtime Java di App Engine, puoi eseguire il deployment di file JAR executable. I runtime non includono alcun framework per il servizio web, il che significa che non sei limitato all'utilizzo di librerie o framework basati su servlet. Utilizza le dipendenze native o gli stack di rete come la libreria Netty.
Non sei limitato a questi framework e ti invitiamo a provare quello che preferisci, ad esempio 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 compilarlo e implementarlo 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 compilazione e di deployment verranno trasmessi in streaming e potrai visualizzare i log dettagliati nella sezione Cronologia di Cloud Build della console Google Cloud.
Utilizzo di file eseguibili GraalVM
Il runtime Java dell'ambiente standard di App Engine supporta gli eseguibili delle immagini native GraalVM. Dopo aver compilato l'app Java in un'immagine nativa GraalVM, puoi utilizzare l'impostazione entrypoint
nel
file app.yaml
per fare riferimento all'eseguibile.
Ad esempio, un file eseguibile con il nome myexecutable
potrebbe avere il seguenteapp.yaml
file di configurazione:
runtime: 21 # or another supported runtime version. entrypoint: ./myexecutable
Le librerie client di Google Cloud possono essere utilizzate per compilare le applicazioni come un'immagine nativa GraalVM. Per saperne di più, consulta la documentazione su come compilare le immagini native.
Versione Java
Il runtime Java utilizza la release stabile più recente della versione specificata nel file app.yaml
. App Engine si aggiorna automaticamente alle nuove versioni delle release delle patch, ma non aggiorna automaticamente la versione minore.
Ad esempio, l'applicazione potrebbe essere dipiattaformata in Java 21.0.4 e aggiornata automaticamente alla versione Java 21.0.5 in un successivo dipiattaforma della piattaforma gestita, ma non verrà aggiornata automaticamente a Java 22.
Per scoprire come eseguire l'upgrade della versione di Java, consulta Eseguire l'upgrade di un'applicazione esistente.
L'ambiente Open JDK del runtime
App Engine esegue le app Java in un contenitore protetto da gVisor su una distribuzione Ubuntu Linux aggiornata e il relativo openjdk-17-jdk supportato per il runtime Java 17 o openjdk-21-jdk per il runtime 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 il pacchetto OpenJDK 17 e OpenJDK 21 senza che tu debba eseguire nuovamente il deployment dell'app.
L'app di cui è stato eseguito il deployment si trova nella directory /workspace
del runtime. È inoltre accessibile tramite un link simbolico in /srv
.
Release Java di App Engine
Tutti gli elementi 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 su come dichiarare e gestire le dipendenze, consulta Specificare le dipendenze.
Avvio dell'applicazione
Framework come Spring Boot, Micronaut e Ktor creano un uber eseguibile JAR
per impostazione predefinita. Se il file di build Maven o Gradle produce un file JAR Uber eseguibile, il runtime avvia l'applicazione eseguendo un'applicazione JAR Uber.
In alternativa, App Engine utilizzerà i contenuti del campo facoltativoentrypoint
nel file app.yaml
. Ad esempio:
runtime: java21 # or another supported runtime entrypoint: java -Xmx64m -jar YOUR-ARTIFACT.jar
Dove il file jar dell'applicazione YOUR-ARTIFACT.jar di esempio deve:
- Devi essere nella directory principale con il file
app.yaml
. - Contiene una voce
Main-Class
nel file di metadatiMETA-INF/MANIFEST.MF
. - Facoltativamente, può contenere una voce
Class-Path
con un elenco di percorsi relativi ad altri jar dipendenti. Verranno caricati automaticamente con l'applicazione.
Affinché la tua app riceva richieste HTTP, il punto di contatto 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 contatto personalizzato, puoi creare e pacchettizzare l'applicazione come un file JAR ridotto che contiene solo il codice dell'applicazione e le dipendenze dirette. Durante il deployment dell'applicazione, il plug-in App Engine caricherà solo i file modificati, anziché l'intero pacchetto JAR di Uber.
Assicurati di utilizzare la variabile di ambiente PORT
Se nei file di log dell'app vengono visualizzati avvisi sulla porta 8080 e su NGINX, il server web dell'app è in ascolto sulla porta predefinita 8080. In questo modo, App Engine non utilizza il proprio 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 Java precedenti
Per le differenze tra Java 8 e la versione Java più recente 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 è preceduto da "region code~", ad esempio "e~" per le applicazioni di cui è stato eseguito il deployment in Europa. |
GAE_DEPLOYMENT_ID |
L'ID del deployment corrente. |
GAE_ENV |
L'ambiente App Engine. Impostato 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 di 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 di servizio, viene impostato su default . |
GAE_VERSION |
L'etichetta della versione corrente 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 di Node.js) |
Imposta su production quando il servizio viene disegnato. |
Puoi
definire variabili di ambiente aggiuntive nel file app.yaml
,
ma i valori sopra indicati non possono essere sostituiti, tranne per NODE_ENV
.
Proxy HTTPS e di inoltro
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 X-Forwarded-For
standard. Le applicazioni che richiedono queste informazioni devono configurare il proprio framework web in modo che attenda il proxy.
Accesso al file system
Il runtime include una directory /tmp
scrivibile, con tutte le altre directory che hanno accesso di sola lettura. La scrittura in /tmp
occupa memoria di sistema.
Server dei metadati
Ogni istanza dell'applicazione può utilizzare il server metadati di App Engine per eseguire query sulle informazioni relative all'istanza e al progetto.
Puoi accedere al server dei metadati tramite i seguenti endpoint:
http://metadata
http://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 inviare richieste HTTP per metadati specifici:
Endpoint dei metadati | Descrizione |
---|---|
/computeMetadata/v1/project/numeric-project-id |
Il numero di progetto assegnato al progetto. |
/computeMetadata/v1/project/project-id |
L'ID progetto assegnato al 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'indirizzo email dell'account di servizio predefinito assegnato al progetto. |
/computeMetadata/v1/instance/service-accounts/default/ |
Elenca tutti gli account di servizio predefiniti per il 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 la tua applicazione ad altre API Google Cloud. |
Ad esempio, per recuperare l'ID progetto, invia una richiesta a
http://metadata.google.internal/computeMetadata/v1/project/project-id
.