Hello GAE Standard Part 2:

服務與版本

文/Bear Su|編輯/Jessie

Hello GAE Standard Part 2:

服務與版本

文/Bear Su|編輯/Jessie

在上一篇教學文章 Hello GAE Standard Part 1 之後,本篇文章接著介紹 Google App Engine 的兩項功能:服務 (Services) 與版本 (Versions)。

Services 功能方便開發者部署與管理單一應用程式下的不同子專案,且能分別加以監控;Versions 功能則使不同版本間的轉移更加簡便,避免新建置的 App 版本流量負荷過重。

取得範例程式專案

用 git 指令從 GitHub 取得 hello_gao 專案的程式碼,並執行指令切換到 services_and_versions 分支:

$ git clone git@github.com:CloudMile/hello_gae.git
$ git checkout origin services_and_versions

Services 介紹

在同一個 GCP 專案(project)下,想要在 GAE 上同時部署多個程式碼專案,可透過 services 來切分。

1. app.yaml 參數

從範例程式專案中的 app.yaml 可以看到一個參數

module: default
# or 
service: default

這邊的 module 與 service 是相同的設定,會區分是因為過去不同 SDK 造成的差異,但現在無論是 gcloud SDK[1] 還是 goapp[2] (一個 for go 的 app engine sdk) 都可使用 module/service 其一作為設定。

如果 app.yaml 沒有設定任何 module/service,表示採用預設值 default 。

2. Default 部署

現在先部署一版 module/service 為 default 的 app.yaml

module: default

執行指令部署:

$ gcloud app deploy

3. 修改程式碼

修改 app.yaml,將 module/service 改成 bear

module: bear

並同時修改程式碼 hello.go

func handle(w http.ResponseWriter, r *http.Request) {
  fmt.Fprintln(w, "Hello, Bear!")
}

執行指令部署:

$ gcloud app deploy

4. 查看應用程式

請將以下指令中 改成想要查看的 module/service 再執行

$ gcloud app browse -s <YOUR_SERVICE>

以 module/service 為 default 的應用程式為例:

$ gcloud app browse -s default

想要查看 module/service 為 bear 的應用程式:

$ gcloud app browse -s bear

除了 default 以外,其他 module/service 的網址都會以 -dot-.appspot.com 的格式呈現。

5. 於管理頁面中查看

在 App Engine 管理頁面可以在 Services 頁面中可以看到數個 module/service:

Versions 介紹

version 顧名思義就是版本,軟體開發時會需要進行進/降版、同時並行的藍綠佈署,抑或是行銷上的 A/B testing,在 GAE 上可以透過參數 versions 區別應用程式的不同版本。

可以在 app.yaml 中設定 versoin 上,但不建議這麼做,而是建議在執行部署指令時加上參數 -v 來指名版號,示範如下:

$ gcloud app deploy -v beta1
# or
$ goapp deploy -version beta1

Lab 示範

首先確認並修改 app.yaml ,將 module/service 改成 default

module: default

修改 hello.go

func handle(w http.ResponseWriter, r *http.Request) {
  fmt.Fprintln(w, "Hello, GAEv2!")
}

部署 default V2:

$ gcloud app deploy -v v2

到 App Engine 管理頁面可以看到現行版本已進版到 V2:

如果只想部署新版本,但還不想提供外部訪問,可以添加參數設定。

這樣在 App Engine 上就能看到新版本,但使用者訪問的時候還是舊版本的應用程式。

$ gcloud app deploy -v v2 --no-stop-previous-version --no-promote

多版本同時進行

1. 以 Versions 管理流量

進到 split traffic 來切分流量:

切分方式可以根據 IP address/Cookie/Random,如果是 Random 請注意該 GAE 服務是否可以隨意變換後端機器。

2. 以 URL path 查看流量

 -dot-.appspot.com

以下版本為 20180313t144913:

以下版本為 V2:

可以發現,moduel/service 跟 version 在 URL path 的呈現方式是一樣的,所以千萬不要在 service 與 version 使用相同的命名,service 與 version 必須是唯一的值。

參考連結

更多手把手教學文

About CloudMile

CloudMile 成立於 2016 年,致力於 B2B 雲端與人工智慧應用,為客戶建立國際級雲端架構,並以機器學習及大數據分析技術為核心,協助企業進行商業預測與產業升級。

Website: https://www.mile.cloud/
Facebook: https://www.facebook.com/CloudMileFans/
Linkedin: https://www.linkedin.com/company/cloudmile/
Youtube: https://www.youtube.com/c/CloudMile
Contact Us: service@mile.cloud