ID regione
Il REGION_ID
è un codice abbreviato che Google assegna
in base alla regione selezionata quando crei l'app. Il codice non
corrisponde a un paese o a una provincia, anche se alcuni ID regione possono sembrare
simili ai codici di paesi e province di uso comune. Per le app create dopo
febbraio 2020, REGION_ID.r
è incluso negli
URL App Engine. Per le app esistenti create prima di questa data, l'ID regione è facoltativo nell'URL.
Scopri di più sugli ID regione.
Devi utilizzare il file appengine-web.xml
per configurare la tua app solo
se stai eseguendo la migrazione di un'app esistente dal runtime Java 8 di App Engine alla
versione Java più recente supportata e vuoi utilizzare i servizi in bundle legacy.
Se utilizzi un appengine-web.xml
nel tuo progetto, il app.yaml
viene
generato automaticamente per te al momento del deployment.
Le applicazioni Java App Engine utilizzano un file di configurazione denominato appengine-web.xml
per specificare informazioni sulla tua app e per identificare quali file nel file WAR
dell'app sono file statici (come le immagini) e quali sono file di risorse utilizzati dall'applicazione.
Sintassi
Un'app Java App Engine deve avere un file denominato appengine-web.xml
nel file
WAR, nella directory WEB-INF/
. Si tratta di un file XML il cui elemento principale è
<appengine-web-app>
.
Puoi trovare le specifiche dello schema e la definizione del tipo di documento per
appengine-web.xml
nella directory docs/
dell'SDK.
Elemento | Descrizione |
---|---|
<application> |
Non richiesto se esegui il deployment dell'app utilizzando strumenti basati su Google Cloud SDK, come il comando |
|
Facoltativo. Se vuoi utilizzare i
servizi in bundle legacy di App Engine per i runtime di seconda generazione,
imposta questo campo su |
|
Facoltativo e solo per i runtime di seconda generazione. Esegue l'override dell'entrypoint predefinito, ovvero la riga di comando del processo che avvia l'applicazione Java. Per impostazione predefinita, il punto di ingresso generato per una classe di istanza F4 (le impostazioni di memoria vengono calcolate dalla classe di istanza) è equivalente alla seguente configurazione: <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>
Puoi modificare la configurazione per aggiungere flag di processo JVM aggiuntivi o definire il tuo processo di avvio.
Tieni presente che l'applicazione viene implementata nella directory |
<async-session-persistence> |
Facoltativo. È possibile ridurre la latenza delle richieste configurando l'applicazione per scrivere in modo asincrono i dati della sessione HTTP nel datastore: <async-session-persistence enabled="true" /> Se la persistenza della sessione asincrona è attivata, App Engine invierà un'attività Task Queue per scrivere i dati della sessione nel datastore prima di scriverli nella memcache. Per impostazione predefinita, l'attività verrà inviata alla coda "default". Se vuoi utilizzare una coda diversa, aggiungi l'attributo `queue-name`: <async-session-persistence enabled="true" queue-name="myqueue"/> I dati di sessione vengono sempre scritti in modo sincrono nella memcache. Se una richiesta tenta di leggere i dati della sessione quando memcache non è disponibile (o i dati della sessione sono stati cancellati), il failover viene eseguito su Datastore, che potrebbe non disporre ancora dei dati della sessione più recenti. Ciò significa che la persistenza asincrona della sessione può causare la visualizzazione di dati di sessione obsoleti da parte dell'applicazione. Tuttavia, per la maggior parte delle applicazioni, il vantaggio della latenza supera di gran lunga il rischio. |
<auto-id-policy> |
Facoltativo. Se
imposti automaticamente gli identificatori di entità, puoi modificare il metodo
utilizzato impostando il criterio ID automatico. Di seguito sono riportate le opzioni valide:
|
<automatic-scaling> |
Facoltativo. Per una spiegazione completa, consulta la sezione Scalabilità automatica. |
<basic-scaling> |
Facoltativo. Per una spiegazione completa, consulta la sezione Scalabilità di base. |
<env-variables> |
Facoltativo.
Il file <env-variables> <env-var name="DEFAULT_ENCODING" value="UTF-8" /> </env-variables> Per evitare conflitti con l'ambiente locale, il server di sviluppo non imposta le variabili di ambiente in base a questo file e richiede che l'ambiente locale abbia già impostato queste variabili su valori corrispondenti. export DEFAULT_ENCODING="UTF-8" dev_appserver war Quando viene eseguito il deployment in App Engine, l'ambiente viene creato con queste variabili già impostate. |
<inbound-services> |
Facoltativo.
Prima che un'applicazione possa ricevere email, deve essere configurata per abilitare il servizio.
Per abilitare il servizio per un'app Java, includi una sezione
È disponibile il seguente servizio in entrata:
|
<instance-class> |
Facoltativo. La dimensione della classe di istanze per questo modulo. Quando specifichi diverse opzioni di scalabilità, sono disponibili le seguenti classi di istanze:
|
<manual-scaling> |
Facoltativo. Per una spiegazione completa, consulta la sezione Scalabilità manuale. |
<precompilation-enabled> |
Facoltativo. App Engine utilizza un processo di "precompilazione" con il bytecode Java di un'app per migliorare il rendimento dell'app nell'ambiente di runtime Java. Il codice precompilato funziona in modo identico al bytecode originale.
Se per qualche motivo preferisci che la tua app non utilizzi la precompilazione,
puoi disattivarla aggiungendo quanto segue al file
<precompilation-enabled>false</precompilation-enabled> |
<module> |
Nota : i moduli ora si chiamano
Servizi
e i servizi vengono ancora dichiarati nei file Obbligatorio se crei un servizio. Facoltativo per il servizio predefinito. Ogni servizio e ogni versione devono avere un nome. Un nome può contenere numeri, lettere e trattini. Non può superare i 63 caratteri, non può iniziare o terminare con un trattino e non può contenere la stringa `-dot`. Scegli un nome univoco per ogni servizio e ogni versione. Non riutilizzare i nomi tra servizi e versioni. Vedi anche servizio. |
<public-root> |
Facoltativo.
Il valore predefinito
Ad esempio, il seguente codice mapperà il percorso dell'URL
<public-root>/static</public-root> |
<resource-files> |
Facoltativo. I file elencati nell'elemento
L'elemento
I file di risorse di App Engine vengono letti utilizzando |
<runtime> |
Per utilizzare l'ultima versione di Java supportata, devi specificare questa voce con il valore
<runtime>java21</runtime> |
<service> |
I servizi erano precedentemente noti come moduli. Al momento, la definizione di un servizio come:
|
<service-account> |
Facoltativo. L'elemento <service-account>[SERVICE_ACCOUNT_NAME]@[PROJECT_ID].iam.gserviceaccount.com</service-account> |
<sessions-enabled> |
Facoltativo. App Engine include un'implementazione delle sessioni, utilizzando l'interfaccia di sessione servlet. L'implementazione archivia i dati di sessione in Datastore per la persistenza e utilizza anche memcache per la velocità. Come nella maggior parte degli altri servlet container, gli attributi di sessione impostati con `session.setAttribute()` durante la richiesta vengono mantenuti alla fine della richiesta.
Questa funzionalità è disattivata per impostazione predefinita. Per attivarlo, aggiungi quanto segue a
<sessions-enabled>true</sessions-enabled>
L'implementazione crea entità Datastore di tipo
Nota: poiché App Engine archivia i dati di sessione in
Datastore e memcache, tutti i valori archiviati nella sessione devono
implementare l'interfaccia
Consulta l'elemento
|
<ssl-enabled> |
Facoltativo. Per impostazione predefinita, qualsiasi utente può accedere a qualsiasi URL utilizzando HTTP o HTTPS. Puoi configurare un'app in modo che richieda HTTPS per determinati URL nel descrittore di deployment. Consulta la sezione Descrittore del deployment: URL sicuri.
Se vuoi disattivare l'utilizzo di HTTPS per l'applicazione, inserisci
quanto segue nel file <ssl-enabled>false</ssl-enabled> Non è possibile disattivare HTTPS per alcuni percorsi URL e non per altri nell'ambiente di runtime Java. |
<static-error-handlers> |
Facoltativo.
Quando si verificano determinati errori, App Engine mostra una pagina di errore
generico. Puoi configurare la tua app in modo che fornisca un file statico personalizzato anziché queste pagine di errore generiche, a condizione che i dati di errore personalizzati siano inferiori a 10 kilobyte. Puoi configurare diversi file statici da pubblicare
per ogni codice di errore supportato specificando i file nel file
<static-error-handlers> <handler file="default_error.html" /> <handler file="over_quota.html" error-code="over_quota" /> </static-error-handlers> Avviso: assicurati che il percorso del file di risposta agli errori non si sovrapponga ai percorsi del gestore di file statici.
Ogni voce
Se vuoi, puoi specificare un |
<static-files> |
Facoltativo.
L'elemento
L'elemento
<static-files> <include path="/my_static-files" > <http-header name="Access-Control-Allow-Origin" value="http://example.org" /> </include> </static-files> |
<system-properties> |
Facoltativo. Il file <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> Facoltativo. Puoi configurare un connettore HTTP per migliorare l'utilizzo di CPU e memoria. Se la tua applicazione interagisce con le operazioni Datastore o Task Queues, configura il monitoraggio per monitorare l'impatto su prestazioni e comportamento dopo l'attivazione di questa funzionalità. <system-properties> <property name="appengine.use.httpconnector" value="true"/> </system-properties> Facoltativo. Puoi configurare il runtime sottostante per funzionare su EE8 o EE10 utilizzando la seguente proprietà di sistema. Per ulteriori informazioni sul supporto di EE, vedi Eseguire l'upgrade a Java 21. <system-properties> <property name="appengine.use.EE10" value="true"/> <!-- or EE8 --> </system-properties> A partire da Java 21, puoi configurare il tuo server web Java per utilizzare i thread virtuali. Ad esempio: <system-properties> <property name="appengine.use.virtualthreads" value="true"/> </system-properties> |
<url-stream-handler> |
Facoltativo. I valori possibili sono Il valore predefinito è Se imposti <url-stream-handler>urlfetch</url-stream-handler> |
<version> |
L'elemento
I nomi delle versioni devono iniziare con una lettera per distinguerli dalle istanze numeriche, che sono sempre specificate da un numero. In questo modo si evita
l'ambiguità con URL come |
<warmup-requests-enabled> |
Facoltativo. Valore predefinito: true. Le richieste di warmup sono abilitate per impostazione predefinita per le applicazioni Java.
Con le richieste di preriscaldamento attive, l'infrastruttura di App Engine invia richieste `GET`
a
Per disattivare le richieste di warmup, specifica <warmup-requests-enabled>false</warmup-requests-enabled> |
<vpc-access-connector> |
Facoltativo.
Configura l'applicazione in modo che utilizzi un connettore di accesso VPC serverless, consentendo all'applicazione di inviare richieste a risorse interne nella tua rete VPC. Specifica il nome completo di un
connettore nell'elemento <vpc-access-connector>
<name>projects/[PROJECT_ID]/locations/[REGION]/connectors/[CONNECTOR_NAME]</name>
</vpc-access-connector> Per saperne di più, consulta Connessione alle risorse interne in una rete VPC. |
Scalare gli elementi
La tabella seguente elenca le opzioni per definire come specificare che la tua applicazione deve essere scalata.
Per un confronto delle funzionalità di rendimento dei tipi di scalabilità, vedi Scalabilità delle istanze dinamiche.
Elemento | Descrizione |
---|---|
<automatic-scaling> |
Facoltativo. Per impostazione predefinita, viene presupposta la scalabilità automatica con una classe
di istanza predefinita di
L'elemento Questo elemento può contenere i seguenti elementi:
<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> |
Facoltativo.
L'elemento Questo elemento può contenere i seguenti elementi:
<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> |
Facoltativo.
L'elemento Questo elemento può contenere i seguenti elementi:
<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> |
Elementi di gestione temporanea
Gran parte del lavoro svolto durante un deployment avviene localmente in un passaggio di preparazione chiamato staging, in cui vengono assemblati i file JAR, compilati i JSP e così via. Puoi configurare facoltativamente alcune parti del comportamento di staging utilizzando gli elementi di staging nel file di configurazione dell'applicazione. La maggior parte delle applicazioni verrà eseguita correttamente senza configurare manualmente il comportamento di staging. Se la tua app non viene implementata, potrebbe essere necessario configurare lo staging utilizzando le opzioni mostrate di seguito.
Elemento | Descrizione |
---|---|
<staging> |
Facoltativo. La maggior parte delle applicazioni non deve modificare il comportamento predefinito. L'elemento di gestione temporanea ti consente di specificare una particolare configurazione di gestione temporanea, se necessaria per il deployment. Questo elemento può contenere i seguenti elementi:
Ad esempio: <staging> <delete-jsps>false</delete-jsps> </staging> |
Valori predefiniti dell'opzione di staging
Le impostazioni predefinite per le opzioni di gestione temporanea variano a seconda che utilizzi strumenti basati su Google Cloud SDK, come gcloud CLI, o i plug-in Maven, Gradle, Eclipse o IntelliJ basati su Google Cloud SDK.
Elemento temporaneo | Valori predefiniti basati sull'SDK App Engine: | Valori predefiniti basati su Google Cloud SDK |
---|---|---|
enable-jar-splitting |
false |
true |
jar-splitting-excludes |
NA | NA |
disable-jar-jsps |
false |
false |
enable-jar-classes |
false |
true . Ciò può influire sull'ordine di caricamento delle classi, quindi se la tua app dipende da un determinato ordine utilizzando il valore predefinito false precedente, puoi impostare questo valore su false . |
delete-jsps |
false |
true |
compile-encoding |
utf-8 |
utf-8 |
Sintassi di inclusione ed esclusione
I pattern di percorso vengono specificati utilizzando zero o più elementi <include>
e
<exclude>
. In un pattern, '*'
rappresenta zero o più
caratteri in un nome di file o directory, mentre **
rappresenta zero o più
directory in un percorso. I file e le directory che corrispondono ai pattern <exclude>
non verranno caricati quando esegui il deployment dell'app in App Engine. Tuttavia,
questi file e directory saranno comunque accessibili alla tua applicazione quando
viene eseguita sul server di sviluppo locale.
Un elemento <include>
esegue l'override del comportamento predefinito di inclusione di tutti i file. Un elemento <exclude>
viene applicato dopo tutti i pattern <include>
(nonché quello predefinito se non viene fornito alcun <include>
esplicito).
L'esempio seguente mostra come designare tutti i file .png
come statici (ad eccezione di quelli nella directory data/
e in tutte le relative sottodirectory):
<static-files>
<include path="/**.png" />
<exclude path="/data/**.png" />
</static-files>
Puoi anche impostare le intestazioni HTTP da utilizzare quando rispondi alle richieste di queste risorse statiche.
<static-files>
<include path="/my_static-files" >
<http-header name="Access-Control-Allow-Origin"
value="http://example.org" />
</include>
</static-files>
Tipi MIME per i file statici
Per impostazione predefinita, i file statici vengono pubblicati utilizzando un tipo MIME selezionato in base all'estensione del nome file. Puoi associare tipi MIME personalizzati a estensioni
dei nomi file per i file statici utilizzando gli elementi mime-mapping
in web.xml
.
Timeout di URLFetch
Puoi impostare una scadenza per ogni richiesta
URLFetch. Per impostazione predefinita, la scadenza per un recupero è di 5 secondi.
Puoi modificare questa impostazione predefinita includendo la seguente impostazione nel file di configurazione
appengine-web.xml
. Specifica il timeout in secondi:
<system-properties>
<property name="appengine.api.urlfetch.defaultDeadline" value="10"/>
</system-properties>