2017年7月2日 星期日

Google App Engine: First Go Application And Deploy

將 golang app 部署在 Google App Engine 的方式筆記。

建立 Google App Engine 專案


建立 Google App Engine 專案之前,需要先建立一個 Project 在 Google Cloud Platform:


建立後才從 Google App Engine 建立一個應用程式,你可以選擇從 Console 建立,或是從這個畫面建立一個應用程式。

應用程式最主要需要選擇伺服器的位置,從以上畫面選擇 [Select a Language] 先選擇自己要部署的應用程式所用的語言,他就會詢問你主機位置,剩下的部分可以不需要在瀏覽器完成 (可以的話不要用 web shell )。


選擇完地點等待部署後就可以暫時離開瀏覽器了。

本地端專案部署流程

專案要部署上去,基本上步驟是:
  • 新建專案:
    1. gcloud 初始化
    2. 設定 app.yaml 部署描述檔案
    3. 部署上 gcloud
  • 現有專案:
    1. 直接部署上 gcloud 檔案

首先,在 go 的專案目錄下,使用 gcloud 指令 (需要先安裝: https://cloud.google.com/sdk/downloads)

輸入:
gcloud init

指令執行後,會詢問專案、登入帳號密碼,只要跟隨詢問步驟走就可以了,直到選到專案為止。

然後,需要建立一個檔案叫做 app.yaml,檔案描述如下:
runtime: go
api_version: go1

handlers:
  - url: /.*
    script: _go_app

這個檔案將會描述給 Goolge App Engine ,詳情參數設定請參考:
https://cloud.google.com/appengine/docs/standard/go/config/appref

*如果在 app.yaml 寫 application, version 兩個參數,可以的話請記得拿掉,避免部署失敗。

接著,golang 程式不需要定義 func main 的進入點,所以檔案會長這個樣子:

package main

import (
 "fmt"
 "net/http"
)

func init() {
 http.HandleFunc("/", index)
}

func index(w http.ResponseWriter, r *http.Request) {
 fmt.Fprintf(w, "Hello World.")
}

好了之後,在專案目錄下輸入:

gcloud app deploy app.yaml

這個時候專案就會開始部署了,如果發生:
ERROR: (gcloud.app.deploy) An error occurred while parsing file: [/xxxxx/xxxxx/app.yaml] 這樣的錯誤,記得檢查一下 yaml 是否寫對格式,或是檔案是否空白。

等到部署成功後,可以用這個指令打開瀏覽器檢查應用程式:

gcloud app browse

Reference:
[1] app.yaml 描述檔撰寫參考: https://cloud.google.com/appengine/docs/standard/go/config/appref
[2] 伺服器位置名稱: https://cloud.google.com/compute/docs/regions-zones/regions-zones?hl=en_GB&_ga=1.243667075.769435893.1493430841
[3] 範例: https://cloud.google.com/appengine/training/go-plus-appengine/hello-plus
[4] 部署失敗 app.yaml: https://stackoverflow.com/questions/43512630/gcloud-app-deploy-command-not-working
[5] sdk 下載: https://cloud.google.com/appengine/downloads
[6] golang 部署方式: https://cloud.google.com/appengine/docs/standard/go/getting-started/deploying-to-app-engine
[7] 官方 GAE 部署範例: https://github.com/GoogleCloudPlatform/nodejs-getting-started

沒有留言:

張貼留言

© ERIC RILEY , 自由無須告知轉貼
Background Japanese Sayagata by Olga Libby