設定檔

服務的每個版本是由 .yaml 檔案來定義,該檔案會說明服務與版本的名稱。YAML 檔案通常與其定義的服務同名,但這並非必要條件。如要部署某項服務的數個版本,可以在同一個目錄中建立多個 yaml 檔案 (每個版本各一個)。

一般來說,您可以為各項服務建立目錄,當中包含該項服務的 YAML 檔案和相關聯原始碼。最上層應用程式目錄中會包含選用的應用程式層級設定檔 (dispatch.yamlcron.yamlindex.yamlqueue.yaml)。以下範例呈現了三項服務。service1service2 中的原始檔與 YAML 檔案位於相同層級,service3 中則包含兩個版本的 YAML 檔案。

YAML 服務階層圖

如為小型、簡易型專案,您可以將所有應用程式檔案存放於同一個目錄:

小型 YAML 服務階層圖

每一個 YAML 檔案都必須含有一個版本參數。如要定義預設服務,您可以明確納入 service: default 參數,或是將服務參數排除在檔案之外。

每個服務設定檔都會定義特定服務/版本的資源調度類型和執行個體類別。視指定的資源調度類型而定,您必須使用不同的資源調度參數。如果您未指定資源調度設定,預設值為自動調整資源配置。如需資源調度和執行個體類別設定的相關說明,請參閱 appengine-web.xml 參考資料部分。

您也可以針對各項服務指定設定,將網址要求對應至特定指令碼及識別靜態檔案,藉此提升伺服器的工作效率。這些設定也會包含在 yaml 檔案中,相關說明請見 appengine-web.xml 參考資料部分。

預設服務

每個應用程式均有一項預設服務。您可以在 appengine-web.xml 中使用 service: default 設定來定義預設服務,不過此為選用動作。凡是與服務有關的設定參數均可套用至預設服務。

選用設定檔

這些設定檔控制適用於應用程式中所有服務的選用功能:

  • dispatch.yaml 會根據網址中的路徑或主機名稱,將傳入要求傳送至特定服務,藉此覆寫轉送預設規則。
  • queue.yaml 會同時設定發送佇列和提取佇列。
  • 如果應用程式使用 Datastore 查詢,index.yaml 會指定應用程式需要哪些索引。
  • cron.yaml 會設定定期工作,依照指定的時間或間隔規律執行特定工作。

如要在 App Engine 中部署這些設定檔的更新內容,請在設定檔所在的目錄中執行以下指令:

    gcloud app deploy [CONFIG_FILE]

範例

以下範例顯示了如何為具備兩項服務的應用程式設定 WAR 目錄結構中的各個檔案。這兩項服務分別為處理網路要求的預設服務,以及負責處理後端的「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>

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 用戶端在呼叫服務時,無須將其附加至網址路徑的最前方。