我正在嘗試決議來自aws secretsmanager
輸出如下所示:
{
"ARN": "arn:aws:secretsmanager:us-west-2:0000:secret:token-0000",
"Name": "token",
"VersionId": "0000-0000-0000-0000-0000",
"SecretString": "{\"TOKEN\":\"000000000000\"}",
"VersionStages": ["AWSCURRENT"],
"CreatedDate": "0000"
}
嘗試使用 決議此字串時JSON.parse(),它會嘗試決議SecretString已轉義引號的字串值。
我本來希望需要JSON.parse分兩個步驟來回應,但這不起作用。
#!/bin/bash
TOKEN=$(node -e "\
const result = JSON.parse('$(aws secretsmanager get-secret-value --secret-id $ARN)'); \
const token = JSON.parse(result.SecretString); \
console.log(token); \
")
echo $TOKEN
如何防止JSON.parse函式嘗試決議的字串值SecretString- 或者,是否有更好的方法來獲取該值?
uj5u.com熱心網友回復:
JSON.parse不會嘗試決議包含在已決議物件中的 JSON 編碼字串,因此我認為這不是導致您的問題的原因。這更有可能與 shell 對引號的處理有關。
我認為更好的方法是讓你的 Node 腳本aws使用 呼叫 CLI child_process.execFile,而不是讓 shell 呼叫aws并將結果傳遞給 Node.js。
如果您需要ARN從 Node 訪問變數,您可以使用process.env.ARN.
這是一些應該可以解決問題的代碼:
async function main()
{
const child_process = require('child_process');
const util = require('util');
const execFile = util.promisify(child_process.execFile);
const json = (await execFile('aws', ['secretsmanager', 'get-secret-value', '--secret-id', process.env.ARN])).stdout;
const result = JSON.parse(json);
const token = result.SecretString;
console.log(token);
}
main();
如果您需要做更多此類事情,可能值得查看適用于 NodeJS 的 AWS 開發工具包。即使使用execFile,以這種方式以編程方式使用 CLI 工具仍然存在一些缺陷,尤其是當您需要將 JSON 傳遞到CLI 工具時。
uj5u.com熱心網友回復:
你可以做:
const json = {
"ARN": "arn:aws:secretsmanager:us-west-2:0000:secret:token-0000",
"Name": "token",
"VersionId": "0000-0000-0000-0000-0000",
"SecretString": "{\"TOKEN\":\"000000000000\"}",
"VersionStages": ["AWSCURRENT"],
"CreatedDate": "0000"
}
json.SecretString = JSON.parse(json.SecretString)
const { SecretString: { TOKEN: token } } = json
console.log('Token:', token)
uj5u.com熱心網友回復:
嘗試使用單引號而不是雙引號作為 JSON 的字串值
{
"ARN": 'arn:aws:secretsmanager:us-west-2:0000:secret:token-0000',
"Name": 'token',
"VersionId": '0000-0000-0000-0000-0000',
"SecretString": '{\"TOKEN\":\"000000000000\"}',
"VersionStages": ['AWSCURRENT'],
"CreatedDate": '0000'
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/486392.html
標籤:javascript 节点.js
上一篇:型別'number'與型別'FindOneOptions<Client>'沒有共同的屬性
下一篇:如何從fs.unlink回傳承諾
