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

通过API Gateway调用Lambda时DynamoDB.put失败,测试配置正常

问题分析:API Gateway触发Lambda写入DynamoDB时出现参数缺失错误

这个问题我碰到过好几次了,核心原因是API Gateway和Lambda测试环境传递event.body的格式完全不一样:

  • 你在Lambda控制台测试时,直接传入的event.body是一个JavaScript对象,所以dynamodb.put(event.body)能正常识别TableName和Item这些参数;
  • 但通过API Gateway发送POST请求时,哪怕你发送的是JSON格式的请求体,API Gateway都会自动把它转换成JSON字符串存在event.body里。这时候你直接把字符串传给dynamodb.put(),DynamoDB客户端自然找不到需要的TableName和Item键——它拿到的只是一串文本,不是包含这些键的对象。

解决方案:解析JSON字符串为对象

只需要在Lambda函数里新增一步,把event.body从字符串解析成JavaScript对象,再传给DynamoDB的put方法即可。修改后的代码如下:

const AWS = require('aws-sdk');
const dynamodb = new AWS.DynamoDB.DocumentClient({region: 'eu-west-1'});
exports.handler = async (event) => {
    try {
        console.log("event.body contents", event.body);
        console.log("Inserting into DynamoDb...");
        // 关键步骤:将JSON字符串解析为对象
        const putParams = JSON.parse(event.body);
        await dynamodb.put(putParams).promise();
        return {
            statusCode: 200,
            body: JSON.stringify({message: 'Success'})
        };
    } catch (error) {
        console.error("Error processing request:", error);
        return {
            statusCode: 400,
            body: JSON.stringify({message: 'Invalid request body', error: error.message})
        };
    }
};

额外提醒

建议加上try-catch块处理解析失败的情况(比如用户发送的请求体不是合法JSON),这样能返回更友好的错误响应,避免函数直接抛出未处理的异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 14:03:10