GAE 連線到 GCE DB,透過無伺服器虛擬私有雲存取(Serverless VPC Connector)使用內部 IP 連線

前言

將資料庫(DB)搭建在 GCE,相比於 Cloud SQL,更加節省開銷
除了使用外部 IP,亦可透過無伺服器虛擬私有雲存取(Serverless VPC Connector)使用內部 ip 連線!

當然設定好了 VPC Connector,若仍有啟用其他服務,亦可接入使用
僅以 GAE 連接 GCE 做為示範

無伺服器虛擬私有雲存取(Serverless VPC Connector)
是在2019年出來的服務,Google 亦鼓勵大家盡量使用
畢竟 IP 越來越少,若服務不須對外,對安全性來說也是一大加分

不少網路文章都說 GAE 標準環境(STANDARD ENVIRONMENT)不能使用 Serverless VPC Connector,因為沒有內部 IP,要用就得轉成彈性環境(FLEXIBLE ENVIRONMENT)

但這是錯誤的!
GAE 標準環境(STANDARD ENVIRONMENT)可以透過 Serverless VPC Connector 連接內部 IP!

費用

此服務並不在 FREE-TIER 裡面,會有額外開銷!
啟動 Serverless VPC Connector,會依使用量自動啟用 GCE
若忙碌,亦有可能造成 BURSTABLE CPU 之額外開銷
查帳方式:至帳單 > 查看報表 > 右側分組依據 > 標籤鍵(label key)

若已有使用 FREE-TIER GCE 服務(如本文做為 DB使用)
且不希望超出免費額度的話
就不建議使用了

在 GAE 直接使用外部 IP 連接即可

作法

1. 建立 Serverless VPC Connector

  1. 在 GCP 上方搜尋【Serverless VPC Connector】或【無伺服器虛擬私有雲存取】進入頁面
  2. 按上方的【建立連接器】
  3. 名稱自定義,如my-vpc
  4. 區域依您服務所在最多的地方為主,若服務都在同一區域,有機會不必支付流量費用
  5. 子網路,直接照底下說明填寫10.8.0.0
  6. 資源調度設定依需求決定,以簡單 WEB 服務來說,上下限可抓2-4,留一些備用額度,以防未來有擴增需求就不必重新設定
  7. 按下【建立】

2. GCE 保留內部靜態 IP

第一步做完後,因選擇default,所以是所有區域都可連線
GCE 不必特別做什麼事就已經可以連接上了
但要記得去保留靜態IP,避免服務重啟時 IP 跑掉

  1. 上方搜尋【虛擬私有雲網路】 > 進入頁面 > 點擊左側的【IP位址】
  2. 可以看到目前服務啟動所佔用的 IP,若服務太多不好找,或點擊【內部IP地址】FILTER,將 GCE 服務點擊【保留】
  3. 可以至 GCE 頁面確認其內部 IP 已變成靜態

3. GAE 接入 Serverless VPC Connector

  1. 打開app.yaml
  2. 增加參數
    vpc_access_connector:
      name: "projects/{專案名稱}/locations/{步驟1指定的區域}/connectors/{vpc名,本文為例即my-vpc}"
  3. 至 GCE 頁面,查看他的內部 IP,將連接 DB 的位置改成內部 IP(如區域在us-west,將會是10.138.X.X)
  4. 部署 GAE
  5. 打開網站確認可正常運作後,此時一切皆是走內部連線了!

參考資料

stack overflow / connect Google App Engine and Google Compute Engine
stack overflow / Getting charged for E2 Instance Core running in Seoul but there is no VM