我有部署在Google CloudRun中的Google Express应用。 我想使用一些与所有用户相关的共享数据,并将其加载到全局参数中。 我的代码正在使用Google Secret Manager检索一些数据库连接信息,以将数据检索到全局参数中。 当应用程序处于冷状态时,第一个用户会收到错误消息,但会启动异步功能,该功能会将数据加载到全局参数中,最终将正确处理下一次调用。 一切正常,最近购买,我在尝试连接到Google Secret Manager时发现错误:
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;
}
不确定是什么原因。 错误不一致。