我编写了两个Firebase函数,它们使用node-postgresql来使用以下一般行为向Amazon(RDS)上托管的外部PostgreSQL数据库发出请求:
import { Client } from "pg"
import { config } from "firebase-functions"
export async function sendQuery(query, args?) {
// use firebase environment config
const client = new Client(config().postgres)
await client.connect()
const res = await client.query(query, args)
await client.end()
return res
}
此代码在本地可以正常运行,它可以毫无问题地访问我的本地Postgres服务器或Amazon RDS。
当我部署使用此sendQuery
函数的云函数并尝试触发它们时,这是我从日志中得到的内容:
{错误:连接ETIMEDOUT xxx.xxx.xxx.xxx:5432 在TCPConnectWrap.afterConnect上[作为完成](net.js:1191:14) errno:“ ETIMEDOUT”, 代码:“ ETIMEDOUT”, syscall:“连接”, 地址:“ xxx.xxx.xxx.xxx”, 端口:5432}“
服务器地址和端口正确,因此我假设凭据已通过Firebase配置正确发送。使用bluebird的出站GET请求即使在随机端口上也可以正常工作。我开始怀疑是否甚至可以调用外部数据库...有什么想法吗?
另外,以防万一有人想知道,我不是有免费的火花计划,所以这绝对不是问题: