簡體   English   中英

如何使用 AWS 秘密管理器從 getSecretValue 返回秘密?

[英]How to return secret from getSecretValue with AWS secret manager?

我正在嘗試使用 AWS 控制台中的示例代碼從 AWS 密鑰管理器獲取我的密鑰。 但在 function 的末尾,它返回未定義的值。 另一方面,當我在 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 
};

這是預期的回調行為。 我會將其細化為:

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”中的變量。 可以將其轉換為 promise。 只是語法不同

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

myPromise.then(function(data) { doSomethingWithData(data) }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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