Lambda调用DynamoDB Scan报错却返回正确记录的原因咨询
问题原因解析
报错的直接原因
你的DynamoDB Scan请求里,把:nitin_nature指定为数值类型({'N': search_term}),但CloudWatch触发时传入的search_term并不是合法的数值(比如是字符串格式的数字,或者完全非数字的内容),DynamoDB无法将其转换为数值类型,因此抛出ValidationException。
为何Function URL访问能正常返回?
有两种最可能的情况:
- 输入参数类型不一致:Function URL触发时,传入的
search_term是真正的数值类型(不是字符串),满足DynamoDB对N类型值的要求,所以Scan请求能顺利执行并返回正确数据。 - 错误处理逻辑兜底:你的Lambda函数里大概率写了
try-except代码块,捕获了这个ClientError,并在报错后执行了备用逻辑——比如改用字符串匹配规则、返回提前缓存的正确数据,或者直接跳过错误返回已有结果,所以即便CloudWatch触发时报错,函数依然能执行完成并返回内容。
验证方法
- 分别打印两种触发场景下
search_term的类型和具体值,确认参数差异。 - 检查函数代码中的异常处理部分,看是否存在针对该错误的兜底逻辑。
内容的提问来源于stack exchange,提问作者shantanuo
相关产品推荐
相关产品推荐

