【问题标题】:Using firebase functions emulator with cloud SQL proxy将 Firebase 函数模拟器与 Cloud SQL 代理一起使用
【发布时间】:2022-01-17 10:36:44
【问题描述】:

我部署了一个调用 GCP MySQL 实例并返回一些数据的 firebase https 函数。如何在 firebase 函数模拟器中运行此函数?

我将该函数与一个简单的 helloWorld https 函数一起加载到了模拟器中。使用本地 URL (http://localhost:5001/INSTANCE/us-central1/helloWorld) 可以很好地返回。但是,本地运行的 SQL https 函数返回 {"errno":-4058,"code":"ENOENT","syscall":"connect","address":"/cloudsql/(deleted)","fatal":true} ...我删除了实例连接名称。

接下来,我在我的 PC 上运行 gcloud_sql_proxy,它声称正在监听 127.0.0.1:3306。 https 函数继续返回与上面完全相同的错误,所以我不确定模拟函数是通过我的 gcloud_sql_proxy 还是仍在尝试直接连接到云 SQL - 我猜是后者。

我是否还应该重新设置函数本身以使用主机+端口(127.0.0.1、3306)与其当前使用的 unix socketpath 方法进行连接?我希望模拟器会自动执行此操作,这样我就可以避免陷入那个兔子洞,因为云文档只提供了 socketpath 方法。但我确实打算接下来尝试一下。

谢谢。

【问题讨论】:

    标签: google-cloud-functions google-cloud-sql firebase-tools


    【解决方案1】:

    根据错误消息,我认为模拟器正在寻找 Unix 套接字,听起来您正在使用 TCP 套接字启动 Cloud SQL 代理。

    尝试使用路径与您的函数匹配的 Unix 套接字。比如:

    cloud_sql_proxy -dir /cloudsql
    

    这将为您活动的 gcloud 项目中的所有 SQL 实例创建一个 Unix 套接字。

    【讨论】:

    • 我在尝试那个或其他变体时得到“不支持的网络:unix”。根据您的建议,我尝试了` ./cloud_sql_proxy -instances=INSTANCE -dir /cloudsql、./cloud_sql_proxy -instances=INSTANCE=unix -dir /cloudsql 和 ./cloud_sql_proxy -instances=INSTANCE=unix:/cloudsql`。谢谢你的建议。我让代理与 HOST & IP 一起工作,但想让它与 UNIX 一起工作,所以我不必更改存储过程工具。
    • 如果您在 Windows 上运行,您目前将无法使用 Unix 套接字。我们确实有一个问题需要解决:github.com/GoogleCloudPlatform/cloudsql-proxy/issues/84。与此同时,可能最简单的做法是在 dev 中使用 TCP 套接字运行。也可以随意评论该问题,以帮助提高其优先级。
    • 我接受了您的回答,因为如果我切换到 Linux 将会很有帮助。我的主要需求是在本地进行功能开发,因为功能部署到 Firebase 太慢了。所以只要代理与主机/IP一起工作我就很好。以后,如果在 Windows 中可以使用 unix 套接字,那就更好了。感谢您的帮助。
    猜你喜欢
    • 2019-08-09
    • 1970-01-01
    • 2022-07-02
    • 2020-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-25
    • 1970-01-01
    相关资源
    最近更新 更多