使用 App Engine 設定伺服器端代碼

本指南將說明如何:

  • 在 Google Cloud Platform (GCP) App Engine 上佈建標記伺服器。
  • 升級標記伺服器來處理即時流量。
  • 增加或減少執行 Google 代碼管理工具容器的伺服器數量。
  • 佈建伺服器後,請持續更新標記伺服器版本。

必要條件

  1. 您需要 GCP 帳戶。如果沒有,請建立新的 GCP 帳戶
  2. 您需要 GCP 帳單帳戶。如果沒有,請建立 GCP 帳單帳戶 (需要具備「帳單帳戶建立者」角色)。
  3. 您需要具備專案建立者和帳單帳戶使用者角色。進一步瞭解如何新增角色

1. 配置伺服器

如要在 App Engine 執行個體上建立新的標記伺服器,您必須:

  • 在代碼管理工具中建立新的伺服器容器
  • 建立新的 Google Cloud 專案 (GCP)
  • 佈建新的 App Engine 標記伺服器
  • 將新的標記伺服器網址加入代碼管理工具伺服器容器

建立 Google 代碼管理工具伺服器容器

  1. 開啟 Google 代碼管理工具

  2. 在帳戶列中,依序按一下溢位選單 >「建立容器」

  3. 建立新的伺服器容器。

  4. 按一下「手動佈建標記伺服器」圓形按鈕。請注意容器設定。您需要這項資訊才能佈建伺服器。

建立新的 GCP 專案

如要為標記伺服器建立新的 GCP 專案,請按照下列步驟操作:

  1. 開啟 Google Cloud 控制台

  2. 建立新的 GCP 專案

  3. 為專案命名,建議您使用容器 ID 來方便操作。這個名稱僅用於 GCP。

  4. 請記下 GCP 專案 ID,因為您需要這個 ID 建立代碼標記伺服器。

佈建新的標記伺服器

如要建立標記伺服器,請按照下列步驟操作:

  1. 開啟 Cloud Shell

  2. 在 Cloud Shell 中設定 GCP 專案。將 project ID 替換成您先前記下的 GCP 專案 ID:

    gcloud config set project project ID
    
  3. 按照指令稿建立標記伺服器。將部署類型設為 testing

    bash -c "$(curl -fsSL https://googletagmanager.com/static/serverjs/setup.sh)"
    

將標記伺服器網址新增至代碼管理工具

  1. 開啟 Google 代碼管理工具

  2. 在「管理」>「容器設定」中,按一下「新增網址」。如果您不知道伺服器的網址,請在 Cloud Shell 中執行下列指令:

    gcloud app browse
    

    結果:您已設定標記伺服器,並使用 testing 設定佈建該伺服器。您現在可以測試伺服器端代碼。

初始伺服器設定 (testing)

測試設定適合用於探索產品,方法是傳送少量測試流量,並使用代碼管理工具中的「預覽」功能。這項設定是標準環境中的 App Engine F1 執行個體類別,在大多數情況下不會產生任何費用。

2. 在實際工作環境中使用 App Engine

production 設定中,每部伺服器的費用約為每月 $40 美元。每個伺服器都是在彈性環境中,具有 1 個 vCPU、0.5 GB 記憶體和 10 GB 磁碟空間的 App Engine 例項。

如要瞭解 App Engine 帳單以及如何設定帳單快訊,請參閱管理 App Engine 費用一文。強烈建議您設定帳單快訊

建議您至少執行 3 部伺服器,以降低伺服器停機時資料遺失的風險。不過,您可以選擇較少 (或更多) 伺服器。我們預期自動調度 3 至 6 部伺服器 (預設值) 每秒可處理 50 至 200 個要求。效能取決於代碼數量,以及這些代碼的功能。

如要設定標記伺服器,請按照下列步驟操作:

  1. 開啟 Google Cloud Platform Cloud Shell
  2. 在 Cloud Shell 中設定 Cloud Platform 專案。將 project ID 替換成您先前記下的 GCP 專案 ID:
    gcloud config set project project ID
  3. 如要為正式環境重新設定標記伺服器,請執行下列設定指令碼。請執行以下工作:
    bash -c "$(curl -fsSL https://googletagmanager.com/static/serverjs/setup.sh)"
    1. 將部署類型變更為 production
    2. 設定其他伺服器,以便處理正式版流量。建議您至少使用三個伺服器。

