【问题标题】:How to return secret from getSecretValue with AWS secret manager?如何使用 AWS 秘密管理器从 getSecretValue 返回秘密?
【发布时间】:2022-08-16 20:34:49
【问题描述】:

我正在尝试使用 AWS 控制台中的示例代码从 AWS 机密管理器获取我的机密。但在函数结束时,它返回未定义的值。另一方面,当我在 getSecretValue 中记录秘密时,它会返回正确的值

    const env = require(\"../SharedExternalDependencies/node_modules/dotenv\");
process.env.AWS_SDK_LOAD_CONFIG = \"true\";
var AWS = require(\"../SharedExternalDependencies/node_modules/aws-sdk\"),
  region = \"eu-west-1\",
  secretName = \"********\",
  secret,
  decodedBinarySecret;
exports.getCredentials = (event, context, callback) => {
  // Create a Secrets Manager client
  var client = new AWS.SecretsManager({
    region: region,
  });


  client.getSecretValue({ SecretId: secretName }, function (err, data) {
    if (err) {
        throw err;
    } else {
      if (\"SecretString\" in data) {
        secret = data.SecretString;
        secret = JSON.parse(secret);
        console.log(secret) // return the correct value 
      } else {
        let buff = new Buffer(data.SecretBinary, \"base64\");
        decodedBinarySecret = buff.toString(\"ascii\");
      }
    }
  });
  console.log(secret) // return undefined 
};

    标签: javascript node.js amazon-web-services aws-secrets-manager


    【解决方案1】:

    这是预期的回调行为。我会将其细化为:

    var result;
    
    callbackFunc(function(err, data) {
      // executes second, after the 'console.log' below
      result = data;
    })
    // executes first, before data has returned
    console.log(result);
    

    如果您继续使用回调,则保证值的唯一方法是引用“callbackFunc”中的变量。你可以将其转换为承诺。只是语法不同

    const myPromise = new Promise(function(resolve, reject) {
      callbackFunc(function(err, data) {
        if (err) { reject(err) }
        else { resolve(data) }
      })
    })
    
    myPromise.then(function(data) { doSomethingWithData(data) }
    

    【讨论】:

      猜你喜欢
      • 2020-10-01
      • 2020-12-04
      • 2021-03-15
      • 2020-10-13
      • 2021-01-19
      • 2023-02-07
      • 2022-11-02
      • 1970-01-01
      • 2019-12-03
      相关资源
      最近更新 更多