连接到 Cloud SQL 时,云函数“连接被拒绝”

Lox*_*gel 5 python google-cloud-sql google-cloud-platform google-cloud-functions

我正在尝试按照Google 提供示例将 Cloud Functions 脚本连接到带有 Python 和 MySQL 实例的 Cloud SQL。

我在项目中创建了一个 Cloud SQL 实例,然后创建了一个 Cloud Function,我将整个脚本从链接粘贴到内联编辑器中。我将环境变量设置为连接到 Cloud SQL 所需的环境变量,但出现错误。

为了完成这项工作,我是否缺少一些明显的东西?

错误:函数崩溃。详细信息:(2003 年,“无法连接到 'localhost' 上的 MySQL 服务器([Errno 111] 连接被拒绝)”)

回溯(最近一次调用):文件“/env/local/lib/python3.7/site-packages/pymysql/connections.py”,第 582 行,在 connect **kwargs 中)文件“/opt/python3.7/ lib/python3.7/socket.py", line 727, in create_connection raise err File "/opt/python3.7/lib/python3.7/socket.py", line 716, in create_connection sock.connect(sa) ConnectionRefusedError : [Errno 111] Connection denied 在处理上述异常的过程中,又发生了一个异常: Traceback (most recent call last): File "/user_code/main.py", line 49, in mysql_demo mysql_conn = pymysql.connect(**mysql_config )文件“/env/local/lib/python3.7/site-packages/pymysql/ INIT py”为,线94,在连接返回连接(*指定参数时,** kwargs)文件“/ env的/本地/ LIB / python3 .7/site-packages/pymysql/connections.py”,第 327 行,在初始化self.connect() 文件“/env/local/lib/python3.7/site-packages/pymysql/connections.py”,第 629 行,在连接中引发 exc pymysql.err.OperationalError:(2003,“无法连接到'localhost'上的MySQL服务器([Errno 111]连接被拒绝)”)在处理上述异常时,发生了另一个异常:Traceback(最近一次调用):文件“/env/local/lib/python3.7/site -packages/pymysql/connections.py", line 570, in connect sock.connect(self.unix_socket) ConnectionRefusedError: [Errno 111] Connection denied 在处理上述异常的过程中,发生了另一个异常:Traceback(最近一次调用最后一次):文件“/env/local/lib/python3.7/site-packages/google/cloud/functions_v1beta2/worker.py”,第 297 行,在 run_http_function 结果 = _function_handler.invoke_user_function(flask.request) 文件“/env/local/lib/python3.7/site-packages/google/cloud/functions_v1beta2/worker.py”,第 199 行,invoke_user_function return call_user_function(request_or_event) 文件“/env/local/lib/python3 .7/site-packages/google/cloud/functions_v1beta2/worker.py", line 192, in call_user_function return self._user_function(request_or_event) File "/user_code/main.py", line 53, in mysql_demo mysql_conn = pymysql.connect (**mysql_config) 文件 "/env/local/lib/python3.7/site-packages/pymysql/_user_function(request_or_event) 文件“/user_code/main.py”,第 53 行,在 mysql_demo 中 mysql_conn = pymysql.connect(**mysql_config) 文件“/env/local/lib/python3.7/site-packages/pymysql/_user_function(request_or_event) 文件“/user_code/main.py”,第 53 行,在 mysql_demo 中 mysql_conn = pymysql.connect(**mysql_config) 文件“/env/local/lib/python3.7/site-packages/pymysql/init .py", line 94, in Connect return Connection(*args, **kwargs) File "/env/local/lib/python3.7/site-packages/pymysql/connections.py", line 327, in init self .connect() 文件“/env/local/lib/python3.7/site-packages/pymysql/connections.py”,第 629 行,在连接中引发 exc pymysql.err.OperationalError:(2003,“无法连接到'localhost' 上的 MySQL 服务器([Errno 111] 连接被拒绝)”)

Zou*_*ino 4

非常重要的信息:

在开始之前,您需要去GCP IAM将云SQL管理员角色添加到云函数服务帐户。服务帐号信息可以在云功能的常规选项卡中找到。完成此操作后,您应该可以开始了。如果没有,请尝试向您的云功能服务帐户添加更多角色,例如项目编辑器。

供代码参考,(仅更改部分)

# TODO(developer): specify SQL connection details  
CONNECTION_NAME = getenv(
'INSTANCE_CONNECTION_NAME',
'proj-chatbot-og:us-central1:your connection name')
# Please don't change the name on the left like MYSQL_USER
DB_USER = getenv('MYSQL_USER', 'your user name')
DB_PASSWORD = getenv('MYSQL_PASSWORD', 'your password')
DB_NAME = getenv('MYSQL_DATABASE', 'your sql database')


mysql_config = {
'user': DB_USER,
'password': DB_PASSWORD,
'db': DB_NAME,
'charset': 'utf8mb4',
'cursorclass': pymysql.cursors.DictCursor,
'autocommit': True
}
Run Code Online (Sandbox Code Playgroud)

完整的文档可以在这里找到https://cloud.google.com/functions/docs/sql

如果您发现该解决方案解决了您的问题,请对该解决方案进行投票。