【发布时间】:2022-01-29 17:42:23
【问题描述】:
我有这个代码来检索秘密:
import {SecretManagerServiceClient} from "@google-cloud/secret-manager";
const client = new SecretManagerServiceClient();
async function getSecret(secret: String, version = "latest") {
const projectID = process.env.GOOGLE_CLOUD_PROJECT;
const [vs] = await client.accessSecretVersion({
name: `projects/${projectID}/secrets/${secret}/versions/${version}`
});
const secretValue = JSON.parse(vs.payload.data.toString());
return secretValue;
}
export {getSecret};
我想用await getSecrets("SENTRY_DNS") 替换process.env.SENTRY_DNS,但我不能在async 函数之外调用promise (await)。
Sentry.init({
dsn: process.env.SENTRY_DNS,
environment: Config.isBeta ? "Beta" : "Main"
});
function sentryCreateError(message, contexts) {
Sentry.captureMessage(message, {
level: "error", // one of 'info', 'warning', or 'error'
contexts
});
}
Google Secrets 的最佳做法是什么?我应该在“配置”文件中加载一次秘密,然后从那里调用值吗?如果是这样,我不知道该怎么做,你有例子吗?
【问题讨论】:
-
你在哪里运行你的代码,为什么不能在你调用
accessSecretVersion的地方使用async/await? -
检查上面的例子,
Sentry.init()在函数之外运行。这就是问题所在,也许我需要创建一个类,以便 init 代码可以调用 await 函数? -
顶级 await 是现代 nodejs 中的一个东西。
-
@sethvargo,非常感谢您的帮助。如果我在顶级
const dns = await getSecret("SENTRY_DNS");添加此代码,则会收到错误消息:Parsing error: Unexpected reserved word 'await'.。我正在使用 nodejs v16。
标签: node.js google-cloud-platform google-secret-manager