部署您的應用程式以上傳到 App Engine 上執行。部署應用程式時,您必須在 App Engine 中建立應用程式的版本及對應的服務。您可以部署完整的應用程式 (包括所有原始碼和設定檔),也可以部署及更新個別版本或設定檔。
若要以程式輔助方式來部署應用程式,請使用 Admin API。
事前準備
在您部署應用程式之前,請先完成下列事項:
Google Cloud 專案的擁有者必須建立 App Engine 應用程式。
請確認您的使用者帳戶含有必要權限。
授予 Cloud Build 在專案中部署應用程式的權限。部署應用程式時,App Engine 會使用 Cloud Build 將應用程式建構為容器,並將容器部署至應用程式所在地區的執行階段。根據預設,Cloud Build 沒有部署 Java 8 應用程式的權限,因此您必須先授予權限,才能部署應用程式。
設定 Maven 建構工具 (建議)
如要使用 Maven 建構工具部署應用程式,您必須設定專案可使用 App Engine 的 Maven 外掛程式。
安裝 gcloud CLI
如要使用 gcloud CLI 部署應用程式,您必須下載、安裝並初始化 gcloud CLI。
如果您已安裝 gcloud CLI,並想將其設為使用某個 Google Cloud 專案 ID,而非使用初始化時設定的 ID,請參閱「管理 gcloud CLI 設定」。
使用 Proxy
如果您是從使用 HTTP 或 HTTPS Proxy 的系統執行部署指令,則必須設定工具,讓它能夠透過 Proxy 通訊。
執行下列指令來設定 gcloud CLI:
gcloud config set proxy/type [PROXY_TYPE]
gcloud config set proxy/address [PROXY_ADDRESS]
gcloud config set proxy/port [PROXY_PORT]
您也可以為 Proxy 設定 username
和 password
。詳情請參閱 gcloud config。
部署應用程式
如要將應用程式部署到 App Engine,請在應用程式根目錄內使用 Maven 建構工具 (建議) 或 gcloud app deploy
指令。
使用 Maven (建議)
如要使用 Maven 建構工具部署應用程式,請在 pom.xml
檔案所在的專案頂層目錄中執行下列指令:
mvn package appengine:deploy -Dapp.deploy.projectId=PROJECT_ID
將 PROJECT_ID 替換為您的 Google Cloud 專案 ID。如果 pom.xml
檔案已指定專案 ID,您就不需要在執行的指令中加入 -Dapp.deploy.projectId
屬性。
使用 gcloud 指令列
gcloud app deploy [CONFIGURATION_FILES]
將 [CONFIGURATION_FILES]
替換為一或多個設定檔的路徑。請使用單一空格分隔路徑名稱。
選用標記:
--version
:指定自訂版本 ID。如果您未指定版本 ID,App Engine 會產生一個。--no-promote
:部署應用程式,但不將所有流量自動轉送至該版本。根據預設,您部署的每個版本都會自動設為接收 100% 的流量。--project
:指定替代 Google Cloud 專案 ID,而不使用您在 gcloud CLI 中初始化為預設值的 ID。
詳情請參閱 gcloud app deploy
參考資料,或是透過指令列執行 gcloud help
。
選擇不重複的版本 ID
對於手動調整規模的執行個體,版本 ID 開頭應為字母,以便與數字執行個體 ID 有所區別。這可確保要求會轉送至正確的目的地,避免與123-dot-my-service.[REGION_ID].r.appspot.com
之類的網址模式混淆不清,這類模式可以有兩種解讀方式:
- 如果
123
版本存在,要求會轉送至my-service
服務的123
版本。 - 如果
123
版本不存在,要求會改為轉送至執行my-service
服務版本的執行個體 ID123
。
對於設定成自動調整或基本資源調度的執行個體,您可以任意為版本命名,因為系統不支援將這些執行個體指定為目標。
部署多服務應用程式
當應用程式納入多個服務時,您可以個別部署和更新指定的服務,或同時部署和更新所有服務。部署服務更新可能包括更新個別設定檔,或更新相應版本的原始碼。
舉例來說,您可以在 App Engine 中部署及建立兩個版本,這兩個版本分別在各自的服務中執行。第一個版本可做為前端服務,另一個版本則可做為應用程式的後端。接著,您可以部署個別設定檔,只更新服務的設定。您也可以選擇將新版本部署至服務,以便同時更新前端和後端的原始碼。
部署多個服務的需求
您可以使用相同的部署指令來部署和更新應用程式的多個服務,但必須符合下列需求:
您必須先將應用程式的一個版本部署到
default
服務,才能建立及部署後續服務。您必須在對應版本的
appengine-web.xml
設定檔中指定服務 ID。如要指定服務 ID,請在每個設定檔中加入module: [YOUR_SERVICE_ID]
元素定義。根據預設,從設定檔排除此元素定義會將版本部署至default
服務。您必須在部署指令中指定所有對應的
appengine-web.xml
設定檔,才能同時部署多項服務。default
服務必須優先列出。
部署多服務的方式
從設定檔所在的應用程式根目錄執行部署指令,並針對每個服務的 appengine-web.xml
檔案指定相對路徑和檔名:
使用 Maven 建構工具
如果專案的根目錄只包含您的服務,則可使用單一 Maven 指令部署所有服務。
Maven 部署指令會反覆查詢專案的每個服務,找出其設定檔,然後部署每個服務。
使用 Maven 外掛程式部署多個服務:
- 確認 appengine-maven-plugin 已新增至父項
pom.xml
檔案。 執行下列指令:
mvn package appengine:deploy -Dapp.deploy.projectId=PROJECT_ID
將 PROJECT_ID 替換為您的 Google Cloud 專案 ID。如果
pom.xml
檔案已指定專案 ID,您執行的指令中就不需要加入-Dapp.deploy.projectId
屬性。
使用 gcloud
gcloud app deploy [CONFIGURATION_FILES]
將 [CONFIGURATION_FILES]
替換為一或多個設定檔的路徑。請使用單一空格分隔路徑名稱。
成功部署每個服務後,您會透過指令列收到驗證訊息。
查看建構作業記錄
Cloud Build 會串流傳輸建構和部署記錄,您可以在 控制台的 Cloud Build 記錄部分中查看這些記錄。Google Cloud 如要查看應用程式所在區域的版本,請使用頁面頂端的「Region」下拉式選單,選擇要篩選的區域。
更新索引
如要建立或更新應用程式使用的索引,請將 datastore-indexes.xml
設定檔上傳至 Datastore。上傳設定檔後,系統就會建立尚未存在的索引。
Datastore 可能需要一段時間才能建立所有索引,因此這些索引不會立即提供給 App Engine。如果您的應用程式已設定為接收流量,當查詢所需的索引還在建置時,便會發生例外情況。
為了避免例外發生,請讓系統有充裕的時間來建置所有索引。
先將
index.xml
設定檔上傳至 Datastore,然後再部署版本:將
index.xml
檔案上傳至 Datastore: 詳情請參閱gcloud datastore indexes create index.yaml
gcloud datastore
參考資料。使用 Google Cloud 主控台監控所有索引的狀態:
在所有索引建構完成後,將新版本部署至 App Engine。
先建構索引,再將流量遷移或拆分至您的版本:
-
在應用程式的
appengine-web.xml
檔案中定義新版本 ID。 - 部署新版本。
- 使用 Google Cloud 控制台監控所有索引的狀態:
- 所有索引建構完成後,再使用 Google Cloud 控制台將流量遷移或拆分至該版本:
-
在應用程式的
如要進一步瞭解索引,請參閱設定 Datastore 索引一文。
疑難排解
以下是您可能會看到的常見錯誤訊息:
PERMISSION_DENIED: Operation not allowed
The "appengine.applications.create" permission is required.
- 如果 Google Cloud 專案缺少必要的 App Engine 應用程式,
gcloud app deploy
指令嘗試執行gcloud app create
指令時可能會失敗。只有具備「擁有者」角色的帳戶才具有建立 App Engine 應用程式的必要權限。 Command not found
- 如要瞭解如何設定本機開發伺服器工具,請參閱「使用本機開發伺服器」一文。
Import Error
- 如果您安裝了 gcloud CLI 和原始 App Engine SDK,則 PATH 的不同項目之間可能會發生衝突,造成匯入錯誤。如果在執行 gcloud CLI 指令時收到錯誤訊息,請按照指示執行本機開發伺服器。
[400] The first service (module) you upload to a new application must be the 'default' service (module)
- 您必須先部署並建立
default
服務,才能部署及建立應用程式的多項服務。如要進一步瞭解如何將版本部署至default
服務,請參閱「部署多服務應用程式」一節。 Too Many Versions (403)
- App Engine 對應用程式部署版本數量設有限制。免費應用程式和已部署的應用程式會有所不同。您可以使用 Google Cloud 主控台刪除舊版,然後上傳最新的程式碼。
You do not have permission to modify this app (403)
- 如果您驗證的帳戶沒有權限,無法部署至指令或
appengine-web.xml
中指定的應用程式 ID,就可能發生這種情況。請檢查您的應用程式 ID 是否正確,以及是否符合 Google Cloud console 專案 ID 的值。接下來,請檢查主控台的專案權限,確認您列出的帳戶是否具有足夠的權限層級,能夠允許您部署應用程式。 [13] An internal error occurred while creating a Cloud Storage bucket.
App Engine 會代表您在建立應用程式的地區建立預設 Cloud Storage 多地區值區。您必須使用這個值區來儲存應用程式的內容。在下列情況下,如果無法建立這個儲存體,系統就會傳回此錯誤:
專案中沒有預設的 App Engine 服務帳戶。如果帳戶在刪除後的 30 天內遭到移除,您可以還原帳戶。
您的專案屬於實施
constraints/gcp.resourceLocations
政策的機構,而該機構不允許在建立 App Engine 的區域中建立資源。您必須覆寫專案的強制constraints/gcp.resourceLocations
政策,並允許在建立 App Engine 應用程式的地區使用多地區位置。
[13] An internal error occurred
如果 App Engine 的
app.yaml
設定檔在vpc_access_connector
鍵下含有無效的資源name
,就可能發生這項錯誤。確認name
欄位包含建立無伺服器虛擬私有雲存取連接器的正確專案和地區。如果確認
app.yaml
設定有效後問題仍未解決,請使用 Google Cloud SDK 重新部署服務,並新增--verbosity=debug
標記,然後提供指令的輸出內容,與 Cloud 支援團隊聯絡。- 其他部署錯誤
如果部署作業失敗,請確認 Cloud Build API 已在專案中啟用。App Engine 會在您首次部署應用程式時自動啟用這個 API,但如果有人在之後停用 API,部署作業就會失敗。