Il runtime Java è lo stack software responsabile dell'installazione del codice e delle sue dipendenze del servizio web 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 MAJOR
di Java. Ad esempio, per utilizzare la versione più recente di Java, Java 21, specifica 21
.
Per le altre versioni Java supportate e la versione di Ubuntu corrispondente alla tua versione Java, consulta la pianificazione del supporto per l'esecuzione.
Prima di iniziare
Scarica la versione più recente di Google Cloud CLI o aggiorna gcloud CLI alla versione attuale:
gcloud components update
Per eseguire il deployment con Maven, devi aggiungere il plug-in Maven di App Engine al 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'uso del comando
gcloud app deploy
o del plug-in Gradle di App Engine.Segui le istruzioni relative al framework dell'applicazione per configurare la build di un file
JAR
eseguibile.
Compatibilità del framework
Con il runtime Java di App Engine, puoi eseguire il deployment di file JAR eseguibili. I runtime non includono framework di servizi web, il che significa che non sei limitato all'utilizzo di librerie o framework basati su servlet. Utilizza le dipendenze o gli stack di rete nativi, ad esempio la libreria Netty.
Esistono hello world
esempi che utilizzano i framework web Java più diffusi nel repository GitHub di Google Cloud:
Non devi limitarti a questi framework e ti invitiamo a provarne quello preferito, ad esempio Grails, Blade, Play!, Vaadin o jHipster.
Esegui il deployment dei progetti di origine Maven nel runtime Java
Puoi eseguire il deployment del tuo progetto Maven come codice sorgente e richiederne la creazione e il deployment utilizzando i buildpack 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 e puoi visualizzare i log dettagliati nella sezione della cronologia di Cloud Build nella console Cloud.
Utilizzo degli eseguibili GraalVM
Il runtime Java dell'ambiente standard di App Engine supporta gli eseguibili di immagini native GraalVM. Dopo aver compilato la tua app Java in un'immagine nativa di GraalVM, puoi utilizzare l'impostazione entrypoint
nel file app.yaml
affinché rimandi all'eseguibile.
Ad esempio, un eseguibile con nome file myexecutable
potrebbe avere il seguente file di configurazioneapp.yaml
:
runtime: java17 # or another supported runtime entrypoint: ./myexecutable
Le librerie client di Google Cloud possono essere usate per compilare applicazioni come immagine nativa di GraalVM. Per ulteriori informazioni, consulta la documentazione su come compilare le immagini native.
Versione Java
Il runtime Java utilizza l'ultima release stabile della versione specificata nel file app.yaml
. App Engine si aggiorna automaticamente
alle nuove versioni di release della patch, ma non aggiornerà automaticamente la
versione secondaria.
Ad esempio, il deployment della tua applicazione potrebbe essere stato eseguito in Java 11.0.4 e poi aggiornato automaticamente alla versione Java 11.0.5 in un deployment successivo della piattaforma gestita, ma non verrà eseguito automaticamente l'aggiornamento a Java 12.
Per scoprire come eseguire l'upgrade della tua versione di Java, consulta Eseguire l'upgrade di un'applicazione esistente.
L'ambiente JDK aperto del runtime
App Engine esegue le app Java in un container protetto da gVisor su una distribuzione Ubuntu Linux aggiornata e il suo runtime openjdk-11-jdk per Java 11 o openjdk-17-jdk per Java 17 supportato.
Per le versioni di Ubuntu supportate per la tua versione Java, consulta la pianificazione del supporto per l'esecuzione.
App Engine gestisce l'immagine di base e aggiorna il pacchetto OpenJDK 11 e OpenJDK 17, senza che tu debba eseguire nuovamente il deployment dell'app.
L'app di cui hai eseguito il deployment si trova nella directory /workspace
del runtime. È
accessibile anche tramite un link simbolico all'indirizzo /srv
.
Release Java di App Engine
Tutti gli artefatti rilasciati che iniziano con la versione 2.x.x
utilizzano il meccanismo di rilascio open source. Gli artefatti rilasciati che iniziano con la versione 1.9.9xx
o precedente utilizzano il sistema di compilazione interno. Per ulteriori dettagli, consulta il repository di GitHub.
Dipendenze
Per saperne di più sulla dichiarazione e sulla gestione delle dipendenze, consulta Specifica delle dipendenze.
Avvio dell'applicazione
Framework come Spring Boot, Micronaut e Ktor creano un eseguibile Uber JAR
per impostazione predefinita. Se il tuo file di build Maven o Gradle produce un eseguibile Uber JAR, il runtime avvia l'applicazione eseguendo un'applicazione Uber JAR.
In alternativa, App Engine utilizzerà i contenuti del campo facoltativo
entrypoint
nel file app.yaml
. Ad esempio:
runtime: java21 # or another supported runtime entrypoint: java -Xmx64m -jar YOUR-ARTIFACT.jar
Dove deve:YOUR-ARTIFACT.jar
- Trovarti nella directory radice contenente il file
app.yaml
. - Contenere una voce
Main-Class
nel file di metadatiMETA-INF/MANIFEST.MF
. - (Facoltativo) Inserisci una voce
Class-Path
con un elenco di percorsi relativi ad altri jar dipendenti. Questi verranno caricati automaticamente con l'applicazione.
Affinché l'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 in modo dinamico dall'ambiente di gestione di App Engine. Questo valore
non può essere impostato nella sezione env_variables
del file app.yaml
.
Con un entry point personalizzato, puoi creare e pacchettizzare l'applicazione come file JAR sottile che contiene solo il codice dell'applicazione e le dipendenze dirette. Quando esegui il deployment della tua applicazione, il plug-in App Engine carica solo i file modificati, anziché l'intero pacchetto JAR.
Assicurati di utilizzare la variabile di ambiente PORT
Se nei file di log dell'app vengono visualizzati avvisi relativi alla porta 8080 e NGINX, il server web dell'app è in ascolto sulla porta predefinita 8080. Ciò impedisce ad App Engine di utilizzare il suo livello NGINX per comprimere le risposte HTTP. Ti consigliamo di configurare il server web per rispondere alle richieste HTTP sulla porta specificata dalla variabile di ambiente PORT
, in genere 8081. Ad esempio:
Compatibilità con le versioni precedenti di Java
Per conoscere le differenze tra Java 8 e la versione più recente di Java supportata, consulta Differenze principali tra i runtime Java 8 e Java 11 e versioni successive.
Variabili di ambiente
Le seguenti variabili di ambiente sono impostate dal runtime:
Variabile di ambiente | Descrizione |
---|---|
GAE_APPLICATION
|
L'ID della tua applicazione App Engine. Questo ID è preceduto dal 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. 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 del 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 Node.js) |
Imposta su production quando viene eseguito il deployment del servizio. |
Puoi definire altre variabili di ambiente nel file app.yaml
, ma i valori precedenti non possono essere sostituiti, ad eccezione di NODE_ENV
.
HTTPS e proxy 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 da considerare attendibile il proxy.
Accesso al file system
Il runtime include una directory /tmp
scrivibile, mentre tutte le altre directory hanno accesso di sola lettura. La scrittura in /tmp
occupa memoria di sistema.
Server metadati
Ogni istanza dell'applicazione può utilizzare il server metadati di App Engine per eseguire query sulle informazioni sull'istanza e sul progetto.
Puoi accedere al server 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'intento di recuperare i valori dei metadati.
Nella tabella seguente sono elencati gli endpoint in cui è possibile effettuare 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 tuo progetto. |
/computeMetadata/v1/instance/service-accounts/default/scopes |
Elenca tutti gli ambiti supportati per gli account di servizio predefiniti. |
/computeMetadata/v1/instance/service-accounts/default/token |
Restituisce il token di autenticazione che può essere utilizzato per autenticare l'applicazione su altre API Google Cloud. |
Ad esempio, per recuperare il tuo ID progetto, invia una richiesta a http://metadata.google.internal/computeMetadata/v1/project/project-id
.