File di configurazione

Ogni versione di un servizio è definita in un file .yaml, che indica il nome del servizio e la versione. Il file YAML di solito ha lo stesso nome del servizio che definisce, ma questo non è obbligatorio. Se stai eseguendo il deployment di diverse versioni di un servizio, puoi creare più file YAML nella stessa directory, uno per ogni versione.

In genere, per ogni servizio viene creata una directory contenente i file YAML del servizio e il codice sorgente associato. I file di configurazione facoltativi a livello di applicazione (dispatch.yaml, cron.yaml, index.yaml e queue.yaml) sono inclusi nella directory delle app di primo livello. L'esempio seguente mostra tre servizi. In service1 e service2, i file di origine si trovano allo stesso livello del file YAML. In service3 esistono file YAML per due versioni.

Grafico della gerarchia dei servizi YAML

Per i progetti piccoli e semplici, tutti i file dell'app possono essere inseriti in un'unica directory:

Grafico della gerarchia di piccoli servizi YAML

Ogni file YAML deve includere un parametro di versione. Per definire il servizio predefinito, puoi includere esplicitamente il parametro service: default o escludere il parametro del servizio dal file.

Il file di configurazione di ogni servizio definisce il tipo di scalabilità e la classe dell'istanza per un servizio/versione specifici. Vengono utilizzati diversi parametri di scalabilità a seconda del tipo di scalabilità specificato. Se non specifichi la scalabilità, quella automatica è l'impostazione predefinita. Le impostazioni di scalabilità e classe di istanza sono descritte nella sezione di riferimento appengine-web.xml.

Per ogni servizio puoi anche specificare le impostazioni che mappano le richieste URL a script specifici e identificano i file statici per migliorare l'efficienza del server. Queste impostazioni sono incluse anche nel file YAML e sono descritte nella sezione Riferimento appengine-web.xml.

Il servizio predefinito

Ogni applicazione ha un singolo 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 in un'app:

  • dispatch.yaml esegue l'override delle regole predefinite di routing inviando le richieste in arrivo a un servizio specifico in base al percorso o al nome host nell'URL.
  • queue.yaml configura sia le code in modalità push sia le code in modalità pull.
  • index.yaml specifica gli indici necessari all'app se utilizzi le query Datastore.
  • cron.yaml configura attività programmate regolarmente che operano in orari definiti o a intervalli regolari.

Per eseguire il deployment degli aggiornamenti di questi file di configurazione in App Engine, esegui questo comando dalla directory in cui si trovano:

    gcloud app deploy [CONFIG_FILE]

Esempio

Ecco un esempio di come configurare i vari file in una struttura di directory WAR per un'applicazione che dispone di due servizi: un servizio predefinito che gestisce le richieste web e un altro servizio (denominato my-service) per l'elaborazione del backend.

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 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 di versione per il servizio. Per definire il servizio predefinito, puoi includere esplicitamente il parametro <service>default</service> o escluderlo dal file. Ecco il file my-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 enumera i servizi. Tieni presente che il servizio predefinito dovrebbe essere il primo nell'elenco.

<?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 devono anteporre il codice al percorso dell'URL durante l'indirizzamento di un servizio.