【问题标题】:Google Cloud Function access Cloud SQL PostgreSQL DB timeoutGoogle Cloud Function 访问 Cloud SQL PostgreSQL 数据库超时
【发布时间】:2021-01-13 22:31:15
【问题描述】:

这是我的谷歌云功能:

async function getPSQLdata() {
  const pg = require('pg');

  var pgConfig = {
    user: 'postgres',
    password: '[MY PASSWORD]',
    database: '[MY DB NAME]',
    host: '[PUBLIC IP ADDRESS OF DB INSTANCE]'
  };

  var pgPool;

  if (!pgPool) {
    pgPool = new pg.Pool(pgConfig);
  }

  const scores = await pgPool
    .query("SELECT * from table")
    .then(res => console.log(res.rows[0]))
    .catch(e => console.error(e.stack));
}

exports.dailyFill = async function main() {
  await getPSQLdata();
};

Google Cloud Logging 说:“函数执行耗时 60003 毫秒,完成状态:‘超时’”。

到目前为止我所尝试的:

  • 我已在 GCP 项目中启用 Cloud SQL Admin API
  • 我已在 GCP 项目中启用 Cloud SQL API
  • 我已将 Google Cloud Function 服务帐号作为“Cloud SQL 客户端”和“项目编辑器”角色添加到 IAM

【问题讨论】:

  • 你的函数应该返回一个promise,否则它会超时。将getPSQLdata 中的最后一条语句更改为return pgPool.query("SELECT * from table").then(res =>console.log(res.rows[0])).catch(e => console.error(e.stack)); 并将此函数导出为exports.dailyFill = getPSQLdata
  • 谢谢。 “将这个函数导出为ex​​ports.dailyFill = getPSQLdata”是什么意思?

标签: postgresql google-cloud-platform google-cloud-functions google-cloud-sql


【解决方案1】:

云函数提供了一种通过 Cloud SQL 代理连接到数据库的方法,请在此处查看详细信息 https://cloud.google.com/sql/docs/mysql/connect-functions#public-ip-default_1 这是首选方法。

关键区别在于,您可以使用以下代码而不是定义 host

socketPath: '/cloudsql/INSTANCE_CONNECTION_NAME'

【讨论】:

  • 同意这个最佳实践,如果您愿意,也可以使用私有 IP。无论如何,绝对不推荐使用公共 IP(我猜是开放的)!
  • 请确定,您是否将 INSTANCE_CONNECTION_NAME 替换为 Cloud SQL 实例详细信息中的连接名称?格式应为:::
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-09-28
  • 2020-11-05
  • 1970-01-01
  • 1970-01-01
  • 2020-06-29
  • 2020-01-23
  • 2021-04-08
相关资源
最近更新 更多