[英]how to access aws parameter store value from Nodejs and use it later
我有一個要求,我想訪問參數存儲值,然后再使用它。 這就是我的做法:
var options = {
Name: 'SecretAccessKey_temp',
WithDecryption: true
};
var secreretAccesKeyParam = ssm.getParameter(options).promise();
secreretAccesKeyParam.then(function (data, err) {
if (err) console.log(err, err.stack);
else {
const secretAccessKey = data.Parameter.Value
console.log(secretAccessKey)
}
});
這給了我價值,但如果我想在此之外訪問secretAccessKey變量,它會給我“未定義”。 誰能幫我訪問這個function 之外的這個 secretAccessKey變量?
由於您的變量secreretAccesKeyParam
是 promise,因此您將無法訪問 promise 處理程序(例如function (data, err) {...}
)的上下文(例如secretAccessKey
)。 根據 promise 的定義,這樣做:
const myPromise = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('foo');
}, 300);
});
var myRes = 'bar';
myPromise.then(dunction (data, err) {
myRes = data;
console.log(myRes); // executed asynchronously
});
console.log(data); // executed sychronously so printed first. myRes value is still 'bar'.
會給你output:
'bar'
'foo'
如果您想像處理同步一樣處理事情,您可能想要做的是使用異步 function。
var options = {
Name: 'SecretAccessKey_temp',
WithDecryption: true
};
var secreretAccesKeyParam = ssm.getParameter(options).promise();
(async () => {
try {
const data = await secreretAccesKeyParam;
} catch (err) {
console.log(err, err.stack);
}
const secretAccessKey = data.Parameter.Value;
console.log(secretAccessKey);
... // any action with your secret access key
})();
或者,如果您稍后已經在使用處理程序 function:
let _secretAccessKey;
const getSecretAccessKey = async () => {
if (!_secretAccessKey) {
try {
const data = await secreretAccesKeyParam;
} catch (err) {
console.log(err, err.stack);
return null;
}
_secretAccessKey = data.Parameter.Value;
}
return Promise.resolve(_secretAccessKey);
}
...
async function mySuperHandler() {
const secretAccessKey = await getSecretAccessKey();
// do something with the secret
}
將其設置為 env 怎么樣? 我目前使用此方法,但您必須確保在使用前設置了 env。
secreretAccesKeyParam.then(function (data, err) {
if (err) console.log(err, err.stack);
else {
process.env.secretAccessKey = data.Parameter.Value;
const secretAccessKey = process.env.secretAccessKey;
console.log(secretAccessKey);
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.