使用 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 美元。每個伺服器都是 App Engine 執行個體,在彈性環境中具有 1 個 vCPU、0.5 GB 記憶體和 10 GB 磁碟

請參閱「管理 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 Platform 中,開啟「記錄路由器」。請確認您位於與容器 ID 相符的專案中:
    GCP 專案選取器的螢幕截圖,顯示範例代碼管理工具容器 ID。
  2. 在「類型」Cloud Logging bucket、「名稱」_Default 行中,選取溢位選單,然後按一下「編輯接收器」
  3. 在「接收器目的地」下方,選取記錄檔 bucket「_Default」
  4. 在「選擇要納入接收器的記錄檔」下方,新增一行。在現有的納入篩選器中輸入下列規則:

    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. 確認記錄檔探索工具記錄中未顯示任何新要求。

控制台記錄

容器中的標記伺服器、用戶端或標記可能會將訊息記錄到控制台,這可能會產生記錄費用。如要減少或免除記錄費用,可以停用不必要的控制台記錄訊息。

找出不適用的控制台記錄:

  1. 在 GCP 中,開啟「記錄檔探索工具」
  2. 找出標記產生的任何不必要的記錄訊息。例如:

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

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

    在「textPayload」欄位中尋找對應的記錄訊息:
    GCP Logs Explorer 的螢幕截圖,顯示記錄檔範例。

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

  1. 在 Google Cloud Platform 中,開啟「記錄路由器」。請確認您位於與容器 ID 相符的專案中:
    GCP 專案選取器的螢幕截圖,顯示範例代碼管理工具容器 ID。
  2. 在「類型」Cloud Logging bucket、「名稱」_Default 行中,選取溢位選單,然後按一下「編輯接收器」
  3. 在「接收器目的地」下方,選取記錄檔 bucket「_Default」
  4. 在「選擇要納入接收器的記錄檔」下方,新增一行。在現有的納入篩選器中輸入下列規則:

    NOT textPayload:"Custom message:"
    

    如果是主控台記錄,請將 Custom message: 文字替換為要停用的主控台記錄子字串。如要使用更精細的篩選器,請運用 Logging 查詢語言

  5. 按一下「更新接收器」套用變更。相符的logToConsole 訊息應排除在記錄檔之外。

  6. 確認記錄檔總管中沒有顯示新的控制台記錄訊息。

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

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

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

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

現在您已擁有伺服器,請務必讓 Google 代碼管理工具知道應使用您的伺服器。

  1. 開啟 Google 代碼管理工具

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

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

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

  5. 儲存並返回工作區。

5. 驗證

標記伺服器設定完成後,請確認運作正常。

使用者介面驗證

在代碼管理工具工作區中,按一下「預覽」按鈕。如果預覽頁面載入,表示一切設定正確無誤。

API 驗證

您也可以使用伺服器的 API,確認伺服器是否回應健康狀態檢查:

  1. 依序前往「管理」>「容器設定」,複製「伺服器容器網址」
  2. 開啟新的瀏覽器分頁。
  3. 貼上網址,並在路徑中附加 /healthy。例如:https://www.example.com/metrics/healthy
  4. 如果服務正常運作,頁面上應該會顯示 ok 這段文字。

如果缺少特定產品的要求,請確認是否已觸發事件。config 指令會初始化產品,但通常只有在呼叫 event 時才會傳輸資料。

如要進一步瞭解伺服器端代碼驗證的最佳做法,請參閱「自訂網域設定」。

預覽多個網址

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

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

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

如果新增多個網址,預覽按鈕旁會顯示圖示,可供你選取要預覽的網址。

更新標記伺服器版本

新的標記伺服器更新包含安全性漏洞修正和新功能。代碼管理工具通知您更新時,建議您至少為每個主要版本更新標記伺服器 (例如從 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. 在伺服器容器中,按一下「預覽」按鈕,啟動新的偵錯工作階段,並在另一個分頁中傳送要求。
  2. 在「摘要」中,選取「控制台」分頁標籤,確認沒有要求更新標記伺服器的訊息。

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

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

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

  1. 服務帳戶的權限不正確 - Compute Engine 和 App Engine 服務帳戶負責部署及維護正式環境部署作業。系統預設會預先設定適當的權限。不過,有時機構的政策可能會導致這些資訊不正確。

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

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