繁体   English   中英

如何访问 Cloud Function node.js10 中的 Secret Manager?

[英]How to access Secret Manager in Cloud Function node.js10?

我已经为此工作了 2 天,对进展感到非常沮丧,对于我的理解/代码/方法可能有什么问题的任何指导将不胜感激!

我正在尝试使用 node.js 从秘密管理器获取版本值,下面的脚本在 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"
      }
    }
  }
}

以下是我的问题:

  1. 我注意到 Cloud Function 中 node.js 运行时上有一个可用系统包的列表,所以我想知道这是否是原因。 我已经提交了将@google-cloud/secret-manager到 node.js 运行时的请求。 但是,在 Cloud Function 文档中有一个示例,其中使用了escape-html ,该列表中也没有。 我的问题是,在我的情况下,我应该请求将 secret-manager 包添加到 node.js 运行时吗?

  2. 由于 Cloud Function 需要一个事件触发器,我还尝试用一个简单的函数包装这个testSecretManager来处理 http 请求并在我的浏览器的端点上对其进行测试。 简单函数本身工作正常,但是每当我将与秘密管理器相关的任何内容插入该函数时,该函数要么失败,要么页面显示它Error: could not handle the request 我的问题是,我是否必须使用 HTTP 请求或任何其他事件处理函数来包装testSecretManager才能在 Cloud Function 中触发我的目标函数?

  3. 我对 Cloud 函数上的package.json文件很困惑,当我在 GCE 中使用 secret-manager 时, package-lock.json有 600 多行,所以我尝试将这些行复制到 Cloud Function 上的package.json ,但它不起作用.....我的问题是,当我想要的只是@google-cloud/secret-manager包时我应该在 package.json 中包含什么?

  1. 你混淆了系统包和节点包。 系统包安装在主机上(例如apt-get install )。 NPM 包安装到 Node 中(例如npm install )。 您不应请求将机密管理器添加到系统包中。

  2. 你的功能是混合同步和异步。 由于您的testSecretManager函数是同步函数,因此在helloHttp调用它时需要以await helloHttp 然后您需要将helloHttp标记为异步。 如果这不起作用,请复制并粘贴确切的错误消息和堆栈跟踪。

  3. package.jsonpackage-lock.json是具有不同语法的独立文件。 您不应将锁定文件中的数据复制到您的包文件中。 这是您可以复制的示例

     "dependencies": { "@google-cloud/secret-manager": "^3.1.0" },

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM