3

任何人都可以提供一个简单、完整的 node.js lambda 函数,我可以从秘密管理器中获取一个秘密并使用它吗?我正在努力处理异步/等待过程。我已经尝试了其他帖子的几个建议,但最后,所有这些建议都不能真正使用 main 函数中的秘密。例如,我有一个 main 函数并调用第二个函数来检索秘密:

xxx = retrieve_secret('mysecret');

然后,在retrieve_secret 函数中,我可以检索秘密,我可以使用console.log 打印它,但是当我尝试在主函数中使用它时,它会显示“Promise”。

请帮忙。提前致谢!

4

2 回答 2

8

所以,经过几天的努力,我终于能够解决它:)这是对我有用的代码:

exports.handler = async (event, context, callback) => {

   // Get Secret
   var AWS       = require('aws-sdk');
   var MyPromise = new AWS.SecretsManager();

   var Vsecret   = await MyPromise.getSecretValue({
      SecretId: 'enter-the-secret-id-here'
      }).promise();

   var MyOpenSecret = JSON.parse(Vsecret.SecretString);

   // From here, we can use the secret:
   var Vhost     = MyOpenSecret.host;
   var Vuser     = MyOpenSecret.username;
   var Vpassword = MyOpenSecret.password; 
   var Vdatabase = .....
于 2020-05-15T00:27:01.067 回答
0

看着您的问题,您似乎无法从retrieve_secret('mysecret') 方法中读取响应,因为您已经提到它返回promise,您可以在promise 之后使用.then() 来读取它。尝试这样做 -

xxx.then(res => {
    console.log(res)
})

或者这里是调用获取您的秘密详细信息的代码:

import AWS from "aws-sdk";

getSecretValue(secretName: string): Promise<string> {
        const client = new AWS.SecretsManager({ 
            region: '',
            accessKeyId: '',
            secretAccessKey: '',
        });
        const secretId = "secretName";
        return new Promise((resolve, reject) =>
            client.getSecretValue({ SecretId: secretId }, (err, data) => {
                if (err) {
                    reject(err);
                } else {
                    resolve(data.SecretString);
                }
            })
        );
    }
于 2020-05-12T06:19:28.427 回答