Чтение из Secrets Manager в AWS лямбда-функции - PullRequest
0 голосов
/ 05 марта 2020

Я пытаюсь использовать пример кода Node.js, который AWS Secrets Manager предоставляет для чтения секретного значения, и помещаю этот код в функцию Lambda. Тем не менее я не могу войти в функцию, которая обрабатывает ответ от получения секретного значения.

Роль Lambda имеет разрешения AdministratorAccess, чтобы исключить проблему с разрешениями.

Lambda Код:

exports.handler = async (event) => {

// Load the AWS SDK
var AWS = require('aws-sdk'),
    region = "us-east-1",
    secretName = "/my-secrets/level1/level2",
    secret,
    decodedBinarySecret;

var client = new AWS.SecretsManager({
    region: region
});

console.log('above')

client.getSecretValue({SecretId: secretName}, function(err, data) {

    console.log('in')

    if (err) {
       throw err;
    }
    else {
        if ('SecretString' in data) {
            secret = data.SecretString;
        } else {
            let buff = new Buffer(data.SecretBinary, 'base64');
            decodedBinarySecret = buff.toString('ascii');
        }
    }

    console.log(secret)
});

console.log('below')

};

OUTPUT

2020-03-05T18:51:54.547Z    a3101875-a1f4-4b6f-ac62-3c2f93f5941f    INFO    above
2020-03-05T18:51:54.947Z    a3101875-a1f4-4b6f-ac62-3c2f93f5941f    INFO    below

Поскольку секрет существует, я ожидаю увидеть "in" и секретные строки на выходе. ... что мешает ему проникнуть внутрь этой функции?

1 Ответ

1 голос
/ 05 марта 2020

Измените ваш вызов на обещание:

const data = await client.getSecretValue({SecretId: secretName}).promise();

Проблема, с которой вы сталкиваетесь, заключается в том, что лямбда-прерывание завершается до выполнения вашего обратного вызова. AWS Обработчик лямбда-функции в Node.js

...