GCP 云函数使用私有 IP 连接到云 SQL



我正在按照此示例从Cloud Function连接到Postgres Cloud SQL:https://cloud.google.com/functions/docs/sql。

当我使用公共 IP 创建测试云 SQL 实例并触发云函数时,它会连接到云 SQL 实例并返回一些内容。出于安全原因,我不能将公共 IP 保留为打开状态,因此当我在云 SQL 实例上选择专用 IP 时,我得到:

Error: function crashed. Details:
could not connect to server: Connection refused
Is the server running locally and accepting
connections on Unix domain socket "/cloudsql/cloud-sql-test-250613:us-central1:myinstance-2/.s.PGSQL.5432"?

我无法从文档中获取云函数和云 sql 实例之间的协定是什么。如果我们使用 unix 域套接字,我应该关心 IP 吗?是公共的还是私人的有关系吗? 如果确实很重要,我是否必须完成设置私有 IP 基础结构的所有过程?我需要无服务器 VPC 吗?

通过这样做,我设法实现了云函数和云SQL私有实例之间的连接。

似乎禁用公共 IP 确实很重要,每当我禁用公共 IP 时,我都会被拒绝 ERR CONN,这似乎是您的情况,要让您的云 SQL 实例仅具有私有 IP,我认为您必须使用无服务器 VPC。

这是我建议您尝试的:

确保您的所有基础设施都位于同一区域(云 SQL、云功能、VPC 连接器)

请采取以下步骤:

  1. 将云 SQL 实例设置为仅限专用连接。(云 SQL 实例>连接)

  2. 确保您的私有 CloudSQL 实例位于所需的"关联网络"(VPC) 上。

  3. 在云 SQL 实例所在的 VPC 网络上创建 VPC 连接器。(与 MySql 实例关联的那个)

要创建连接器,请转到:VPC 网络> VPC 无服务器访问>创建连接器

在 VPC 网络> [您的 VPC]> VPC 网络对等中,您可以检查连接是否 更正到您的云 SQL 实例。

  1. 使用所需语言的代码创建云函数。(您可以使用文档中的示例进行测试。

创建云函数时,请确保将其设置在同一区域中,同时将您创建的 VPC 连接器添加到云函数中的"出口设置"选项中。

如果您尝试通过 GCP 控制台创建 VPC 连接器,则只能从 1 个区域中进行选择。但是,如果使用云外壳,则可以定义其他区域。您可以使用此命令和在这些区域尝试。

gcloud beta compute networks vpc-access connectors create [CONNECTOR_NAME]  
--network [VPC_NETWORK]  
--region [REGION]  
--range [IP_RANGE]

地区:

美国中部 1、美国东部 1、欧洲西部 1

请让我知道这是否适合您。

更新:

你好再次阿洛博兹克,

尝试在 Python 中制作云函数(一旦确保前面的所有步骤都正常)。

试试这个代码:

云函数索引.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

相关内容

  • 没有找到相关文章

最新更新