当前位置: 首页 > 知识库问答 >
问题:

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

董联
2023-03-14

我按照这个示例从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基础设施的所有过程?我需要无服务器专有网络吗?

共有1个答案

贡烨烁
2023-03-14

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

如果你禁用公共IP似乎很重要,每当我禁用公共IP时,我总是得到ERR CONN拒绝,这似乎是你的情况,只有私有IP才能拥有云SQL实例,我认为你必须使用无服务器VPC。

这是我建议您尝试的:

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

请采取以下步骤:

>

  • 将云SQL实例设置为专用连接。(云SQL实例

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

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

    要创建连接器,请访问:VPC网络

    在VPC网络中

    当您创建云功能时,请确保将其设置在同一区域,同时将您创建的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]
    

    云功能requirements.txt

    psycopg2==2.7.7
    PyMySQL==0.9.3
    mysql-connector-python
    

  •  类似资料:
    • GCP建议通过私有IP连接使用云SQL代理https://cloud.google.com/sql/docs/mysql/connect-kubernetes-engine#before_you_begin.如果应用程序不想利用云SQL代理,而是选择私有IP连接,则没有建议、文档或流程来确保私有IP连接的安全或建立必要的身份验证。 除了专用 IP 连接之外,应用程序还应执行哪些操作,以使其等效于云

    • 我在通过云 SQL 身份验证代理将 GCP 计算引擎虚拟机连接到配置了专用 IP(非公共)的云 SQL 实例时遇到问题。 执行后 我看到以下输出: 我还没有看到上面关于这个主题的任何教程的最后陈述。 我< code>CTRL-C退出上述操作,然后显示: 然后,我运行以下命令以连接到我的云 SQL 实例: 返回: 输入密码后返回: 以下是一些附加信息: 我的虚拟机 (Ubuntu) 与我的云 SQL

    • 介绍如何使用云联壹云提供的私有云功能。 云联壹云 提供内置私有云的功能,本章节用于帮助用户快速创建 云联壹云 平台的虚拟机。 概念介绍 区域:区域为物理概念,一般为数据中心的地理区域,一般为城市,如北京等。 云联壹云 私有云只有一个区域,只支持改名。 可用区:可用区是区域下电力和网络相互独立的物理区域,一般为机房名称,例如望京,酒仙桥等。 VPC:专有网络VPC(Virtual Private C

    • 但是添加应该在GKE集群中为服务提供一个sidecar,并允许它连接到SQL?

    • 在尝试连接到具有私有IP的Google Cloud平台(从我家庭网络中的机器)中的Postgreql实例时,我一直在苦苦挣扎。 我已经尝试使用https://cloud.google.com/sql/docs/postgres/connect-admin-proxy(代理云sql),但我需要我的实例有一个公共IP,根据我的要求,这是不可能的。此外,我读到我可以使用https://cloud.goo

    • 我有一个谷歌云功能订阅了一个主题。当需要向用户发送电子邮件时,我们的Go API会向主题发布一条消息。GCF创建电子邮件对象并将其发送到SendGrid。问题是,90%的情况下,云函数会被调用两次。 订阅的确认截止日期是600秒,文件中明确说明GCF内部确认。 我知道PubSub保证后台功能至少一次交付和GCF至少一次执行。但是,这种情况在大多数情况下都会发生,我很确定这也是不对的。 有人有什么想