You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Node.js AWS Lambda中验证第一个Lambda已成功连接第二个Lambda

AWS Lambda跨函数调用异常及需求实现

场景与代码

我有两个AWS Lambda函数,第一个Lambda尝试调用第二个Lambda,第一个Lambda的代码如下:

try {
    const requestId = `${uuidv4()}` // 生成GUID,但无法确认调用是否成功

    lambda.invoke({
        FunctionName: `download-lambda-fn`,
        InvocationType: 'Event',
        Payload: JSON.stringify({
            path: `${APP_CONSTANTS.API_ENDPOINT_PREFIX}/download`,
            headers: { "Content-Type": "application/json" },
            body: JSON.stringify(req?.body),
            httpMethod: "POST"
        }),
    }).promise();  // 即发即弃调用,不等待第二个Lambda的响应

    console.log(`Your requestId : ${requestId} is being processed`); // 希望仅在成功建立连接/调用第二个Lambda时打印此消息

} catch (e) {
    console.log('error occured');
}

问题现象

  • 首次调用第二个Lambda时:部署后首次调用,生成GUID1xxx-xxx-xx-xx1,但第二个Lambda的CloudWatch始终无日志输出。
  • 后续调用第二个Lambda时:再次调用生成新GUID2xxx-xxx-xx-xx2,但实际执行的是1xxx-xxx-xx-xx1的请求,仅能看到该请求的日志,新请求无日志,此问题循环出现。

需求说明

仅在第一个Lambda成功与第二个Lambda建立连接时生成GUID,同时保持**即发即弃(fire and forget)**机制,不等待第二个Lambda的执行响应。

解决方案

代码修改要点

  1. 先等待Lambda服务确认接受调用请求(Event类型调用会立即返回,无需等待执行完成),再生成GUID。
  2. 使用await处理lambda.invoke().promise(),确保捕获调用过程中的错误,同时避免Lambda上下文提前结束导致请求丢失。
  3. 校验Lambda服务返回的状态码(202表示请求已被接受),确认调用成功后再生成GUID。

修改后的代码

try {
    // 发起调用并等待Lambda服务确认请求已被接受
    const invokeResponse = await lambda.invoke({
        FunctionName: `download-lambda-fn`,
        InvocationType: 'Event',
        Payload: JSON.stringify({
            path: `${APP_CONSTANTS.API_ENDPOINT_PREFIX}/download`,
            headers: { "Content-Type": "application/json" },
            body: JSON.stringify(req?.body),
            httpMethod: "POST"
        }),
    }).promise();

    // 仅当调用被成功接受时(返回202状态码),生成GUID并打印日志
    if (invokeResponse.StatusCode === 202) {
        const requestId = `${uuidv4()}`;
        console.log(`Your requestId : ${requestId} is being processed`);
    } else {
        console.log(`调用未被接受,状态码:${invokeResponse.StatusCode}`);
    }
} catch (e) {
    console.log('调用发生错误:', e);
}

额外排查项

  • 确保第一个Lambda的执行角色拥有lambda:InvokeFunction权限,目标函数为download-lambda-fn。
  • 检查第二个Lambda是否配置了CloudWatch Logs权限,以及是否有足够的并发资源处理请求。

内容的提问来源于stack exchange,提问作者micronyks

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 10:51:31