kzr*_*sal 7 javascript amazon-web-services aws-lambda aws-kms aws-secrets-manager
我正在尝试使用 aws-sdk for Javascript 从 AWS Secret Manager 检索秘密值,我正在使用 Secret Manager 提供的代码片段,我已将此代码包含在 Lambda 函数中,但我看不到任何已定义的控制台日志回调函数里面。这是 lambda 代码:
exports.handler = async (event, context) => {
const AWS = require('aws-sdk');
const client = new AWS.SecretsManager({ region: "eu-west-2" });
let secret;
let decodedBinarySecret;
console.log('STARTED');
client.getSecretValue({ SecretId: "MagellanDev" }, function (err, data) {
if (err) {
console.log('Got Error: ', err.code);
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: ", secret);
console.log("DECODEBINARYSECRET: ", decodedBinarySecret)
});
console.log('ended');
};
Run Code Online (Sandbox Code Playgroud)
输出:
开始
结束
问题是您已将函数处理程序指定为async. 如果要使用回调,请使用旧样式的函数处理程序:
exports.handler = function(event, context, callback) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
代码在getSecretValue()函数完成之前退出,并有机会进行回调。并且因为您的函数是async并且您没有返回 Promise,所以 Lambda 运行时不会等待。
我会远离旧的回调式代码,转而使用较新的异步/等待式代码,例如:
const AWS = require('aws-sdk');
const client = new AWS.SecretsManager({region: 'us-east-1'});
exports.handler = async (event, context) => {
const params = {SecretId: secretName};
return client.getSecretValue(params).promise();
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2331 次 |
| 最近记录: |