選用:停用記錄功能

要求記錄

根據預設,App Engine 會針對收到的每個要求 (例如要求路徑、查詢參數等) 記錄相關資訊。如果您的代碼標記伺服器每月處理大量要求 (例如超過 100 萬次),這些記錄訊息可能會產生大量記錄費用。如要減少或取消記錄費用,建議您停用 App Engine 要求記錄功能。

如何停用 App Engine 要求記錄功能:

  1. 在 Google Cloud 平台中,開啟 Logs Router。請確認您在與容器 ID 相符的專案內:
    GCP 專案選擇器的螢幕截圖,顯示範例的 Google 代碼管理工具容器 ID。
  2. 針對「Type」Cloud Logging 值區、「Name」_Default 行,請選取溢出選單,然後按一下「Edit Sink」
  3. 在「接收器目的地」下方,選取記錄檔值區 _Default
  4. 在「Choose logs to include in sink」(選擇要納入接收器的記錄檔) 下方新增一行,請在現有的「包含」篩選器中輸入下列規則:

    NOT LOG_ID("appengine.googleapis.com/nginx.request") AND NOT
    LOG_ID("appengine.googleapis.com/request_log")
    
  5. 如要同時停用負載平衡器的記錄功能,請新增一行,並在現有的納入篩選器中輸入下列規則:

    NOT LOG_ID("requests")
    
  6. 更新接收器以套用變更。系統現在會將 App Engine 要求排除在記錄之外。

  7. 確認 Logs Explorer 記錄檔中沒有任何新要求。

控制台記錄

容器中的代碼伺服器、用戶端或代碼,可能會將訊息記錄到主控台,而這可能會產生記錄費用。如要減少或取消記錄作業的費用,您可以停用不必要的控制台記錄訊息。

找出不需要的主控台記錄:

  1. 在 GCP 中開啟記錄檔探索工具
  2. 請找出任何來自標記的不需要的記錄訊息。例如:

    代碼可能會傳送下列記錄:

    const logToConsole = require('logToConsole');
    
    logToConsole('Custom message: ' + data.param1);
    logToConsole('An important message to keep around!');
    data.gtmOnSuccess()
    

    textPayload 欄位中尋找對應的記錄訊息:
    GCP 記錄檔探索工具的螢幕截圖,顯示記錄範例。

如要停用主控台記錄訊息,請按照下列步驟操作:

  1. 在 Google Cloud 平台中,開啟 Logs Router。請確認您在與容器 ID 相符的專案內:
    GCP 專案選取器的螢幕截圖,顯示代碼管理工具容器 ID 範例。
  2. 針對「Type」Cloud Logging 值區、「Name」_Default 行,請選取溢出選單,然後按一下「Edit Sink」
  3. 在「接收器目的地」下方,選取記錄檔值區 _Default
  4. 在「Choose logs to include in sink」(選擇要納入接收器的記錄檔) 下方新增一行,在現有的納入篩選器中輸入下列規則:

    NOT textPayload:"Custom message:"
    

    針對主控台記錄檔,請將 Custom message: 文字替換為您要停用的記錄檔子字串。如需更精細的篩選器,請使用記錄查詢語言

  5. 更新接收器即可套用變更。相符的 logToConsole 訊息應從記錄中排除。

  6. 確認 Logs Explorer 中沒有顯示新的控制台記錄訊息。

3. 將部署作業對應至自訂網域

預設的伺服器端代碼部署作業會在 App Engine 網域中代管。建議您修改部署作業,使用網站的子網域。

將網站子網域對應至標記伺服器

4. 將伺服器網址新增至 Google 代碼管理工具

