【问题标题】:Google Cloud Function with Google Cloud SQL: Python SQLalchemy engine works, but connection fails带有 Google Cloud SQL 的 Google Cloud Function:Python SQLalchemy 引擎工作,但连接失败
【发布时间】:2021-07-16 18:54:57
【问题描述】:

我有一个简单的测试脚本,以确保我可以使用 GCF 连接到 Google Cloud SQL 实例并进行读/写。

def update_db(request):

    import sqlalchemy

    # connect to GCP SQL db
    user = 'root'
    pw = 'XXX'
    conn_name = 'hb-project-319121:us-east4:hb-data'
    db_name = 'Homebase'

    url = 'mysql+pymysql://{}:{}@/{}?unix_socket=/cloudsql/{}'.format(user,pw,db_name,conn_name)
    engine = sqlalchemy.create_engine(url,pool_size=1,max_overflow=0)

    # Returns
    return f'Success'

这是成功的,但是当我尝试添加连接时:

conn = engine.connect()

我收到以下错误:

pymysql.err.OperationalError: (1045, "Access denied for user 'root'@'cloudsqlproxy~' (using password: YES)")

可以创建引擎但无法与之建立连接似乎很奇怪?值得注意的是,任何类型的 execute 使用引擎,例如engine.execute('select * from table limit 3')也会导致上面的错误。

感谢任何想法。感谢您的宝贵时间

干杯, 戴夫

【问题讨论】:

  • 哪些 IAM 角色分配给 Cloud Functions 服务帐号?

标签: python google-cloud-platform sqlalchemy google-cloud-functions


【解决方案1】:

当调用create_engine 方法时,它会创建必要的对象,但实际上并不尝试连接到数据库。

Per the SQLAlchemy documentation:

[create_engine] 创建一个针对 [连接字符串中的数据库] 定制的 Dialect 对象,以及一个 Pool 对象,该对象将在连接请求时在 [host]:[port] 建立 DBAPI 连接第一次收到。

您从 MySQL 收到的错误消息可能是由于 special user account for the Cloud SQL Auth proxy 尚未创建。

您需要create a user in CloudSQL (MySQL) '[USER_NAME]'@'cloudsqlproxy~%''[USER_NAME]'@'cloudsqlproxy~[IP_ADDRESS]')。

【讨论】:

  • 考虑到我能够在 python 中通过 mysql 连接、读取和写入数据库,这很奇怪。这里唯一的区别是我试图通过云功能而不是本地来做到这一点......
  • 这是否会改变您的答案,还是您认为这仍然是 Cloud SQL Auth 代理问题?文档令人困惑(又名我只是愚蠢),但我有点不确定如何解释这些方向:To create a user account for Cloud SQL Auth proxy connections, specify the hostname as 'cloudsqlproxy~[IP_ADDRESS]'. You can also use the IP address wildcard, which would result in 'cloudsqlproxy~%'. The full user account name would be 所以要创建一个用户帐户,我只需要指定一个主机名?这是什么意思?
猜你喜欢
  • 2023-03-18
  • 2018-11-25
  • 2019-03-29
  • 1970-01-01
  • 2021-03-27
  • 2021-06-19
  • 1970-01-01
  • 2020-04-18
  • 2020-01-23
相关资源
最近更新 更多