建構自訂執行階段

自訂執行階段可讓您使用任何支援的彈性環境語言的替代實作方式,或是自訂 Google 提供的語言。您也可以使用任何其他語言編寫程式碼,處理傳入的 HTTP 要求 (範例)。透過自訂執行階段,彈性環境會為您提供及管理資源調度、監控和負載平衡基礎架構,讓您可以專注於建構應用程式。

如要建立自訂執行階段,您必須:

提供 app.yaml 檔案

app.yaml 設定檔至少必須包含下列設定:

runtime: custom
env: flex

如要瞭解應用程式可設定的其他內容,請參閱「使用 app.yaml 設定應用程式」。

建立 Dockerfile

如要查看有關建立 Dockerfile 的完整說明文件,請前往 Docker 網站。如果您使用的是自訂執行階段,無論您提供的是自訂基本映像檔或 Google 的基本映像檔,都必須提供 Dockerfile。

指定基本映像檔

Dockerfile 中的第一個指令通常是指定基本映像檔的 FROM 指令。您可以使用基本映像檔建立容器並建構應用程式。您可以自行撰寫基本映像檔,或是從 DockerHub 等容器註冊資料庫中選取基本映像檔。

找出 Dockerfile

一般來說,Dockerfile 一律命名為 Dockerfile,並與對應的 app.yaml 檔案置於同一目錄中。不過,在某些情況下,工具環境可能會有不同的需求。舉例來說,以 Cloud SDK 為基礎的 Java 工具 (例如 Maven、Gradle、Eclipse 和 IntelliJ 外掛程式) 要求 Dockerfile 位於 src/main/docker/Dockerfile,而 app.yaml 檔案則位於 src/main/appengine/app.yaml。詳情請參閱工具環境的說明文件

程式碼結構

本節說明程式碼必須實作的行為,無論是使用 Google 提供的基本映像檔,還是您自己的基本映像檔。

監聽通訊埠 8080

App Engine 前端會將傳入的要求轉送至 8080 通訊埠上的適當模組。請務必確認應用程式程式碼會監聽 8080。

處理生命週期事件

彈性環境會定期傳送應用程式的特定生命週期事件。

應用程式關閉

當需要關閉執行個體時,新的傳入要求會路由至其他執行個體 (如有),而目前正在處理的要求則會獲得完成所需的時間。關閉執行個體時,彈性環境通常會向應用程式容器傳送 STOP (SIGTERM) 信號。應用程式不需要回應此事件,但可以利用此事件在容器關閉前執行任何必要的清理動作。在正常情況下,系統會等待最多 30 秒,讓應用程式停止運作,然後傳送 KILL (SIGKILL) 訊號,立即關閉執行個體。

在極少數的情況下,中斷事件可能會導致 App Engine 無法提供 30 秒的關閉時間,也就是說,在執行個體終止前,系統可能不會傳送 STOPKILL 信號。為因應這種可能性,您應定期為執行個體狀態設立檢查點,並將其主要做為記憶體內的快取,而非可靠的資料儲存庫。

健康狀態檢查要求

您可以透過定期健康狀態檢查要求,確認是否成功部署 VM 執行個體,以及檢查執行中的執行個體是否維持健康狀態。

建構及部署自訂執行階段

設定 app.yamlDOCKER 檔案後,您就可以建構並部署該容器映像檔至 App Engine。

或者,您也可以部署儲存在 Artifact Registry 中的自訂執行階段的預先建構容器映像檔。舉例來說,您可以使用 Cloud Build 分別建構映像檔,然後將這些映像檔儲存至 Artifact Registry。詳情請參閱「推送及拉取映像檔」。

將應用程式整合至 Google Cloud

在自訂執行階段中執行的應用程式可以使用 Google Cloud 用戶端程式庫存取 Google Cloud 服務。自訂執行階段中的應用程式也可以使用任何使用標準 API 的第三方服務。

透過 Google Cloud 服務進行驗證

應用程式預設憑證提供最簡單的方式,讓您驗證並呼叫 Google API。

如果應用程式使用 Cloud Build 編譯 Docker 映像檔,cloudbuild 網路會代管應用程式預設憑證,讓相關聯的 Google Cloud 服務自動尋找您的憑證。

如要進一步瞭解驗證機制,請參閱「Google 的驗證機制」。

記錄

將要求傳送至在 App Engine 上執行的應用程式時,系統會自動記錄要求和回應的詳細資料。您可以在 Google Cloud 控制台的 Logs Explorer 中查看這些記錄。

應用程式處理要求時,也能將本身的記錄訊息寫入 stdoutstderr。系統會自動收集這些檔案,您也可以在記錄檔探索工具中查看這些檔案。系統僅會保留 stdoutstderr 的最新項目,藉此限制記錄大小。

您也可以使用結尾為 .log.json 的檔案,將自訂記錄寫入 /var/log/app_engine/custom_logs

如果您在應用程式容器中加入任何第三方代理程式,請務必將代理程式設為記錄至 stdoutstderr,或自訂記錄檔。這樣一來,您就能在 Cloud Logging 中查看這些代理程式產生的任何錯誤。

Cloud Logging 代理程式會收集應用程式的要求和應用程式記錄,並保留最多 90 天,大小上限為 1 GB。如果您想將記錄檔保留較長的時間,或儲存超過 1 GB 的記錄檔,可以將記錄檔匯出至 Cloud Storage。您也可以將記錄檔匯出至 BigQuery 和 Pub/Sub,以便進行後續的處理作業。

您也可以使用其他記錄。以下是預設設定的部分記錄:

記錄檔名稱 酬載類型 目的
crash.log 文字 設定失敗時記錄的資訊。如果應用程式無法執行,請查看這個記錄。
monitoring.* 文字 Docker 容器將資料發布至 Cloud Monitoring 的資訊。
shutdown.log 文字 關機時記錄的資訊。
stdout 文字 應用程式的標準輸出內容。
stderr 文字 容器的標準錯誤。
syslog 文字 Docker 容器外的 VM syslog。