要从 Cloud Run 连接到 Cloud SQL,您必须关注 this guide
您已经在 Connections 选项卡中进行了一些配置,如Configuring Cloud Run 部分所述。您可以查看Public IP 的指南,因为您以这种方式配置了您的实例,以确保遵循所有步骤。
简单来说,步骤是:
-
Cloud SQL Client(首选)
Cloud SQL Admin
如果授权服务帐号与 Cloud SQL 实例属于不同的项目,则需要为这两个项目添加 Cloud SQL Admin API 和 IAM 权限。
与任何配置更改一样,为 Cloud SQL 连接设置新配置会导致创建新的 Cloud Run 修订版。后续修订也将自动获取此 Cloud SQL 连接,除非您进行显式更新以更改它。
- 转到 Cloud Run
- 配置服务:
- 如果您要向现有服务添加 Cloud SQL 连接:
- 启用连接到 Cloud SQL 实例:
- 点击高级设置。
- 单击“连接”选项卡。
- 如果您要在项目中添加与 Cloud SQL 实例的连接,请从下拉菜单中选择所需的 Cloud SQL 实例。
- 如果您要删除连接,请将光标悬停在连接右侧以显示“废纸篓”图标,然后单击它。
- 单击创建或部署。
仔细检查上述步骤后,您可以继续阅读Connecting to Cloud SQL 部分。您可以按照Public IP 标签上的步骤操作。
与 Unix 套接字连接
正确配置后,您可以将服务连接到 Cloud SQL 实例的 Unix 域套接字,该套接字在环境文件系统上通过以下路径访问:/cloudsql/INSTANCE_CONNECTION_NAME。
可以在Google Cloud Console 的实例的概述页面上找到 INSTANCE_CONNECTION_NAME,也可以通过运行以下命令找到:
gcloud sql instances describe [INSTANCE_NAME].
这些连接会自动加密,无需任何额外配置。
下面显示的代码示例摘自 GitHub 站点上更完整的示例。要在 Web 应用程序的上下文中查看此 sn-p,请查看 the README on GitHub。
// Equivalent connection string:
// "Server=<dbSocketDir>/<INSTANCE_CONNECTION_NAME>;Uid=<DB_USER>;Pwd=<DB_PASS>;Database=<DB_NAME>;Protocol=unix"
String dbSocketDir = Environment.GetEnvironmentVariable("DB_SOCKET_PATH") ?? "/cloudsql";
String instanceConnectionName = Environment.GetEnvironmentVariable("INSTANCE_CONNECTION_NAME");
var connectionString = new MySqlConnectionStringBuilder()
{
// The Cloud SQL proxy provides encryption between the proxy and instance.
SslMode = MySqlSslMode.None,
// Remember - storing secrets in plain text is potentially unsafe. Consider using
// something like https://cloud.google.com/secret-manager/docs/overview to help keep
// secrets secret.
Server = String.Format("{0}/{1}", dbSocketDir, instanceConnectionName),
UserID = Environment.GetEnvironmentVariable("DB_USER"), // e.g. 'my-db-user
Password = Environment.GetEnvironmentVariable("DB_PASS"), // e.g. 'my-db-password'
Database = Environment.GetEnvironmentVariable("DB_NAME"), // e.g. 'my-database'
ConnectionProtocol = MySqlConnectionProtocol.UnixSocket
};
connectionString.Pooling = true;
// Specify additional properties here.
return connectionString;
Google 建议您使用 Secret Manager 来存储敏感信息,例如 SQL 凭据。您可以使用 Cloud Run pass secrets as environment variables or mount as a volume。
在 Secret Manager 中的 creating a secret 之后,使用以下命令更新现有服务:
gcloud run services update SERVICE_NAME \
--add-cloudsql-instances=INSTANCE_CONNECTION_NAME
--update-env-vars=INSTANCE_CONNECTION_NAME=INSTANCE_CONNECTION_NAME_SECRET \
--update-secrets=DB_USER=DB_USER_SECRET:latest \
--update-secrets=DB_PASS=DB_PASS_SECRET:latest \
--update-secrets=DB_NAME=DB_NAME_SECRET:latest
另见: