Получите секреты в AWS lambda node.js

Может ли кто-нибудь предоставить простую и полную лямбда-функцию node.js, в которой я могу получить секрет из диспетчера секретов и использовать его? Я борюсь с процессом async/await. Я уже пробовал несколько предложений из других сообщений, но все они, в конце концов, не могут использовать секрет в основной функции. Например, у меня есть основная функция и я вызываю вторую функцию для получения секрета:

ххх = retrieve_secret('mysecret');

Затем в функции retrieve_secret я могу получить секрет, я могу распечатать его с помощью console.log, но когда я пытаюсь использовать его в основной функции, он говорит "Обещание".

Пожалуйста помоги. Заранее спасибо!

2 ответа

Решение

Итак, после нескольких дней работы над этим, я, наконец, смог решить эту проблему:) Вот код, который у меня сработал:

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 = .....

Глядя на ваш вопрос, кажется, что вы не можете прочитать ответ от метода retrieve_secret('mysecret'), поскольку вы упомянули, что он возвращает обещание, вы можете прочитать его, используя.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);
                }
            })
        );
    }
Другие вопросы по тегам