首页 > 解决方案 > Cloud Run:连接到 Cloud SQL 实例

问题描述

在 Cloud Run 上运行映像时,我无法连接到 Cloud SQL 实例。这个功能还有效吗?

我已使用 Compute Engine 成功连接到同一个 SQL 实例。

尝试使用简单的 shell 命令连接到 Cloud SQL 实例:

mysql --host=$MYSQL_IP --user=$MYSQL_ROOT --password=$MYSQL_PASS -e "SHOW DATABASES"

结果记录如下:

错误 2003 (HY000): 无法连接到 ' .*上的 MySQL 服务器。. ' (110)

标签: mysqldockergoogle-cloud-platformgoogle-cloud-run

解决方案


这个问题是在 Cloud Run 达到 GA(通用可用性)的几个月前提出的。

Cloud Run(全托管)现在支持使用数据库的公共 IP 地址连接到 Cloud SQL 实例(MySQL 和 PostgreSQL)。

gcloud run services update run-mysql \
    --add-cloudsql-instances [INSTANCE_CONNECTION_NAME] \
    --set-env-vars CLOUD_SQL_CONNECTION_NAME=[INSTANCE_CONNECTION_NAME],\
      DB_NAME=[MY_DB],DB_USER=[MY_DB_USER],DB_PASS=[MY_DB_PASS]

...whereINSTANCE_CONNECTION_NAME的格式为(由Cloud Console 中 Cloud SQL 实例的“概览”部分PROJECT_ID:REGION:INSTANCE_ID返回或提供)。gcloud sql instances describe <INSTANCE-ID> | grep connectionName

请注意,Cloud Run 用于授权您连接到 Cloud SQL 的服务帐号必须具有正确的 IAM 权限,如果数据库实例和 Cloud Run 服务不属于同一项目,则需要进行一些配置。


以上内容负责 Cloud Run 和 Cloud SQL 之间的连接。让您的应用程序实际与 Cloud SQL 实例对话需要使用位于 的 Unix 域套接字从您的 Cloud Run 服务进行/cloudsql/INSTANCE_CONNECTION_NAME连接(顺便说一句,这些连接会自动加密)。

不同的语言和不同的数据库驱动程序将使用不同的方式连接到 Cloud SQL 实例。这个链接有更多细节。

另请参阅如何从 Cloud Run 安全地连接到 Cloud SQL?


推荐阅读