部署您的應用程式以上傳到 App Engine 上執行。部署應用程式時,您必須在 App Engine 中建立應用程式的版本及對應的服務。您可以部署完整的應用程式 (包括所有原始碼和設定檔),也可以部署及更新個別版本或設定檔。
若要以程式輔助方式來部署應用程式,請使用 Admin API。
事前準備
在您部署應用程式之前,請先完成下列事項:
Google Cloud 專案的擁有者必須建立 App Engine 應用程式。
請確認您的使用者帳戶含有必要權限。
授予 Cloud Build 權限,在專案中部署應用程式。部署應用程式時,App Engine 會使用 Cloud Build 將應用程式建構成容器,並將容器部署至應用程式所在區域的執行階段。根據預設,Cloud Build 沒有部署 Python 2 應用程式的權限,因此您必須先授予權限,才能部署應用程式。
安裝 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,請在設定檔所在的目錄中,使用 gcloud app deploy 指令,例如 app.yaml。
選擇不重複的版本 ID
如果是手動調整規模的執行個體,版本 ID 的開頭應為字母,以便與數字執行個體 ID 區別。這可確保要求會轉送至正確的目的地,避免與123-dot-my-service.[REGION_ID].r.appspot.com 之類的網址模式混淆不清,這類模式可以有兩種解讀方式:
- 如果
123版本存在,要求會轉送至my-service服務的123版本。 - 如果
123版本不存在,要求會改為轉送至執行my-service服務版本的執行個體 ID123。
對於設定成自動調整或基本資源配置的執行個體,您可以任意為版本命名,因為系統不支援將這些執行個體指定為目標。
gcloud app deploy [CONFIGURATION_FILES]
根據預設,這項指令會從目前目錄部署 app.yaml 設定檔。如果從不含應用程式 app.yaml 的目錄執行指令,或是想部署多個應用程式,請將 [CONFIGURATION_FILES] 替換為一或多個設定檔的路徑。請使用單一空格分隔路徑名稱。
選用標記:
--version:指定自訂版本 ID。 根據預設,App Engine 會產生版本 ID。--no-promote:部署應用程式,但不將所有流量自動轉送至該版本。根據預設,您部署的每個版本都會自動設為接收 100% 的流量。--project:指定替代專案 ID,而不使用您在 gcloud CLI 中初始化為預設值的 ID。 Google Cloud
詳情請參閱 gcloud app deploy 參考資料,或是透過指令列執行 gcloud help。
範例:
gcloud app deploy
gcloud app deploy app.yaml dos.yaml index.yaml
gcloud app deploy --version [YOUR_VERSION_ID] --no-promote --project [YOUR_PROJECT_ID]
如果待部署版本的版本 ID 與目前已存在於 App Engine 的版本相同,則您部署的檔案會覆寫現有版本。如果現有版本目前正在提供流量,可能會因傳送至應用程式的流量遭到中斷而產生問題。您可以針對待部署的新版本使用不同的版本 ID,接著再將流量移至新版本,即可避免流量中斷的情形發生。
部署多服務應用程式
當應用程式納入多個服務時,您可以個別部署和更新指定的服務,或同時部署和更新所有服務。部署服務更新時,可以更新個別設定檔,也可以更新相應版本中的原始碼。
舉例來說,您可以在 App Engine 中部署及建立兩個版本,這兩個版本分別在各自的服務中執行。第一個版本做為前端服務,另一個版本則做為應用程式的後端。接著,您可以部署個別設定檔,只更新服務的設定。您也可以選擇將新版本部署至服務,以便更新前端、後端或兩者的原始碼。
部署多個服務的需求
您可以使用相同的部署指令來部署和更新應用程式的多個服務,但必須符合下列需求:
您必須先將應用程式的一個版本部署到
default服務,然後才能建立和部署後續服務。您必須在相應版本的
app.yaml設定檔中指定服務 ID。如要指定服務 ID,請在每個設定檔中加入service: [YOUR_SERVICE_ID]元素定義。根據預設,從設定檔排除此元素定義,會將版本部署至default服務。您必須在部署指令中指定所有對應的
app.yaml設定檔,才能同時部署多項服務。
部署多服務的方式
從設定檔所在的應用程式根目錄執行部署指令,並為各項服務的 app.yaml 檔案指定相對路徑和檔名。
gcloud app deploy [CONFIGURATION_FILES]
其中 [CONFIGURATION_FILES] 是一或多個設定檔的路徑和名稱,並以一個空格分隔。
範例
gcloud app deploy main/app.yaml service1/app.yaml service2/app.yaml
成功部署每個服務後,您會透過指令列收到驗證訊息。
查看建構作業記錄
Cloud Build 會串流建構和部署記錄,這些記錄可透過控制台Google Cloud 的 Cloud Build 記錄部分查看。如要查看應用程式區域中的建構作業,請使用頁面頂端的「Region」(區域) 下拉式選單,選擇要篩選的區域。
更新索引
如要建立或更新應用程式使用的索引,請將 index.yaml 設定檔上傳至 Datastore。上傳設定檔後,系統就會建立尚未存在的索引。
Datastore 可能需要一段時間才能建立所有索引,因此 App Engine 無法立即使用這些索引。如果您的應用程式已設定為接收流量,當查詢所需的索引還在建置時,便會發生例外情況。
為了避免例外發生,請讓系統有充裕的時間來建置所有索引。
先將
index.yaml設定檔上傳至 Datastore,然後再部署版本:將
index.yaml檔案上傳至 Datastore:gcloud datastore indexes create index.yaml
詳情請參閱
gcloud datastore參考資料。使用 Google Cloud 控制台監控所有索引的狀態:
在所有索引建構完成後,將新版本部署至 App Engine。
先建構索引,再將流量遷移或拆分至您的版本:
-
部署新版本,但不將流量轉送至該版本:
必須同時指定
app.yaml和index.yaml檔案,並加入--no-promote標記,這樣流量才不會轉送至該版本:gcloud app deploy app.yaml index.yaml --no-promote
- 使用 Google Cloud 控制台監控所有索引的狀態:
- 所有索引建構完成後,再使用 Google Cloud 控制台遷移或拆分流量至該版本:
-
部署新版本,但不將流量轉送至該版本:
必須同時指定
如要進一步瞭解索引,請參閱設定 Datastore 索引一文。
疑難排解
以下是您可能會看到的常見錯誤訊息:
PERMISSION_DENIED: Operation not allowedThe "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 控制台刪除舊版,然後上傳最新程式碼。
[13] An internal error occurred while creating a Cloud Storage bucket.App Engine 會代表您建立預設的 Cloud Storage 多地區值區,位置與應用程式建立的地區相同。您必須使用這個值區來儲存應用程式內容。在下列情況中,如果無法建立 bucket,就會傳回這項錯誤:
專案中沒有預設的 App Engine 服務帳戶。如果帳戶在刪除後 30 天內遭到移除,你可以還原帳戶。
您的專案隸屬於強制執行
constraints/gcp.resourceLocations政策的機構,且該機構不允許在建立 App Engine 的區域中建立資源。您需要為專案覆寫強制執行的constraints/gcp.resourceLocations政策,並在建立 App Engine 應用程式的相同地區,允許多地區位置。
[13] An internal error occurred如果 App Engine 的
app.yaml設定檔name在vpc_access_connector鍵底下含有無效資源,就可能發生這個錯誤。確認name欄位包含無伺服器 VPC 存取連接器建立所在的正確專案和區域。確認
app.yaml設定有效後,如果問題仍未解決,請使用 Google Cloud SDK 重新部署服務,加入--verbosity=debug旗標,並提供指令輸出內容,與 Cloud 支援團隊聯絡。- 其他部署錯誤
如果部署失敗,請確認專案已啟用 Cloud Build API。首次部署應用程式時,App Engine 會自動啟用這項 API,但如果有人之後停用這項 API,部署作業就會失敗。