1

Google CloudRun にデプロイされた Google Express アプリを入手しました。すべてのユーザーに関連する共有データを使用し、それをグローバルパラメーターにロードしたいと思います。私のコードは、Google シークレット マネージャーを使用して、データをグローバル パラメーターに取得するためのデータベース接続情報を取得しています。アプリがコールドの場合、最初のユーザーにエラー メッセージが表示されますが、データをグローバル パラメーターにロードする非同期関数が開始され、最終的に次の呼び出しが正しく処理されます。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