如何在 Cloud Function node.js10 中访问 Secret Manager?
How to access Secret Manager in Cloud Function node.js10?
我已经为此工作了 2 天,对进展感到非常沮丧,任何关于我的 understanding/code/approach 可能有问题的指导将不胜感激!
我正在尝试使用 node.js 从 secret mananger 获取版本值,下面的脚本在 GCE 上运行良好,但是每当我 运行 它在 Cloud 函数上它就会失败。
// My script on GCE, it works fine
const { SecretManagerServiceClient } = require('@google-cloud/secret-manager');
const secretManagerServiceClient = new SecretManagerServiceClient();
const name = 'projects/moonhome/secrets/moonFirstSecret/versions/latest';
testSecretManager = async () => {
const [version] = await secretManagerServiceClient.accessSecretVersion({ name });
const payload = version.payload.data.toString();
console.debug(`Payload: ${payload}`);
};
testSecretManager();
// My index.js on Cloud Function
const { SecretManagerServiceClient } = require('@google-cloud/secret-manager');
const secretManagerServiceClient = new SecretManagerServiceClient();
const name = 'projects/moonhome/secrets/moonFirstSecret/versions/latest';
testSecretManager = async () => {
const [version] = await secretManagerServiceClient.accessSecretVersion({ name });
const payload = version.payload.data.toString();
console.debug(`Payload: ${payload}`);
};
exports.helloHttp = (req, res) => {
testSecretManager();
res.send("noooo1");
};
// One of many versions of packaga.json I tried on Cloud function
{
"dependencies": {
"@google-cloud/secret-manager": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/@google-cloud/secret-manager/-/secret-manager-3.1.0.tgz",
"integrity": "sha512-/9IOWEhKAz/r3kSyp16kjudELkEJSRhwFfzukKbzQehVRZ3RceNDzjn+Rti1TivODJHEEIBZVsQFsKp7cLfUgQ==",
"requires": {
"google-gax": "^2.1.0"
}
}
}
}
以下是我的问题:
我注意到在 Cloud Function 中 node.js 运行 时间有 list 个可用的系统包,所以我想知道是否是这个原因。我已经提交了将 @google-cloud/secret-manager
添加到 node.js 运行 时间的请求。但是,云函数文档中有一个使用 escape-html
的示例,该列表中也没有。我的问题是,我应该请求将 secret-manager 包添加到 node.js 运行time 吗?
由于 Cloud Function 需要一个事件触发器,我也尝试用一个简单的函数包装这个 testSecretManager
来处理 http 请求,并在我的浏览器端点测试它。简单函数本身工作正常,但每当我将与秘密管理器相关的任何内容插入该函数时,函数失败或页面显示它 Error: could not handle the request
。我的问题是,我是否必须用 HTTP 请求或任何其他事件处理函数包装 testSecretManager
才能触发我在 Cloud Function 中的目标函数?
我对 Cloud function 上的 package.json
文件很困惑,当我在 GCE 中使用 secret-manager 时,package-lock.json
有 600 多行,所以我尝试应对Cloud Function 上 package.json
的这些行,但它不起作用.....我的问题是,当我想要的只是 [=] 时,我应该在 package.json 中包含什么13=]包?
你混淆了系统包和节点包。系统包安装在主机上(例如 apt-get install
)。 NPM 包安装到 Node 中(例如 npm install
)。 您不应请求将 Secret Manager 添加到系统包中。
你的功能是混合同步和异步。因为你的testSecretManager
函数是同步的,你在helloHttp
中调用它的时候需要在前面加上await
。然后你需要将 helloHttp
标记为异步。如果这不起作用,请复制并粘贴确切的错误消息和堆栈跟踪。
package.json
和 package-lock.json
是具有不同语法的单独文件。 您不应该将锁定文件中的数据复制到您的包文件中。这里是an example您可以复制的:
"dependencies": {
"@google-cloud/secret-manager": "^3.1.0"
},
我已经为此工作了 2 天,对进展感到非常沮丧,任何关于我的 understanding/code/approach 可能有问题的指导将不胜感激!
我正在尝试使用 node.js 从 secret mananger 获取版本值,下面的脚本在 GCE 上运行良好,但是每当我 运行 它在 Cloud 函数上它就会失败。
// My script on GCE, it works fine
const { SecretManagerServiceClient } = require('@google-cloud/secret-manager');
const secretManagerServiceClient = new SecretManagerServiceClient();
const name = 'projects/moonhome/secrets/moonFirstSecret/versions/latest';
testSecretManager = async () => {
const [version] = await secretManagerServiceClient.accessSecretVersion({ name });
const payload = version.payload.data.toString();
console.debug(`Payload: ${payload}`);
};
testSecretManager();
// My index.js on Cloud Function
const { SecretManagerServiceClient } = require('@google-cloud/secret-manager');
const secretManagerServiceClient = new SecretManagerServiceClient();
const name = 'projects/moonhome/secrets/moonFirstSecret/versions/latest';
testSecretManager = async () => {
const [version] = await secretManagerServiceClient.accessSecretVersion({ name });
const payload = version.payload.data.toString();
console.debug(`Payload: ${payload}`);
};
exports.helloHttp = (req, res) => {
testSecretManager();
res.send("noooo1");
};
// One of many versions of packaga.json I tried on Cloud function
{
"dependencies": {
"@google-cloud/secret-manager": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/@google-cloud/secret-manager/-/secret-manager-3.1.0.tgz",
"integrity": "sha512-/9IOWEhKAz/r3kSyp16kjudELkEJSRhwFfzukKbzQehVRZ3RceNDzjn+Rti1TivODJHEEIBZVsQFsKp7cLfUgQ==",
"requires": {
"google-gax": "^2.1.0"
}
}
}
}
以下是我的问题:
我注意到在 Cloud Function 中 node.js 运行 时间有 list 个可用的系统包,所以我想知道是否是这个原因。我已经提交了将
@google-cloud/secret-manager
添加到 node.js 运行 时间的请求。但是,云函数文档中有一个使用escape-html
的示例,该列表中也没有。我的问题是,我应该请求将 secret-manager 包添加到 node.js 运行time 吗?由于 Cloud Function 需要一个事件触发器,我也尝试用一个简单的函数包装这个
testSecretManager
来处理 http 请求,并在我的浏览器端点测试它。简单函数本身工作正常,但每当我将与秘密管理器相关的任何内容插入该函数时,函数失败或页面显示它Error: could not handle the request
。我的问题是,我是否必须用 HTTP 请求或任何其他事件处理函数包装testSecretManager
才能触发我在 Cloud Function 中的目标函数?我对 Cloud function 上的
package.json
文件很困惑,当我在 GCE 中使用 secret-manager 时,package-lock.json
有 600 多行,所以我尝试应对Cloud Function 上package.json
的这些行,但它不起作用.....我的问题是,当我想要的只是 [=] 时,我应该在 package.json 中包含什么13=]包?
你混淆了系统包和节点包。系统包安装在主机上(例如
apt-get install
)。 NPM 包安装到 Node 中(例如npm install
)。 您不应请求将 Secret Manager 添加到系统包中。你的功能是混合同步和异步。因为你的
testSecretManager
函数是同步的,你在helloHttp
中调用它的时候需要在前面加上await
。然后你需要将helloHttp
标记为异步。如果这不起作用,请复制并粘贴确切的错误消息和堆栈跟踪。package.json
和package-lock.json
是具有不同语法的单独文件。 您不应该将锁定文件中的数据复制到您的包文件中。这里是an example您可以复制的:"dependencies": { "@google-cloud/secret-manager": "^3.1.0" },