使用“事件”调用类型时未调用AWS Lambda

时间:2019-03-21 13:53:59

标签: node.js amazon-web-services asynchronous aws-lambda

我有2个lambda,test1,它调用test2。我想以“一劳永逸”的思路异步调用test2

下面是两个lambda的代码。当我将InvocationType设置为RequestResponse时,该函数被调用,并且CloudWatch中存在日志。当我将InvocationType更改为Event时,CloudWatch中没有被调用函数的记录。

test1:

const AWS = require('aws-sdk');
const lambda = new AWS.Lambda();

exports.handler = async (event) => {
    const params = {
        'FunctionName': 'test2',
        'InvocationType': 'Event',
        'Payload': JSON.stringify('Hello')
    };

    const response = await lambda.invoke(params).promise();
    return response;
};

test2:

exports.handler = async (event) => {
    console.log(event);
    return 'Success';
};

IAM策略包含调用权限(否则RequestResponse类型也不起作用)。我也读过关于limits on the size of the args you can pass的信息,但是在这种情况下,我只传递了“ Hello”……给出了什么?

编辑:我还应该补充一点,在每种情况下,我都会得到一个响应代码202,表示调用成功,我只是看不到日志中正在执行该函数的证据。

编辑2:我已经在await的末尾添加了test1,但是仍然看不到任何指示在CloudWatch中调用了test2。

2 个答案:

答案 0 :(得分:0)

我认为仅缺少await

exports.handler = async (event) => {
    const params = {
        'FunctionName': 'test2',
        'InvocationType': 'Event',
        'Payload': JSON.stringify('Hello')
    };

    await lambda.invoke(params).promise();
};

在没有await的情况下,lambda.invoke(params).promise()的承诺将退出lambda执行,而不会解决该承诺。

由于lambda是异步调用的,因此不会返回任何结果。

您可以检查test2 lambda的CloudWatch日志以查看是否已被调用。

答案 1 :(得分:0)

好的,现在我在Cloudwatch中看到调用该函数的日志。以前,即使添加了await,我也没有得到它们,但是由于某种原因,它现在可以工作了。

谢谢大家的帮助。