通过这样做,我设法实现了 Cloud Function 和 Cloud SQL 私有实例之间的连接。
如果您禁用公共 IP 似乎很重要,每当我禁用公共 IP 时,我一直收到 ERR CONN REFUSED,这似乎是您的情况,让您的 Cloud SQL 实例仅具有私有 IP,我认为您必须使用无服务器专有网络。
这是我建议您尝试的方法:
确保您的所有基础设施都在同一个区域(Cloud SQL、Cloud Function、VPC 连接器)
请采取以下步骤:
将 Cloud SQL 实例设置为仅私有连接。(云 SQL 实例 > 连接)
确保您的私有 CloudSQL 实例位于所需的“关联网络”(VPC) 上。
在您的 Cloud SQL 实例所在的 VPC 网络上创建一个 VPC 连接器。(与MySql实例关联的那个)
要创建连接器,请转到:VPC 网络 > VPC 无服务器访问 > 创建连接器
在 VPC Network > [Your VPC] > VPC Network Peering 中,您可以检查与 Cloud SQL 实例的连接是否正确。
- 使用所需语言的代码创建云函数。(您可以使用文档中的示例进行测试。)
创建 Cloud Function 时,请确保将其设置在同一区域,同时将您创建的 VPC 连接器添加到 Cloud Function 中的“Egress Settings”选项。
如果您尝试通过 GCP Console 创建 VPC 连接器,您将只能选择 1 个区域。但是如果您使用云壳,您可以定义其他区域。您可以使用此命令在这些区域进行尝试。
gcloud beta compute networks vpc-access connectors create [CONNECTOR_NAME] \
--network [VPC_NETWORK] \
--region [REGION] \
--range [IP_RANGE]
领域:
美国-中央1、美国-东部1、欧洲-西部1
请让我知道这是否对您有用。
更新:
你好再次alobodzk,
尝试在 Python 中创建您的云函数(确保前面的所有步骤都正常)。
试试这个代码:
Cloud Function index.js(用您自己的凭据替换所有连接器数据)
import mysql.connector
from mysql.connector import Error
def mysql_demo(request):
import mysql.connector
from mysql.connector import Error
try:
connection = mysql.connector.connect(host='CloudSQL Instance Private IP', database='Database Name, user='UserName', password='Password')
if connection.is_connected():
db_Info = connection.get_server_info()
print("Connected to MySQL database... MySQL Server version on ",db_Info)
cursor = connection.cursor()
cursor.execute("select database();")
record = cursor.fetchone()
print ("Your connected to - ", record)
except Error as e :
print ("Error while connecting to MySQL", e)
finally:
#closing database connection.
if(connection.is_connected()):
cursor.close()
connection.close()
print("MySQL connection is closed")
# [END functions_sql_mysql]
云功能要求.txt
psycopg2==2.7.7
PyMySQL==0.9.3
mysql-connector-python