无法使用 Unix 套接字从 GCP Cloud Run 连接到 Cloud MySQL

时间:2021-07-26 22:00:10

标签: mysql python-3.x flask google-cloud-sql google-cloud-run

我的 Cloud Run 项目(Python/Flask)能够通过 TCP 正确连接到我的 Cloud MySQL 实例(在本地以及使用 gcloud 测试版代码开发环境时)。但是我无法通过 Unix 套接字进行连接,这在部署到 Google Cloud Platform 时是必需的。

我已尽可能严格按照 'Connecting from Cloud Run to Cloud SQL' 指南进行操作。

两者都在同一个地区,我相信 IAM 权限设置正确(mycompute@developer.gserviceaccount.com 成员同时拥有“Cloud SQL 客户端”和“Cloud SQL 管理员”角色)。我已将 Cloud Run 应用的 IP 地址(通过 ping 应用 URL 确定)添加到 Cloud SQL 实例“授权网络”。

我在 GCP 日志记录中没有看到任何相关的数据库错误或日志消息。

我在初始化连接的点附近添加了大量日志记录,并确定当我尝试 db.connect() 时连接失败(请参阅代码片段),并跳过 with 主体(即我只获取记录 1 和记录 6 条消息),并且不会引发异常。 init_connection_engine()init_unix_connection_engine(db_config) 与 Google 的示例代码没有变化。

def create_tables():
  global db
  db = db or init_connection_engine()
  # logging 1
  
  try:
    with db.connect() as conn:
      # logging 2
      conn.execute(
        "CREATE TABLE IF NOT EXISTS calendars "
        "( team_id VARCHAR(50) NOT NULL, calendar_id VARCHAR(200), owner_email VARCHAR(50), calendar_name VARCHAR(100), timezone VARCHAR(50), uuid VARCHAR(50), refresh_token VARCHAR(500), PRIMARY KEY (team_id));"
      )
      # logging 3

      conn.execute(
        "CREATE TABLE IF NOT EXISTS events "
        "( event_id VARCHAR(200), team_id VARCHAR(50), task_id VARCHAR(50) NOT NULL, title VARCHAR(200), "
        "location VARCHAR(300), details VARCHAR(500), start DATETIME, end DATETIME, PRIMARY KEY (task_id) );"
      )

      # logging 4
  except Exception as e:
    # logging 5
  # logging 6

对我做错了什么有任何想法吗?

0 个答案:

没有答案