1

我得到了部署在 Google CloudRun 中的 google express 应用程序。我想使用一些与所有用户相关的共享数据并将其加载到全局参数中。我的代码正在使用谷歌秘密管理器来检索一些数据库连接信息,以便将数据检索到全局参数中。当应用程序处于冷态时,第一个用户会收到错误消息,但会启动异步函数,将数据加载到全局参数中,最终将正确处理下一个调用。一切正常购买最近我在尝试连接到 Google 秘密管理器时发现了一个错误:

Error: 4 DEADLINE_EXCEEDED: Deadline exceeded
    at Object.callErrorFromStatus (/usr/src/app/node_modules/@google-cloud/secret-manager/node_modules/@grpc/grpc-js/build/src/call.js:30:26)
    at Object.onReceiveStatus (/usr/src/app/node_modules/@google-cloud/secret-manager/node_modules/@grpc/grpc-js/build/src/client.js:175:52)
    at Object.onReceiveStatus (/usr/src/app/node_modules/@google-cloud/secret-manager/node_modules/@grpc/grpc-js/build/src/client-interceptors.js:341:141)
    at Object.onReceiveStatus (/usr/src/app/node_modules/@google-cloud/secret-manager/node_modules/@grpc/grpc-js/build/src/client-interceptors.js:304:181)
    at Http2CallStream.outputStatus (/usr/src/app/node_modules/@google-cloud/secret-manager/node_modules/@grpc/grpc-js/build/src/call-stream.js:116:74)
    at Http2CallStream.maybeOutputStatus (/usr/src/app/node_modules/@google-cloud/secret-manager/node_modules/@grpc/grpc-js/build/src/call-stream.js:155:22)
    at Http2CallStream.endCall (/usr/src/app/node_modules/@google-cloud/secret-manager/node_modules/@grpc/grpc-js/build/src/call-stream.js:141:18)
    at Http2CallStream.cancelWithStatus (/usr/src/app/node_modules/@google-cloud/secret-manager/node_modules/@grpc/grpc-js/build/src/call-stream.js:457:14)
    at Timeout.<anonymous> (/usr/src/app/node_modules/@google-cloud/secret-manager/node_modules/@grpc/grpc-js/build/src/deadline-filter.js:59:28)
    at listOnTimeout (internal/timers.js:554:17) {

我的代码是这样的:

const { SecretManagerServiceClient } = require('@google-cloud/secret-manager');
const smClient = new SecretManagerServiceClient();

const express = require('express');
const bodyParser = require('body-parser')
let jsonParser = bodyParser.json()
const pkg = require('./package');

// ============== Express App  ========
const app = express();
// Serve the files in /assets at the URI /assets
app.use('/assets', express.static('assets'));

//Params
global.Param1 = null;
global.Param2 = null;

let PgPwd = null;


app.post('/Test', jsonParser, async (req, res) => {

    try 
    {
        loadParams();
        common.errors_client.report("Params were not loaded");
        throw new Error("Params were not loaded");
    }
    catch (err) {
        return res.status(400);
    }
}

async function loadParams() {

  try {
    const promise1 = loadDataFromPostgresqlToParam1();
    const promise2 = loadDataFromPostgresqlToParam2();

    await Promise.all([promise1, promise2]);
  }
  catch (err) {
    throw new Error(err);
  }
}


async function loadDataFromPostgresqlToParam1() {
  try {
    //=============== PostgresSQL ==================
    let pg_client = await getPgClient();
    await pg_client.connect()
    const resPg = await pg_client.query('select * from tabel1');
    await pg_client.end()
    let Param1 = JSON.parse(JSON.stringify(resPg));
  }
}


async function loadDataFromPostgresqlToParam2() {
  try {
    //=============== PostgresSQL ==================
    let pg_client = await getPgClient();
    await pg_client.connect()
    const resPg = await pg_client.query('select * from tabel2');
    await pg_client.end()
    let Param2 = JSON.parse(JSON.stringify(resPg));
  }
}

async function getPgClient() {
  var ret_client;
  if (PgPwd == null) {
    await getSecret().then((localPwd) => {
      PgPwd = localPwd; // assign to global variable
    })
  };
  ret_client = new Client({
    user: process.env.pgUser,
    host: process.env.pgHost,
    database: process.env.pgDataBase,
    password: PgPwd,
    port: process.env.pgPort
  });

  return ret_client;
}

async function getSecret() {

  const [version] = await smClient.accessSecretVersion({
    name: process.env.pgpwdlocation
  });
  const pwd = version.payload.data.toString();
  return pwd;
}

不知道这可能是什么原因。错误不一致。

4

0 回答 0