跳到主要內容

如何在Google App Engine(GAE)上部屬Go應用程式: Deploying your Go app on Google App Engine


前言

話說 Google 推行 App Engine 已經有好一陣子了, 就算後來 GCP 的光芒幾乎都聚焦在其他產品上如 Kubernetes Engine, 但直至今日還是有很多死忠的開發者喜歡使用 App Engine 這項服務, 對於不想花時間搞底層環境的人來說, 將服務部屬在這兒絕對是最佳的選擇

以下簡單的介紹如何在 Google App Engine(GAE) 上部屬Go程式

首先, 設定環境

需要在開發的環境裡安裝 glcoud 的 SDK 並且初始化某些設定

gcloud init

或是,

直接打開 CloudShell 直接在上面敲 gcloud 的指令也可以 (但最後部屬時需要把程式碼 clone 到 CloudShell 的機器裡)



Step 1. 建立App.yaml

在工作目錄中建立 App.yaml 來描述部署的環境, 如下所示



在 App.yaml 裡面可以定義 Runtime, Service Name, 以及程式中會用到的 Environment Variable 等等

ex:
runtime: go
env: flex
service: my-server

env_variables:
  RUNMODE: stage

automatic_scaling:
  min_num_instances: 1
  max_num_instances: 1
  cool_down_period_sec: 120 # default value
  cpu_utilization:
    target_utilization: 0.7

resources:
  cpu: 1
  memory_gb: 5
  disk_size_gb: 10
  volumes:
  - name: ramdisk1
    volume_type: tmpfs
    size_gb: 0.5

App.yaml 裡有一個欄位 env 可以用來指定即將部屬的環境
env: flex

這邊要注意的是 GAE 提供兩種不同的部屬環境 Standard 以及 Flexible 可以選擇

Standard V.S Flexible Environment
最大的差別是 Standard Environment 是 Serverless 的架構, 在部屬時不需要特別去配置 VM 來跑服務, 在底層 Google 會動態的去調用計算資源, 當服務沒有被使用時則自動釋放這些資源, 好處是當資源被釋放之後 Google 不會跟你算錢, 如果不需要特定的 Runtime 或是也不想關心底層 Infra 的配置, 基本上 Standard Environment 是最佳的選擇 相對的, Flexible Environment 的底層是跑 GCE 的 VM, 在部屬的時候必須聲明 VM 的規格, 而就算服務沒有被使用 Google 還是會跟你算維運 VM 的相關費用, 但好處是在專用的 VM 上跑服務不會有 Cold Start 的問題, 除此之外還能擁有更多的彈性去客製化部屬環境


Step 2. 部屬

gcloud app deploy app.yaml

結言

總而言之, GAE 上提供兩種不同的部屬環境, 開發者可以根據需求來選擇最適合的方案, 但要注意的是若選擇 Standard 的部屬環境, 基本上1分鐘內就可以完成布署, 但若是選擇 Flexible 的部屬環境, 則可能會耗上好幾分鐘, 因為在這些時間內 Google 除了建立要 VM 的環境之外, 還需要把服務打包成 Container 之後才會將其部屬到 VM 上




留言