區域 ID
REGION_ID
是 Google 根據您在建立應用程式時選取的地區所指派的簡寫代碼。雖然某些區域 ID 可能看起來與常用的國家/地區代碼相似,但此代碼並非對應國家/地區或省份。如果是 2020 年 2 月後建立的應用程式,App Engine 網址會包含 REGION_ID.r
。如果是在此日期之前建立的現有應用程式,網址中則可選擇加入地區 ID。
進一步瞭解區域 ID。
瞭解如何在本機執行應用程式、進行部署,然後在 App Engine 上測試。
本機執行
如要在部署前先測試應用程式的功能,請使用您常用的開發工具,在本機環境中執行應用程式。例如 go run
指令。
部署應用程式前
部署應用程式之前:
- Google Cloud 專案的擁有者必須啟用 App Engine。
- 您必須確認您的使用者帳戶含有必要權限。
部署應用程式
使用 gcloud app deploy
指令,將應用程式部署到 App Engine。
在部署期間,Cloud Build 服務會建構應用程式的容器映像檔,以在 App Engine 標準環境中執行。系統會在應用程式的區域中建立這些版本。詳情請參閱「管理建構的映像檔」一文。
如要透過程式部署應用程式,請使用 Admin API。
部署服務
您可以部署應用程式服務的版本及各版本的設定檔,藉此將應用程式部署至 App Engine。
如要部署應用程式服務的某個版本,請從服務的 app.yaml
檔案所在的目錄執行下列指令:
gcloud app deploy
使用該指令時如未指定任何檔案,僅會部署目前目錄中的 app.yaml
檔案。根據預設,deploy
指令會針對您部署的版本產生唯一 ID,並將該版本部署到您設定 Google Cloud CLI 要使用的Google Cloud 專案,再將所有流量轉送至新版本。
您可指定特定檔案,或是加入其他參數來改變指令的預設行為:
- 如要部署服務的其他設定檔,您必須個別指定及部署每個檔案。例如:
gcloud app deploy cron.yaml gcloud app deploy dispatch.yaml gcloud app deploy index.yaml
- 如要指定自訂版本 ID,請使用
--version
標記。 - 如要避免系統將流量自動轉送至新版本,請使用
--no-promote
標記。 - 如要部署到特定的 Google Cloud 專案,請使用
--project
標記。
舉例來說,如要將 app.yaml
檔案定義的服務部署至特定的Google Cloud 專案,請為該服務指派自訂版本 ID,還要避免將流量轉送至新版本:
gcloud app deploy --project PROJECT_ID --version VERSION_ID --no-promote
如要進一步瞭解這個指令,請參閱 gcloud app deploy
參考資料。
部署多項服務
您可以使用相同的部署指令來部署或更新組成應用程式的多項服務。
如要部署多項服務,請個別部署每項服務的 app.yaml
檔案。您可以透過單一 gcloud app deploy
指令指定多個檔案:
gcloud app deploy service1/app.yaml service2/app.yaml
部署多項服務的需求
- 您必須先將應用程式的某個版本部署到
default
服務,才能建立及部署後續服務。 - 您必須在每項服務各自對應的
app.yaml
設定檔中指定服務的 ID。如要指定服務 ID,請在每個設定檔中加入service
元素定義。根據預設,從設定檔排除此元素定義會將版本部署至default
服務。
查看建構作業記錄
Cloud Build 會串流建構和部署記錄,您可以在 控制台的 Cloud Build 記錄部分中查看這些記錄。Google Cloud 如要查看應用程式所在區域的版本,請使用頁面頂端的「Region」下拉式選單,選擇要篩選的區域。
略過檔案
您可以使用 .gcloudignore
檔案,指定部署服務時不要上傳至 App Engine 的檔案和目錄。如要略過不必隨著部署作業一起上傳的版本構件和其他檔案,這個方法十分實用。
管理建構映像檔
每次部署新版本時,系統會執行以下步驟:
App Engine 會使用 Cloud Build 服務建立容器映像檔。
Cloud Build 會在應用程式所在的區域中建構容器映像檔,並在 App Engine 標準環境中執行。
App Engine 會將建構的容器映像檔儲存在 Artifact Registry 中。您可以下載這些映像檔來加以保存或在其他地方執行。
部署完成後,App Engine 就不再需要容器映像檔。容器映像檔不會自動刪除。如要避免讓儲存空間配額達到上限,您可以放心刪除任何不需要的圖片。不過,如果您日後可能需要圖片或想保留圖片的副本,請在刪除圖片前匯出副本。如要進一步瞭解如何管理 Artifact Registry 中的映像檔,請參閱「管理映像檔」。
查看應用程式
將應用程式部署至 App Engine 之後,您可以執行下列指令來啟動瀏覽器,並在 https://PROJECT_ID.REGION_ID.r.appspot.com
查看應用程式:
gcloud app browse
在轉移流量之前在 App Engine 上測試
您可以先在 App Engine 上測試新版本,然後再設定該版本以接收流量。例如,您可採取下列做法來測試 default
服務的新版本:
部署新版本,但避免系統將流量自動轉送至新版本:
gcloud app deploy --no-promote
前往下列網址以存取新版本:
https://VERSION_ID-dot-default-dot-PROJECT_ID.REGION_ID.r.appspot.com
您現在可以在 App Engine 執行階段環境中測試新版本。您可以查看應用程式記錄來進行偵錯。詳情請參閱寫入應用程式記錄一文。
App Engine 會將傳送至
https://PROJECT_ID.REGION_ID.r.appspot.com
的要求轉送至先前設為接收流量的版本。當您要將流量傳送至新版本時,請使用 Google Cloud 控制台遷移流量:
選取您剛剛部署的版本,然後按一下 [Migrate traffic] (遷移流量)。
您可以將網址中的 default
換成服務名稱,即可使用相同程序來測試其他服務的新版本:
https://VERSION-dot-SERVICE-dot-PROJECT_ID.REGION_ID.r.appspot.com
如要進一步瞭解如何指定特定服務和版本,請參閱要求的轉送方式一文。
使用建構環境變數
您也可以為支援 Google Cloud 的 Buildpack 的執行階段設定建構環境變數。
建構環境變數是與應用程式一併部署的鍵/值組合,可讓您將設定資訊傳遞至 Buildpack。舉例來說,您可能需要自訂編譯器選項。您可以設定 app.yaml
檔案中的 build_env_variables
欄位,新增或移除這些建構環境變數。
使用本機開發伺服器
您可以使用 dev_appserver
在本機執行應用程式,模擬在實際工作環境中的 App Engine 執行應用程式。這個開發伺服器可以大致模擬應用程式的運作環境,讓您測試為任何標準環境執行階段編寫的應用程式。
由於 Go 1.11 已結束支援,您無法再使用最新版本的 dev_appserver.py
在本機執行應用程式。如要繼續使用 dev_appserver.py
,請按照「使用本機開發伺服器」一文中的操作說明操作。
執行本機開發伺服器
為應用程式建立 app.yaml
設定檔後,您可以使用 dev_appserver.py
指令啟動本機開發伺服器,在本機執行應用程式。
如要取得使用者帳戶的存取憑證,請執行:
gcloud auth login
允許本機應用程式暫時使用您的使用者憑證存取 API:
gcloud auth application-default login
如要啟動本機開發伺服器:
在包含
app.yaml
設定檔的目錄中,執行dev_appserver.py
指令,並指定專案 ID 和app.yaml
檔案路徑:python2 DEVAPPSERVER_ROOT/google_appengine/dev_appserver.py/dev_appserver.py --application=PROJECT_ID app.yaml
如要變更通訊埠,請加入
--port
選項:python2 DEVAPPSERVER_ROOT/google_appengine/dev_appserver.py/dev_appserver.py --application=PROJECT_ID app.yaml --port=9999
將 DEVAPPSERVER_ROOT 替換為您用來擷取已封存版本
devapp_server.py
的資料夾路徑。如要進一步瞭解如何下載及使用已封存的dev_appserver.py
版本,請參閱「使用本機開發伺服器」一文。如要進一步瞭解
dev_appserver.py
指令選項,請參閱「本機開發伺服器選項」。本機開發伺服器啟動時,會設定開發環境,且該環境會預先安裝在
requirements.txt
檔案中找到的依附元件。本機開發伺服器現已開始執行並監聽要求。請透過網路瀏覽器前往 http://localhost:8080/ 查看運作中的應用程式。
如果您使用了
--port
選項指定自訂通訊埠,請務必在瀏覽器中開啟該通訊埠。如要透過指令列停止本機伺服器,請按下鍵盤中的 Control-C。
偵測應用程式執行階段環境
如要判定程式碼是在實際工作環境還是本機開發伺服器中執行,請檢查 GAE_ENV
環境變數:
if os.getenv('GAE_ENV', '').startswith('standard'): # Production in the standard environment else: # Local execution.
將本機開發伺服器與 Google Cloud 服務搭配使用
您可以將 dev_appserver
與其他 Google Cloud 元件整合。
Cloud 用戶端程式庫
許多 Cloud 用戶端程式庫都取決於是否存在 GOOGLE_CLOUD_PROJECT
環境變數,而該變數應為您的Google Cloud 專案 ID。您可以執行 gcloud config list project
指令,或在Google Cloud console中查看專案頁面,找出該值。
為確保在本機開發期間正確設定此環境變數,請使用 --application=PROJECT_ID
參數初始化 dev_appserver
,如上一個範例所示。
Cloud 模擬器
您可以使用適用於 Cloud Datastore、Cloud Bigtable 和 Cloud Pub/Sub 的模擬器來測試應用程式。
自動重新載入 requirements.txt
和 app.yaml
變更
本機開發伺服器會自動安裝 requirements.txt
檔案中列出的依附元件。dev_appserver
也能讓您測試透過 app.yaml
設定的功能。舉例來說,您可以測試應用程式提供靜態檔案的功能。dev_appserver
執行時,如果您變更了 requirements.txt
和 app.yaml
,系統就會自動重新啟動應用程式來反映這些變更。系統會下載及安裝所需依附元件,因此可能會引發暫時性延遲。
開發伺服器中的執行個體管理與轉送
探索執行個體位址
本機開發伺服器會在啟動時建立所有手動調整資源配置的執行個體,並對自動調整和基本資源配置服務的執行個體採取動態管理。伺服器會為各項服務指派通訊埠,用戶端則能使用伺服器自動平衡負載及選取執行個體。為各項服務定址的通訊埠指派工作會顯示在伺服器記錄檔訊息串中。
以下是定義三項服務的應用程式使用的通訊埠:
INFO Starting module "default" running at: http://localhost:8084 INFO Starting module "service1" running at: http://localhost:8082 INFO Starting module "service2" running at: http://localhost:8083
您使用服務的位址 (例如 http://localhost:8082/
) 之後,該伺服器會建立或選取服務的執行個體,並將要求傳送至該執行個體。
伺服器會為服務的各個執行個體指派專屬的通訊埠,您可以使用管理伺服器來探索這些通訊埠。管理伺服器具備一個專屬的通訊埠,這個通訊埠會顯示在訊息記錄檔中:
INFO Starting admin server at: http://localhost:8000
這個位址會將您帶往管理伺服器主控台。按一下 [Instances] (執行個體),查看應用程式執行個體的動態狀態。
每個手動和基本執行個體會以不同的項目顯示。執行個體編號是一種連結,可連至每個執行個體的不重複通訊埠位址。請按一下連結,將要求直接傳送給這個執行個體。
分派檔案
如果您的應用程式含有 dispatch.yaml
檔案,記錄檔訊息串中就會顯示分派器通訊埠:
INFO Starting dispatcher running at: http://localhost:8080
系統會依據分派檔案中的規則,轉送傳送至這個通訊埠的要求。伺服器不支援含有主機名稱 (例如 url: "customer1.myapp.com/*"
) 的 dispatch.yaml
檔案規則。含有相對路徑模式 (url: "*/fun"
) 的規則可正常運作,因此您可以使用 http://localhost/fun/mobile
等網址存取執行個體。如果您嘗試使用含有主機規則的 dispatch.yaml
檔案啟動應用程式,伺服器會在記錄檔串流中回報錯誤。