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

Wuu*_*ubb 3 asynchronous amazon-web-services node.js aws-lambda

我有 2 个 lambda,test1它们调用test2. 我想以test2“即发即忘”的心态异步调用。

下面是两个 lambda 表达式的代码。当我将 设置为InvocationTypeRequestResponse,该函数被调用并且在 CloudWatch 中有一个日志。当我将 更改为InvocationTypeEvent,CloudWatch 中没有被调用函数的记录。

测试1:

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;
};
Run Code Online (Sandbox Code Playgroud)

测试2:

exports.handler = async (event) => {
    console.log(event);
    return 'Success';
};
Run Code Online (Sandbox Code Playgroud)

IAM 策略包括调用权限(否则该RequestResponse类型也不起作用)。我还阅读了有关您可以传递的参数大小的限制,但在这种情况下,我只传递了“你好”......什么给出了?

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

编辑 2:我已经添加await到 的末尾test1,但仍然没有看到任何迹象表明在 CloudWatch 中调用了 test2。

ttu*_*lka 5

我认为只是await缺少:

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

    await lambda.invoke(params).promise();
};
Run Code Online (Sandbox Code Playgroud)

没有await承诺 fromlambda.invoke(params).promise()退出 lambda 执行而不解决该承诺。

因为 lambda 是异步调用的,所以没有返回结果。

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