本指南將說明如何:
- 在 Google Cloud Platform (GCP) App Engine 上佈建標記伺服器。
- 升級標記伺服器來處理即時流量。
- 增加或減少執行 Google 代碼管理工具容器的伺服器數量。
- 佈建伺服器後,請持續更新標記伺服器版本。
必要條件
- 您需要 GCP 帳戶。如果沒有,請建立新的 GCP 帳戶。
- 您需要 GCP 帳單帳戶。如果沒有,請建立 GCP 帳單帳戶 (需要具備「帳單帳戶建立者」角色)。
- 您需要具備專案建立者和帳單帳戶使用者角色。進一步瞭解如何新增角色。
1. 配置伺服器
如要在 App Engine 執行個體上建立新的標記伺服器,您必須:
- 在代碼管理工具中建立新的伺服器容器
- 建立新的 Google Cloud 專案 (GCP)
- 佈建新的 App Engine 標記伺服器
- 將新的標記伺服器網址加入代碼管理工具伺服器容器
建立 Google 代碼管理工具伺服器容器
開啟 Google 代碼管理工具。
在帳戶列中,依序按一下溢位選單 >「建立容器」。
建立新的伺服器容器。
按一下「手動佈建標記伺服器」圓形按鈕。請注意容器設定。您需要這項資訊才能佈建伺服器。
建立新的 GCP 專案
如要為標記伺服器建立新的 GCP 專案,請按照下列步驟操作:
開啟 Google Cloud 控制台。
為專案命名,建議您使用容器 ID 來方便操作。這個名稱僅用於 GCP。
請記下 GCP 專案 ID,因為您需要這個 ID 建立代碼標記伺服器。
佈建新的標記伺服器
如要建立標記伺服器,請按照下列步驟操作:
開啟 Cloud Shell。
在 Cloud Shell 中設定 GCP 專案。將
project ID
替換成您先前記下的 GCP 專案 ID:gcloud config set project project ID
按照指令稿建立標記伺服器。將部署類型設為
testing
。bash -c "$(curl -fsSL https://googletagmanager.com/static/serverjs/setup.sh)"
將標記伺服器網址新增至代碼管理工具
開啟 Google 代碼管理工具。
在「管理」>「容器設定」中,按一下「新增網址」。如果您不知道伺服器的網址,請在 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 個要求。效能取決於代碼數量,以及這些代碼的功能。
如要設定標記伺服器,請按照下列步驟操作:
- 開啟 Google Cloud Platform Cloud Shell。
- 在 Cloud Shell 中設定 Cloud Platform 專案。將
project ID
替換成您先前記下的 GCP 專案 ID:gcloud config set project project ID
- 如要為正式環境重新設定標記伺服器,請執行下列設定指令碼。請執行以下工作:
bash -c "$(curl -fsSL https://googletagmanager.com/static/serverjs/setup.sh)"
- 將部署類型變更為
production
。 - 設定其他伺服器,以便處理正式版流量。建議您至少使用三個伺服器。
- 將部署類型變更為
選用:停用記錄功能
要求記錄
根據預設,App Engine 會針對收到的每個要求 (例如要求路徑、查詢參數等) 記錄相關資訊。如果您的代碼標記伺服器每月處理大量要求 (例如超過 100 萬次),這些記錄訊息可能會產生大量記錄費用。如要減少或取消記錄費用,建議您停用 App Engine 要求記錄功能。
如何停用 App Engine 要求記錄功能:
- 在 Google Cloud 平台中,開啟 Logs Router。請確認您在與容器 ID 相符的專案內:
- 針對「Type」:Cloud Logging 值區、「Name」:_Default 行,請選取溢出選單,然後按一下「Edit Sink」。
- 在「接收器目的地」下方,選取記錄檔值區 _Default。
在「Choose logs to include in sink」(選擇要納入接收器的記錄檔) 下方新增一行,請在現有的「包含」篩選器中輸入下列規則:
NOT LOG_ID("appengine.googleapis.com/nginx.request") AND NOT LOG_ID("appengine.googleapis.com/request_log")
如要同時停用負載平衡器的記錄功能,請新增一行,並在現有的納入篩選器中輸入下列規則:
NOT LOG_ID("requests")
更新接收器以套用變更。系統現在會將 App Engine 要求排除在記錄之外。
確認 Logs Explorer 記錄檔中沒有任何新要求。
控制台記錄
容器中的代碼伺服器、用戶端或代碼,可能會將訊息記錄到主控台,而這可能會產生記錄費用。如要減少或取消記錄作業的費用,您可以停用不必要的控制台記錄訊息。
找出不需要的主控台記錄:
- 在 GCP 中開啟記錄檔探索工具。
請找出任何來自標記的不需要的記錄訊息。例如:
代碼可能會傳送下列記錄:
const logToConsole = require('logToConsole'); logToConsole('Custom message: ' + data.param1); logToConsole('An important message to keep around!'); data.gtmOnSuccess()
在
textPayload
欄位中尋找對應的記錄訊息:
如要停用主控台記錄訊息,請按照下列步驟操作:
- 在 Google Cloud 平台中,開啟 Logs Router。請確認您在與容器 ID 相符的專案內:
- 針對「Type」:Cloud Logging 值區、「Name」:_Default 行,請選取溢出選單,然後按一下「Edit Sink」。
- 在「接收器目的地」下方,選取記錄檔值區 _Default。
在「Choose logs to include in sink」(選擇要納入接收器的記錄檔) 下方新增一行,在現有的納入篩選器中輸入下列規則:
NOT textPayload:"Custom message:"
針對主控台記錄檔,請將 Custom message: 文字替換為您要停用的記錄檔子字串。如需更精細的篩選器,請使用記錄查詢語言。
更新接收器即可套用變更。相符的
logToConsole
訊息應從記錄中排除。確認 Logs Explorer 中沒有顯示新的控制台記錄訊息。
3. 將部署作業對應至自訂網域
預設的伺服器端代碼部署作業會在 App Engine 網域中代管。建議您修改部署作業,使用網站的子網域。
4. 將伺服器網址新增至 Google 代碼管理工具
有了伺服器後,您必須確保 Google 代碼管理工具知道應使用您的伺服器。
開啟 Google 代碼管理工具。
按一下您要指向標記伺服器的伺服器容器。
依序點選「管理」分頁標籤 >「容器設定」,開啟伺服器容器設定。
按一下「新增網址」,然後貼上伺服器網址。
按一下「儲存」,然後返回工作區。
5. 驗證
標記伺服器設定完成後,請確認該伺服器可正常運作。在代碼管理工具工作區中,按一下「預覽」按鈕。如果預覽頁面載入,表示一切設定都正確無誤。
預覽多個網址
如果您已將多個網域對應至單一標記伺服器,請確認已將每個網址新增至容器設定。
如果您提供多個網址,所有路徑 (網域名稱後面的字串) 都必須一致。
作品 | 無法運作 |
---|---|
網址 1:example.com/abc 網址 2: example2.com/abc |
網址 1:example.com/abc 網址 2: example2.com/def |
如果您新增了多個網址,「Preview」按鈕旁邊會顯示圖示,讓您選取要預覽的網址。
更新標記伺服器版本
新的標記伺服器更新包含安全漏洞修正和新功能。建議您至少在代碼管理工具通知您更新時,為每個主要版本發布更新標記伺服器 (例如從 1.x.x 升級至 2.x.x)。
如要更新代碼伺服器,請使用先前相同的設定重新執行設定指令碼。系統會預設採用現有設定。
如要更新標記伺服器,請按照下列步驟操作:
- 開啟 Google Cloud Platform Cloud Shell。
- 在 Cloud Shell 中設定 Cloud Platform 專案。將
project ID
替換為您先前記下的 GCP 專案 ID:gcloud config set project project ID
- 使用先前相同的設定執行設定指令碼。系統會預設使用現有設定。
bash -c "$(curl -fsSL https://googletagmanager.com/static/serverjs/setup.sh)"
如要確認更新是否成功,請按照下列步驟操作:
- 在伺服器容器中,按一下「Preview」按鈕啟動新的偵錯工作階段,並在另一個分頁中傳送要求。
- 在「Summary」(摘要) 中,選取「Console」(控制台) 分頁標籤,確認沒有任何訊息要求您更新標記伺服器。
在成功更新伺服器後,代碼管理工具最多可能會在一天內顯示訊息,要求您更新標記伺服器。不過,預覽頁面會顯示標記伺服器版本的最新訊息。
排解實際運作部署作業逾時問題
執行設定指令碼來建立或重新設定標記伺服器時,指令碼可能會逾時。造成這種情況的原因有很多,最常見的兩種是:
服務帳戶的權限不正確:Compute Engine 和 App Engine 服務帳戶負責部署及維護實際運作的部署。根據預設,這些服務會預先設定適當的權限。不過,在某些情況下,機構的政策可能會導致這些值不正確。
- 前往 Google Cloud 控制台左側導覽列中的「IAM & Admin」頁面。
- 找出 Compute Engine 服務帳戶
<project_number>-compute@developer.gserviceaccount.com
和 App Engine 服務帳戶<project_name>@appspot.gserviceaccount.com
。 - 兩個服務帳戶都必須具備
Editor
角色。如果其中一個帳戶沒有Editor
角色,請按一下帳戶右側的鉛筆圖示,按一下現有角色的下拉式選單,然後向上捲動至頂端並依序點選「Project」和「Editor」,即可更新角色。
配額不足:實際部署作業會消耗 Compute Engine 配額。如果專案配額不足,部署作業可能會在嘗試佈建資源時逾時。
- 前往 Google Cloud 控制台左側導覽列中的「IAM 與管理」頁面,然後按一下左側導覽列中的「配額」分頁。
- 在頁面頂端附近,按一下標示為「Filter table」(篩選資料表) 的文字方塊,然後輸入
Compute Engine API
。按一下唯一的搜尋結果。 - 確認所有配額狀態均在限制範圍內,或顯示綠色勾號。
- 找出並點選「CPU」。確認目前的用量加上部署的執行個體數量仍低於部署區域的限制。