Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript getSecretValue回调在AWS Lambda中不起作用_Javascript_Amazon Web Services_Aws Lambda_Aws Kms_Aws Secrets Manager - Fatal编程技术网

Javascript getSecretValue回调在AWS Lambda中不起作用

Javascript getSecretValue回调在AWS Lambda中不起作用,javascript,amazon-web-services,aws-lambda,aws-kms,aws-secrets-manager,Javascript,Amazon Web Services,Aws Lambda,Aws Kms,Aws Secrets Manager,我正在尝试使用AWS sdk for Javascript从AWS Secret Manager检索Secret值,我正在使用Secret Manager提供的代码片段,我已经将此代码包含在Lambda函数中,但是我看不到回调函数中定义的任何控制台日志。以下是lambda代码: exports.handler = async (event, context) => { const AWS = require('aws-sdk'); const client = new AW

我正在尝试使用AWS sdk for Javascript从AWS Secret Manager检索Secret值,我正在使用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');

};

输出:

开始


结束

问题在于您已将函数处理程序指定为
async
。如果要使用回调,请使用旧样式的函数处理程序:

exports.handler = function(event, context, callback) {
  // ...
}
getSecretValue()
函数完成并有机会进行回调之前,代码已退出。因为您的函数是异步的,并且您没有返回承诺,所以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();
};

CloudWatch日志中有错误吗?我希望在日志中看到“开始”之后紧接着“结束”。这是JavaScript异步/回调工作方式的结果。“END”之后到“END RequestId:xxx”之前,您是否看到任何CloudWatch日志?END RequestId:xxx之前没有日志CloudWatch中没有错误Lambda是否在3秒后超时终止?我不确定decode_secret定义在哪里,但您可以使用let result=wait rc;返回结果;相反,@nachbar为您的方法提供另一个答案?@rainabba,我已经有一段时间没有看到这个答案了,但请看一下这个答案的以前版本(单击答案上的“编辑”链接),看看我的建议。