File di configurazione

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.

Grafico gerarchia dei servizi YAML

Per progetti piccoli e semplici, tutti i file dell'app possono trovarsi in una directory:

Grafico gerarchia di servizi YAML di piccole dimensioni

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.