簡體   English   中英

如何從 Nodejs 訪問 aws 參數存儲值並在以后使用它

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM