使用 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 Platform 中開啟「記錄檔路由器」。請確認您所在專案與容器 ID 相符:
    GCP 專案選取器的螢幕截圖,顯示代碼管理工具容器 ID 範例。
  2. 在「Type」(類型):Cloud Logging 值區名稱_Default 行,選取溢位選單,然後按一下 [Edit Sink] (編輯接收器)
  3. 在「接收器目的地」下方,選取記錄檔值區 [_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 記錄檔探索工具的螢幕截圖
顯示記錄範例

如何停用主控台記錄訊息:

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

    NOT textPayload:"Custom message:"
    

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

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

  6. 確認「記錄檔探索工具」中並未出現新的主控台記錄訊息。

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

預設的伺服器端標記部署作業是由 App Engine 網域代管。建議您修改部署作業,使用網站的子網域。

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

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

現在您已擁有伺服器,則必須確定 Google 代碼管理工具知道伺服器應使用您的伺服器。

  1. 開啟 Google 代碼管理工具

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

  3. 在「Admin」分頁 >「Container Settings」開啟您的伺服器容器設定。

  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 服務帳戶負責部署及維護實際工作環境部署。根據預設,這些 API 已預先設定適當的權限。然而,在某些情況下,組織的政策可能會造成這些錯誤。

    1. 前往 Google Cloud 控制台左側導覽列的「IAM 與管理」頁面。
    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 與管理」頁面,然後按一下左側導覽列的「Quotas」(配額) 分頁標籤。
    2. 在頁面頂端附近,按一下「Filter table」(篩選資料表) 文字方塊,然後輸入 Compute Engine API。按一下唯一結果。
    3. 確認所有配額狀態都不超過限制,或顯示綠色勾號。
    4. 找到「CPU」並按一下該圖示。確認目前的用量加上部署的執行個體數量仍低於部署區域的限制。