有了伺服器後,您必須確保 Google 代碼管理工具知道應使用您的伺服器。

  1. 開啟 Google 代碼管理工具

  2. 按一下您要指向標記伺服器的伺服器容器。

  3. 依序點選「管理」分頁標籤 >「容器設定」,開啟伺服器容器設定。

  4. 按一下「新增網址」,然後貼上伺服器網址。

  5. 按一下「儲存」,然後返回工作區。

5. 驗證

標記伺服器設定完成後,請確認該伺服器可正常運作。在代碼管理工具工作區中,按一下「預覽」按鈕。如果預覽頁面載入,表示一切設定都正確無誤。

預覽多個網址

如果您已將多個網域對應至單一標記伺服器,請確認已將每個網址新增至容器設定。

如果您提供多個網址,所有路徑 (網域名稱後面的字串) 都必須一致。

作品 無法運作
網址 1:example.com/abc
網址 2:example2.com/abc
網址 1:example.com/abc
網址 2:example2.com/def

如果您新增了多個網址,「Preview」按鈕旁邊會顯示圖示,讓您選取要預覽的網址。

更新標記伺服器版本

新的標記伺服器更新包含安全漏洞修正和新功能。建議您至少在代碼管理工具通知您更新時,為每個主要版本發布更新標記伺服器 (例如從 1.x.x 升級至 2.x.x)。

如要更新代碼伺服器,請使用先前相同的設定重新執行設定指令碼。系統會預設採用現有設定。

如要更新標記伺服器,請按照下列步驟操作:

  1. 開啟 Google Cloud Platform Cloud Shell
  2. 在 Cloud Shell 中設定 Cloud Platform 專案。將 project ID 替換為您先前記下的 GCP 專案 ID:
    gcloud config set project project ID
  3. 使用先前相同的設定執行設定指令碼。系統會預設使用現有設定。
    bash -c "$(curl -fsSL https://googletagmanager.com/static/serverjs/setup.sh)"

如要確認更新是否成功,請按照下列步驟操作:

  1. 在伺服器容器中,按一下「Preview」按鈕啟動新的偵錯工作階段,並在另一個分頁中傳送要求。
  2. 在「Summary」(摘要) 中,選取「Console」(控制台) 分頁標籤,確認沒有任何訊息要求您更新標記伺服器。

在成功更新伺服器後,代碼管理工具最多可能會在一天內顯示訊息,要求您更新標記伺服器。不過,預覽頁面會顯示標記伺服器版本的最新訊息。

排解實際運作部署作業逾時問題

執行設定指令碼來建立或重新設定標記伺服器時,指令碼可能會逾時。造成這種情況的原因有很多,最常見的兩種是:

  1. 服務帳戶的權限不正確:Compute Engine 和 App Engine 服務帳戶負責部署及維護實際運作的部署。根據預設,這些服務會預先設定適當的權限。不過,在某些情況下,機構的政策可能會導致這些值不正確。

    1. 前往 Google Cloud 控制台左側導覽列中的「IAM & Admin」頁面。
    2. 找出 Compute Engine 服務帳戶 <project_number>-compute@developer.gserviceaccount.com 和 App Engine 服務帳戶 <project_name>@appspot.gserviceaccount.com
    3. 兩個服務帳戶都必須具備 Editor 角色。如果其中一個帳戶沒有 Editor 角色,請按一下帳戶右側的鉛筆圖示,按一下現有角色的下拉式選單,然後向上捲動至頂端並依序點選「Project」和「Editor」,即可更新角色。
  2. 配額不足:實際部署作業會消耗 Compute Engine 配額。如果專案配額不足,部署作業可能會在嘗試佈建資源時逾時。

    1. 前往 Google Cloud 控制台左側導覽列中的「IAM 與管理」頁面,然後按一下左側導覽列中的「配額」分頁。
    2. 在頁面頂端附近,按一下標示為「Filter table」(篩選資料表) 的文字方塊,然後輸入 Compute Engine API。按一下唯一的搜尋結果。
    3. 確認所有配額狀態均在限制範圍內,或顯示綠色勾號。
    4. 找出並點選「CPU」。確認目前的用量加上部署的執行個體數量仍低於部署區域的限制。