簡體   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