AWS Lambda致电Lambda

时间:2018-04-06 12:56:56

标签: lambda

我试图从另一个Lambda函数中调用一个Lambda函数。我设置了我的权限,这不是问题。

我的问题是该函数不会等待Invoke函数完成并一直返回NULL。

以下是我使用的代码:

const AWS = require('aws-sdk');

exports.handler = async (event, context, callback) => {

    var lambda = new AWS.Lambda({region: 'us-east-1', apiVersion: '2015-03-31'});

    var params = {
        FunctionName: 'testFunction',
        InvocationType: 'RequestResponse'
    }
    lambda.invoke(params, function(err, data){
        console.log(err);
        console.log('here');
    }).promise().then(data=> { callback(null, {message:'done'}); });

};

{message:'done'}它从未显示过。建议我使用invokeAsync,但AWS不推荐使用该功能。

我知道问题是该函数正在同步运行lambda.invoke,因为如果我在lambda.invoke函数之外添加callback(null, {message:'done'});,那么我可以看到console.logs工作。

任何帮助?

1 个答案:

答案 0 :(得分:0)

TL; DR - 删除" async"在第3行,它应该工作。

您的问题似乎是由 async 关键字引起的。我重新创建了这个并将它部署到Lambda以在Node v8.10上运行(但指向它当然调用我自己的lambda函数之一)。

你为什么使用" async"在这里呢? async关键字声明定义了一个异步函数并返回一个AsyncFunction对象。预计AWS Lambda是一个函数,而不是AsyncFunction,而你的" null"结果可能只是Lambda立即放弃,因为它无法找到常规功能。此外,async几乎仅与await一起使用(至少在我见过的99%的情况下都是这样),并且因为您的代码不使用{{1}我根本没有看到任何使用await的理由。