本頁面包含從 Cloud Run 函式執行的服務連線至 Cloud SQL 執行個體的資訊與範例。
如需逐步操作說明,瞭解如何執行連線至 Cloud SQL 的 Cloud Run 函式範例網頁應用程式,請參閱從 Cloud Run 函式連線的快速入門導覽課程。
Cloud SQL 是一項全代管資料庫服務,可協助您在雲端設定、維護及管理關聯資料庫。
Cloud Run 函式是輕量級運算解決方案,可讓開發人員建立獨立的單一用途函式來回應 Cloud 事件,而不需要管理伺服器或執行階段環境。
設定 Cloud SQL 執行個體
- 在您要連線的 Google Cloud 專案中啟用 Cloud SQL Admin API (如果尚未啟用):
- 建立 SQL Server 適用的 Cloud SQL 執行個體。建議您選擇與 Cloud Run 服務位於相同區域的 Cloud SQL
執行個體位置,以縮短延遲時間、避免部分網路費用,並降低跨區域故障風險。
根據預設,Cloud SQL 會為新執行個體指派公開 IP 位址。 您也可以選擇指派私人 IP 位址。如要進一步瞭解這兩者的連線選項,請參閱「 連線總覽」頁面。
- 建立執行個體時,您可以選擇執行個體的
伺服器憑證 (CA) 階層,然後將該階層設定為執行個體的
serverCaMode
。如要從網頁應用程式連線至執行個體,您必須選取「每個執行個體」CA 選項 (GOOGLE_MANAGED_INTERNAL_CA
) 做為執行個體的伺服器 CA 模式。
設定 Cloud Run 函式
設定 Cloud Run 函式的步驟取決於指派給 Cloud SQL 執行個體的 IP 位址類型。公開 IP (預設)
Cloud Run 函式支援透過公開 IP,使用 Go、Java 和 Python 連接器連線至 SQL Server 適用的 Cloud SQL。
如要設定 Cloud Run 函式,以啟用與 Cloud SQL 執行個體的連線:- 確認上述建立的執行個體具有公開 IP 位址。您可以在 Google Cloud 控制台中,前往執行個體的「總覽」頁面確認。如需新增公開 IP 位址,請參閱「設定公開 IP」。
- 取得執行個體的 INSTANCE_CONNECTION_NAME。這個值可用的時間如下:
- 在執行個體的「總覽」頁面中,前往Google Cloud 控制台,或
- 執行下列指令:
gcloud sql instances describe [INSTANCE_NAME]
-
為函式設定服務帳戶。如果授權服務帳戶與 Cloud SQL 執行個體屬於不同專案,則必須啟用 Cloud SQL Admin API,並將
Cloud SQL Client
IAM 角色新增至這兩個專案。 - 確認服務帳戶具備這個角色,以便連線至 Cloud SQL。
- 如果您使用
Cloud Run functions,而非 Cloud Run functions (第 1 代),則必須符合下列條件 (另請參閱「
設定 Cloud Run」):
- 先部署函式。
在 Google Cloud 控制台中首次建立 Cloud Run 函式時,系統尚未建立基礎 Cloud Run 服務。您必須先建立服務 (部署 Cloud Run 函式),才能設定 Cloud SQL 連線。 - 在 Google Cloud 控制台的「Function details」(函式詳細資料) 頁面右上角,按一下「Powered by Cloud Run」(由 Cloud Run 提供技術) 下方的連結,即可存取基礎 Cloud Run 服務。
- 在 Cloud Run 的「服務詳細資料」頁面中,選取「編輯並部署新修訂版本」分頁標籤。
- 按照標準步驟 (與任何設定變更的情況相同),為 Cloud SQL 連線設定新設定。
這會建立新的 Cloud Run 修訂版本,除非您明確變更,否則後續修訂版本會自動接收這個 Cloud SQL 連線。
- 先部署函式。
私人 IP
如果授權服務帳戶與 Cloud SQL 執行個體所屬的專案不同,請按照下列步驟操作:
- 在兩個專案中啟用 Cloud SQL Admin API。
- 為 Cloud SQL 執行個體所在專案的服務帳戶新增 IAM 權限。
- 確認先前建立的 Cloud SQL 執行個體具有私人 IP 位址。如需新增私人 IP,請參閱設定私人 IP的操作說明。
- 在與 Cloud SQL 執行個體相同的虛擬私有雲網路中建立無伺服器虛擬私有雲存取連接器。請注意下列條件:
- 除非您使用 共用虛擬私有雲,否則連接器所在的專案和區域,必須與使用該連接器的資源相同,但連接器可將流量傳送至位於不同區域的資源。
- 無伺服器虛擬私有雲存取可支援與透過 Cloud VPN 和虛擬私有雲網路對等互連連線的虛擬私有雲網路通訊。
- 無伺服器虛擬私有雲存取不支援舊版網路。
- 設定 Cloud Run 函式以使用連接器。
- 使用執行個體的私人 IP 位址和通訊埠
1433
連線。
連線至 Cloud SQL
設定 Cloud Run 函式後,即可連線至 Cloud SQL 執行個體。
公開 IP (預設)
如果是公開 IP 路徑,Cloud Run 函式會提供加密功能,並使用 Cloud SQL 連接器建立連線。
使用 Cloud SQL 連接器連線
Cloud SQL 連接器是語言專屬的程式庫,可提供加密和 IAM 型授權,用於連線至 Cloud SQL 執行個體。
Python
如要查看網頁應用程式中的程式碼片段,請參閱 GitHub 上的 README。
Java
如要查看網頁應用程式中的程式碼片段,請參閱 GitHub 上的 README。
注意:
- CLOUD_SQL_CONNECTION_NAME 應表示為 <MY-PROJECT>:<INSTANCE-REGION>:<INSTANCE-NAME>
- 如要瞭解 pom.xml 檔案的 JDBC 通訊端處理站版本需求,請參閱 這篇文章 。
Go
如要查看網頁應用程式中的程式碼片段,請參閱 GitHub 上的 README。
Node.js
如要查看網頁應用程式中的程式碼片段,請參閱 GitHub 上的 README。
私人 IP
如果是私人 IP 路徑,應用程式會透過虛擬私有雲網路直接連線至執行個體。這個方法會使用 TCP 直接連線至 Cloud SQL 執行個體,而不使用 Cloud SQL 驗證 Proxy。
透過 TCP 連線
使用 Cloud SQL 執行個體的私人 IP 位址做為主機和通訊埠 1433
進行連線。
Python
如要查看網頁應用程式中的程式碼片段,請參閱 GitHub 上的 README。
Java
如要查看網頁應用程式中的程式碼片段,請參閱 GitHub 上的 README。
注意:
- CLOUD_SQL_CONNECTION_NAME 應表示為 <MY-PROJECT>:<INSTANCE-REGION>:<INSTANCE-NAME>
- 使用 ipTypes=PRIVATE 引數會強制 SocketFactory 連線至執行個體相關聯的私人 IP
- 請參閱 pom.xml 檔案的 JDBC 通訊端處理站版本規定。
Node.js
如要查看網頁應用程式中的程式碼片段,請參閱 GitHub 上的 README。
Go
如要查看網頁應用程式中的程式碼片段,請參閱 GitHub 上的 README。
PHP
如要查看網頁應用程式中的程式碼片段,請參閱 GitHub 上的 README。
最佳做法和其他資訊
在本機測試應用程式時,可以使用 Cloud SQL Auth Proxy。如需詳細操作說明,請參閱使用 Cloud SQL 驗證 Proxy 的快速入門導覽課程。
連線集區
資料庫伺服器本身或 Cloud Run 函式底層基礎架構,都可能捨棄與基礎資料庫的連線。建議使用支援連線集區的用戶端程式庫,自動重新連線中斷的用戶端連線。此外,建議您使用全域範圍的連線集區,提高函式在後續呼叫時重複使用相同連線的可能性,並在執行個體遭到清除 (自動縮減) 時自然關閉連線。 如需如何使用連線集區的詳細範例,請參閱「管理資料庫連線」。連線限制
Cloud SQL 會對並行連線設下上限,這些上限可能會因所選資料庫引擎而異 (請參閱「Cloud SQL 配額與限制」)。 建議您使用 Cloud Run 函式建立連線,但請務必將連線數量上限設為 1。盡可能只為需要存取資料庫的函式初始化連線集區。部分連線集區會預先建立連線,這可能會耗用過多資源,並計入連線限制。因此,建議使用 延遲初始化,將連線集區的建立作業延後到需要時再執行,並只在會用到連線集區的函式中加入連線集區。
如需如何限制連線數量的詳細範例,請參閱「管理資料庫連線」。
API 配額限制
Cloud Run 函式提供透過 Cloud SQL 驗證 Proxy 連線的機制,而該 Proxy 會使用 Cloud SQL Admin API。 API 配額限制適用於 Cloud SQL 驗證 Proxy。使用的 Cloud SQL Admin API 配額約為設定的 Cloud SQL 執行個體數量的兩倍,再乘以部署的函式總數。您可以設定並行呼叫次數上限,藉此修改預期消耗的 API 配額。Cloud Run 函式也會對每 100 秒允許的 API 呼叫次數設定頻率限制。
後續步驟
- 進一步瞭解 Cloud Run 函式。
- 進一步瞭解如何部署 Cloud Run 函式。
- 進一步瞭解如何指定 Cloud Run 函式的觸發條件。
- 進一步瞭解如何設定 Cloud Run 函式。