[英]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"
}
}
}
}
以下是我的問題:
我注意到 Cloud Function 中 node.js 運行時上有一個可用系統包的列表,所以我想知道這是否是原因。 我已經提交了將@google-cloud/secret-manager
到 node.js 運行時的請求。 但是,在 Cloud Function 文檔中有一個示例,其中使用了escape-html
,該列表中也沒有。 我的問題是,在我的情況下,我應該請求將 secret-manager 包添加到 node.js 運行時嗎?
由於 Cloud Function 需要一個事件觸發器,我還嘗試用一個簡單的函數包裝這個testSecretManager
來處理 http 請求並在我的瀏覽器的端點上對其進行測試。 簡單函數本身工作正常,但是每當我將與秘密管理器相關的任何內容插入該函數時,該函數要么失敗,要么頁面顯示它Error: could not handle the request
。 我的問題是,我是否必須使用 HTTP 請求或任何其他事件處理函數來包裝testSecretManager
才能在 Cloud Function 中觸發我的目標函數?
我對 Cloud 函數上的package.json
文件很困惑,當我在 GCE 中使用 secret-manager 時, package-lock.json
有 600 多行,所以我嘗試將這些行復制到 Cloud Function 上的package.json
,但它不起作用.....我的問題是,當我想要的只是@google-cloud/secret-manager
包時,我應該在 package.json 中包含什么?
你混淆了系統包和節點包。 系統包安裝在主機上(例如apt-get install
)。 NPM 包安裝到 Node 中(例如npm install
)。 您不應請求將機密管理器添加到系統包中。
你的功能是混合同步和異步。 由於您的testSecretManager
函數是同步函數,因此在helloHttp
調用它時需要以await
helloHttp
。 然后您需要將helloHttp
標記為異步。 如果這不起作用,請復制並粘貼確切的錯誤消息和堆棧跟蹤。
package.json
和package-lock.json
是具有不同語法的獨立文件。 您不應將鎖定文件中的數據復制到您的包文件中。 這是您可以復制的示例:
"dependencies": { "@google-cloud/secret-manager": "^3.1.0" },
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.