構成ファイル

サービスの各バージョンは、サービスの名前とバージョンを指定する .yaml ファイルで定義します。YAML ファイルは通常、その中で定義するサービスと同じ名前にしますが、必ずしもそうする必要はありません。複数のバージョンのサービスをデプロイする場合は、同じディレクトリ内に複数の yaml ファイルを(バージョンごとに 1 つずつ)作成します。

通常、サービスごとにディレクトリを作成し、そこにサービスの YAML ファイルと関連するソースコードを配置します。オプションのアプリケーションレベルの構成ファイル(dispatch.yamlcron.yamlindex.yamlqueue.yaml)は、最上位のアプリ ディレクトリに配置されます。以下の例には、3 つのサービスが示されています。service1service2 では、ソースファイルは YAML ファイルと同じレベルに配置されています。service3 には、2 つのバージョンの YAML ファイルがあります。

YAML サービスの階層グラフ

小さいシンプルなプロジェクトでは、すべてのアプリファイルを 1 つのディレクトリに配置します。

小さい YAML サービスの階層グラフ

すべての YAML ファイルには、バージョン パラメータを含める必要があります。デフォルト サービスを定義するには、service: default パラメータを明示的に記述するか、このパラメータをファイルに記述しないようにします。

サービスごとの構成ファイルによって、特定のサービスまたはバージョンのスケーリング タイプとインスタンス クラスを定義します。指定するスケーリング タイプに応じて、異なるスケーリング パラメータを使用します。スケーリングを指定していない場合は、デフォルトで自動スケーリングになります。スケーリングとインスタンス クラスの設定については、appengine-web.xml リファレンスのセクションをご覧ください。

各サービスに対して、URL リクエストから特定のスクリプトへのマッピング設定や、静的ファイルを識別する設定を行うことで、サーバー効率を高めることもできます。このような設定も yaml ファイルに記載されます。詳細については、appengine-web.xml リファレンスのセクションをご覧ください。

デフォルト サービス

すべてのアプリケーションにはデフォルト サービスが 1 つあります。デフォルト サービスは、appengine-web.xmlservice: default 設定を使用して定義できますが、必ずしも定義する必要はありません。デフォルト サービスには、サービスに関連するすべての構成パラメータが適用されます。

オプションの構成ファイル

以下の構成ファイルを使うと、アプリのすべてのサービスに適用されるオプション機能を制御できます。

  • dispatch.yaml は、受信リクエストを URL のパスまたはホスト名に基づいて特定のサービスに送信することで、ルーティングのデフォルト ルールをオーバーライドします。
  • queue.yaml は、push キューと pull キューの両方を構成します。
  • index.yaml は、Datastore クエリを使用する場合に、アプリに必要なインデックスを指定します。
  • cron.yaml は、定義された時刻または一定間隔で動作する定期スケジュール タスクを構成します。

これらの構成ファイルの更新を App Engine にデプロイするには、そのファイルが配置されているディレクトリから次のコマンドを実行します。

    gcloud app deploy [CONFIG_FILE]

次の例では、アプリケーションの WAR ディレクトリ構造にさまざまなファイルを構成する方法を示します。このアプリケーションには 2 つのサービスがあります。1 つは、ウェブ リクエストを処理するデフォルトのサービス、もう 1 つはバックエンド処理を行う別のサービス(my-service)です。

最上位の EAR ディレクトリが「my-application」であれば、ファイル 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>

2 つのサービス my-application/defaultmy-application/my-service 用の WAR ディレクトリを作成します。

各 WAR に、サービスのパラメータを指定する appengine-web.xml ファイルを作成します。このファイルにはサービスのバージョン名を含める必要があります。デフォルト サービスを定義するには、<service>default</service> パラメータを明示的に記述するか、このパラメータをファイルに記述しないようにします。以下に、デフォルト サービスを定義した my-application/default/WEB-INF/appengine-web.xml ファイルを示します。

<?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>

バックグラウンド リクエストを処理するサービスを定義した my-application/my-service/WEB-INF/appengine-web.xml ファイルは次のとおりです。

<?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>

最後に、サービスを列挙した my-application/META-INF/application.xml ファイルを定義します。デフォルト サービスは最初に記述する必要があるので注意してください。

<?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 では <context-root> 要素が無視されるため、サービスをアドレス指定する際に HTTP クライアントでこの要素を URL パスの前に追加する必要はありません。