Ogni versione di un servizio è definita in un file .yaml
, che fornisce il nome di
il servizio e la versione. Il file YAML di solito ha lo stesso nome del
che definisce il servizio, ma non è obbligatorio. Se esegui il deployment
più versioni di un servizio, puoi creare più file YAML nella stessa directory,
uno per ogni versione.
In genere, crei una directory per ogni servizio, che contiene i file YAML del servizio e il codice sorgente associato. Configurazione facoltativa a livello di applicazione
file (dispatch.yaml
, cron.yaml
, index.yaml
e queue.yaml
) sono
incluso nella directory dell'app di primo livello. L'esempio seguente mostra tre servizi.
In service1
e service2
, i file di origine sono allo stesso livello del file YAML
. In service3
sono presenti file YAML per due versioni.
Per progetti piccoli e semplici, tutti i file dell'app possono trovarsi in una directory:
Ogni file YAML deve includere un parametro di versione. Per definire il servizio predefinito,
puoi includere esplicitamente il parametro service: default
o uscire dal servizio
dal file.
Il file di configurazione di ogni servizio definisce il tipo di scalabilità e la classe di istanza per un servizio/una versione specifici. Vengono utilizzati parametri di scalabilità diversi a seconda del tipo di scalabilità specificato. Se non specifichi la scalabilità, il valore predefinito è la scalabilità automatica. Le impostazioni di scalabilità e classe di istanza sono descritte in
appengine-web.xml
riferimento
.
Per ogni servizio puoi anche specificare impostazioni che mappano le richieste di URL a script specifici e identificano i file statici per una maggiore efficienza del server. Queste impostazioni
sono incluse anche nel file YAML e sono descritte
Riferimento appengine-web.xml
.
Il servizio predefinito
Ogni applicazione ha un unico servizio predefinito. Puoi definire il servizio predefinito in appengine-web.xml
con l'impostazione service: default
, ma non è necessario. Tutti i parametri di configurazione pertinenti ai servizi possono essere applicati al servizio predefinito.
File di configurazione facoltativi
Questi file di configurazione controllano le funzionalità facoltative che si applicano a tutti i servizi di un'app:
dispatch.yaml
sostituisce le regole di routing predefinite inviando le richieste in entrata a un servizio specifico in base al percorso o al nome host nell'URL.queue.yaml
configura sia le code push sia le code pull.index.yaml
specifica gli indici necessari per l'app se utilizzi le query Datastore.cron.yaml
configura attività programmate a intervalli regolari che operano in orari specifici o in modo regolare intervalli.
Per eseguire il deployment degli aggiornamenti di questi file di configurazione in App Engine, esegui seguente comando dalla directory in cui si trova:
gcloud app deploy [CONFIG_FILE]
Un esempio
Ecco un esempio di come configureresti i vari file in un file WAR
struttura di directory per un'applicazione con due servizi: un servizio predefinito
che gestisce le richieste web, più un altro servizio (denominato my-service
) per il backend
e l'elaborazione dei dati.
Supponendo che la directory EAR di primo livello sia "my-application", definisci il file
my-application/META-INF/appengine-application.xml
:
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<appengine-application xmlns="http://appengine.google.com/ns/1.0">
<application>my-application</application>
</appengine-application>
Crea le directory WAR per i due servizi: my-application/default
e my-application/my-service
.
Ora crea un file appengine-web.xml
in ogni WAR che specifichi i parametri
per il servizio. Il file deve includere un nome della versione per il servizio. Per definire il servizio predefinito, puoi includere esplicitamente il parametro <service>default</service>
o ometterlo dal file. Ecco il filemy-application/default/WEB-INF/appengine-web.xml
che definisce il servizio predefinito:
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
<application>my-application</application>
<module>default</module>
<version>uno</version>
<threadsafe>true</threadsafe>
</appengine-web-app>
Il file my-application/my-service/WEB-INF/appengine-web.xml
definisce il servizio che gestirà le richieste in background:
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
<application>my-application</application>
<module>my-service</module>
<version>uno</version>
<threadsafe>true</threadsafe>
<manual-scaling>
<instances>5</instances>
</manual-scaling>
</appengine-web-app>
Infine, definisci il file my-application/META-INF/application.xml
che elenca i servizi. Tieni presente che il servizio predefinito dovrebbe essere il primo
tra quelli elencati di seguito.
<?xml version="1.0"
encoding="UTF-8"?>
<application
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/application_5.xsd"
version="5">
<description>GAE Java SuperFun app</description>
<display-name>SuperFun</display-name>
<!-- Services -->
<!-- The default service should be listed first -->
<module>
<web>
<web-uri>default</web-uri>
<context-root>default</context-root>
</web>
</module>
<module>
<web>
<web-uri>my-service</web-uri>
<context-root>my-service</context-root>
</web>
</module>
</application>
App Engine ignorerà gli elementi <context-root>
, quindi i client HTTP non dovranno
anteponilo al percorso dell'URL quando ci si rivolge a un servizio.