在 App Engine 彈性環境中建立自訂執行階段應用程式

區域 ID

REGION_ID 是 Google 根據您在建立應用程式時選取的地區所指派的縮寫代碼。此代碼不對應至國家/地區或省份,即使部分區域 ID 可能與常用的國家/地區和省份代碼相似。如果是 2020 年 2 月後建立的應用程式,App Engine 網址會包含 REGION_ID.r。如果是這段時間前建立的現有應用程式,網址可選擇是否包含區域 ID。

自訂執行階段可讓您建構應用程式,在 Dockerfile 定義的環境中執行。透過 Dockerfile,您可以使用不屬於Google Cloud 的語言和套件,也可以使用與 App Engine 彈性環境所用的相同資源與工具。

在這個快速入門導覽課程中,您可以使用自訂執行階段,將 nginx 網路伺服器啟動至 App Engine。

事前準備

在這個快速入門導覽課程中執行範例應用程式之前,您需要為 App Engine 設定環境,並建立新的 Google Cloud 專案:

  1. 使用 Google Cloud 控制台建立新 Google Cloud 專案:

    1. 開啟 Google Cloud 控制台:

      前往「專案」

    2. 按一下「建立專案」,然後為新專案命名。 Google Cloud

    3. 建立新帳單帳戶或設定現有帳單帳戶,在新 Google Cloud 專案中啟用計費功能:

      前往「帳單」頁面

  2. 下載並安裝 Google Cloud CLI,然後初始化 gcloud CLI:

    下載 SDK

  3. 執行下列 gcloud 指令建立 App Engine 應用程式,並指定您要執行應用程式的地理區域

    gcloud app create
    
  4. 由於新專案中服務帳戶的預設使用方式有所異動,且機構政策預設會啟用安全防護機制,您可能需要授予部署服務帳戶更多角色。如要進一步瞭解如何授予特定角色,請參閱疑難排解指南

App Engine 位置

App Engine 具有「地區性」,這表示執行應用程式的基礎架構位於特定地區,且由 Google 代管,可為該地區內的所有區域提供備援功能。

選擇應用程式的執行地區時,請將您在延遲時間、可用性和耐用性方面的要求,做為主要考量。一般來說,您可以選擇距離應用程式使用者最近的區域,但您也應該考量 App Engine 的適用位置,以及應用程式使用的其他Google Cloud 產品和服務的位置。如果跨多個位置使用服務,可能會影響應用程式的延遲時間和定價

應用程式的地區設定完成後即無法更改。

如果您已建立 App Engine 應用程式,可以透過下列方式查看其區域:

  • 請執行 gcloud app describe 指令。

  • 在 Google Cloud 控制台中開啟 App Engine 資訊主頁。該區域會顯示在頁面頂端附近。

下載 Hello World 應用程式

  1. 選擇下列其中一項操作,將 Hello World 範例應用程式從 GitHub 下載到本機電腦:

    • 從下列存放區複製 Hello World 範例應用程式:

      git clone https://github.com/GoogleCloudPlatform/appengine-custom-runtimes-samples
      
    • 下載 zip 格式的範例,然後將該檔案解壓縮至本機目錄。

  2. 前往程式碼範例所在的 nginx 目錄,例如:

    cd appengine-custom-runtimes-samples/nginx
    

在本機電腦上執行 Hello World

您可以下載並安裝 Docker,然後在本機電腦上執行 Hello World 容器,來測試範例應用程式。

這裡沒有 App Engine 的特定步驟,因此,您可以使用偏好的工具與方法測試範例應用程式。

將 Hello World 部署至 App Engine

準備將範例應用程式部署至 App Engine 時,請執行下列步驟:

  1. app.yamlDockerfile 所在的目錄,執行下列指令:

    gcloud app deploy
    

    瞭解選用標記

  2. 如要查看在 https://PROJECT_ID.REGION_ID.r.appspot.com 執行的應用程式,請執行下列指令,啟動瀏覽器:

    gcloud app browse
    

常見的 gcloud 指令標記

  • 加上 --version 標記以指定專門用來辨識您應用程式版本的 ID。如未指定,將由系統自動產生,例如:--version [YOUR_VERSION_ID]
  • 加上 --project 標記以指定替代 Google Cloud 專案 ID,而不使用您在 gcloud 工具中初始化為預設值的 ID。示例: --project [YOUR_PROJECT_ID]

範例:

gcloud app deploy --version pre-prod-5 --project my-sample-app

如要進一步瞭解如何透過指令列部署應用程式,請參閱測試及部署您的應用程式。如需所有指令標記的清單,請參閱 gcloud app deploy 參考資料。

清除所用資源

為了避免系統向您的 Google Cloud 帳戶收取本頁面所用資源的費用,請按照下列步驟操作。

  1. 前往 Google Cloud 控制台的「Manage resources」(管理資源) 頁面。

    前往「Manage resources」(管理資源)

  2. 在專案清單中選取要刪除的專案,然後點選「Delete」(刪除)
  3. 在對話方塊中輸入專案 ID,然後按一下 [Shut down] (關閉) 以刪除專案。

後續步驟

如要進一步瞭解 Dockerfile,請參閱 Dockerfile 參考資料

要瞭解如何建立自己的自訂執行階段,請參閱建構自訂執行階段一文。

審查程式碼

Hello World 可能是最簡單的 App Engine 應用程式,因為它會建立單一容器,僅執行一個服務與一個版本。本節將詳細說明每個應用程式檔案。

app.yaml

指定應用程式的設定。app.yaml 檔案必須與 Dockerfile 檔案位於同一目錄中。

runtime: custom
env: flex

runtime: custom 項目會告知 App Engine 尋找將會定義執行階段映像檔的 Dockerfile,而 env: flex 會表明您正在部署至彈性環境。

詳情請參閱 app.yaml 參考資料。

Dockerfile

定義一組操作說明,用來為範例應用程式的容器建立 Docker 映像檔。Dockerfile 檔案必須與 app.yaml 檔案位於同一目錄中。這個 Dockerfile 會安裝 nginx 網路伺服器,並複製一些基本設定:

# The standard nginx container just runs nginx. The configuration file added
# below will be used by nginx.
FROM nginx

# Copy the nginx configuration file. This sets up the behavior of nginx, most
# importantly, it ensure nginx listens on port 8080. Google App Engine expects
# the runtime to respond to HTTP requests at port 8080.
COPY nginx.conf /etc/nginx/nginx.conf

# create log dir configured in nginx.conf
RUN mkdir -p /var/log/app_engine

# Create a simple file to handle health checks. Health checking can be disabled
# in app.yaml, but is highly recommended. Google App Engine will send an HTTP
# request to /_ah/health and any 2xx or 404 response is considered healthy.
# Because 404 responses are considered healthy, this could actually be left
# out as nginx will return 404 if the file isn't found. However, it is better
# to be explicit.
RUN mkdir -p /usr/share/nginx/www/_ah && \
    echo "healthy" > /usr/share/nginx/www/_ah/health

# Finally, all static assets.
ADD www/ /usr/share/nginx/www/
RUN chmod -R a+r /usr/share/nginx/www

FROM 指令會使用 nginx 網路伺服器的官方 Docker 映像檔建構基本映像檔。

如果使用這個 Dockerfile,您的容器映像檔會將 nginx 與所有內容包含在應用程式的 www/ 目錄中。

Hello World 範例應用程式也包含 nginx.conf 檔案,其中含有基本的 nginx 設定資訊,以及 index.html 檔案,可做為 nginx 網路伺服器的根網頁使用。