在 Google Compute Engine(GCE) 部署資料庫,降低 GCP 開銷!

前言

GCP提供了 Cloud SQL 做為雲端資料庫,非常的方便、易用
開發者不必煩惱硬體層,可以將心力專注在服務開發上
但方便總是有代價的,每個月的帳單會告訴你代價有多少

若只是一個微小專案或著展示用的 Side Project,就會希望將開銷降至最低了!

本篇以 Postgresql 為例,並使用 Docker container,以最快速、簡單的方式將資料庫安裝至 GCE 裡!

前置說明

Google Cloud 免費計畫(依網站為主)

截至發文時間(2022/08/31),可使用以下規格建立免費方案的VM
故後面截圖範例將以下列規格建立

  • 奧勒岡州:us-west1 < 地理位置離台灣最近,故選美西
  • 30 GB 以內的標準永久磁碟
  • e2-micro VM
  • PostgreSQL

1. 啟用 GCE、建立 VM

  1. 進入 GCE 頁面
  2. 點擊上面的建立執行個體(CREAT INSTANCE)
  3. 依 free tier 方案設定區域奧勒岡州、機器e2-micro

2. 設定 postgresql Docker Container

2.1 尋找想使用的資料庫容器

  1. marketplace搜尋想使用的資料庫
  2. 此處以 postgres 為例 (目前最新版為14)
  3. 搜尋到指定版本、進入頁面後
  4. 點擊右下角的存放區路徑,接著複製完整的映象檔名稱

2.2 在 GCE 裡設定容器(CONTAINER)

  1. 回到 GCP 頁面
  2. 容器區塊,點擊DEPLOY CONTAINER
  3. 貼上前面複製的容器位置
  4. 設定環境變數,增加POSTGRES_DBPOSTGRES_PASSWORD,輸入想要的資料庫名與密碼。預設登入帳號是postgres
  5. 重要! 磁碟區掛接,要將容器裡的資料掛載出來。否則當VM重啟、暫停,資料會消失!
    • 掛載路徑 是 CONTAINER 裡 DB的路徑
    • 主機路徑 是 VM OS裡的路徑

2.3 設定開機磁碟為標準永久磁碟

  1. 目前免費計畫是 30 GB 以內的標準永久磁碟,但容器(CONTAINER)預設帶出來的是新的已平衡永久磁碟,要點開來更改
  2. 版本則照容器(CONTAINER)帶出來的,選一樣即可。以我的為例,即Container-optimized OS 97-16919.103.33 LTS
  3. 容量在 30 GB 以內即可,依自身需求調整

2.4 防火牆、安全性

  1. 防火牆的允許 HTTP流量、HTTPS流量 (不勾也無妨)
  2. 安全性可以都先勾起來

2.5 建立 VM

都設定完成後,拉到最下面建立
可以看到文字這個 VM 執行個體將會耗用免費試用額度
確定真的有使用FREE-TIER

接著按下建立

3. 增加防火牆路由、並套用在 VM 上

3.1 增加防火牆路由

  1. 於上方搜尋防火牆,進入功能頁面
  2. 左側選到防火牆,點擊上方建立防火牆規則
  3. 名稱: allow-postgres (或任何你想要的名字都可)
  4. 目標標記(Target tags): allow-postgres
  5. 來源IPv4範圍(Source IP ranges): 0.0.0.0/0
  6. 指定的通訊協定和埠(Specific protocols and ports): 勾選TCP,輸入5432
  7. 點擊建立

3.2 套用在 VM 上

  1. 回到 GCE 功能頁面
  2. 點擊剛剛建立的 VM,由名稱可點進詳細資訊
  3. 點擊上方的編輯
  4. 網路標記(Target tags)增加剛剛建立的allow-postgres
  5. 按儲存

4. 使用資料庫工具連線測試 & 轉移資料

到這裡就算設定完成了!
可以直接使用資料庫工具(如DBeaver)或任何您熟悉的工具
輸入外部 IP 測試連線!

5. 建立一筆測試資料、重啟 VM

若是現有服務轉移,在真的移轉資料之前,先建立一些測試資料
重啟 VM,以確認資料真的有保存到VM上!

之後就可以將資料轉移進來、或建立 TABLE 了!

結論

免費方案的 GCE DB,相當於自己灌 DB 在 Server 上
自然是沒有像 Cloud SQL 那麼方便,可以點一點就直接擴增容量、提高效能、自動備份…等
經費是首要考量的小 Side Project,不失為一個方便的作法

若 DB 資料有其重要性,要記得在應用服務跑夜間批次作業定期備份出來
看是可以備在自己的 NAS 或著資料量不大的話,寫在 Google Sheet,亦不失為一種簡易的異地備援!

參考資料

Run a Postgres instance for cheap in Google Cloud