【问题标题】:Cloud Run: Connecting to Cloud SQL instancesCloud Run:连接到 Cloud SQL 实例
【发布时间】:2019-10-28 10:04:22
【问题描述】:

在 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)

【问题讨论】:

  • 这是我一直关注的页面,但对我不起作用。你有没有按照这些说明走运?
  • 你在哪里运行mysql 命令?
  • 如果您在 Cloud Run 容器中运行此命令,则只有在 Cloud SQL 具有公共 IP(使用您的方法)时,您才能连接到私有 IP。 Cloud Run 不属于您的 VPC。通常您想使用 Unix 套接字 /cloudsql/[CONNECTION_NAME] 进行连接,例如:mysql --user=$MYSQL_ROOT --password=$MYSQL_PASS -S /cloudsql/<CONNECTION_NAME> -e "SHOW DATABASES"
  • 嗨,Daz,是的,感谢@JohnHanley,我终于让它工作了。我使用了 unix socket 技术,它自动为我设置了云 sql 代理。

标签: mysql docker google-cloud-platform google-cloud-run


【解决方案1】:

这个问题是在 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]

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

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


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

不同的语言和不同的数据库驱动程序将使用不同的方式连接到 Cloud SQL 实例。 This link 有更多详情。

另见How to securely connect to Cloud SQL from Cloud Run?

【讨论】:

    猜你喜欢
    • 2020-07-01
    • 2021-12-25
    • 2019-09-16
    • 1970-01-01
    • 2020-11-20
    • 2020-07-01
    • 2020-06-15
    • 2020-08-05
    • 1970-01-01
    相关资源
    最近更新 更多