Получите секреты в 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);
}
})
);
}