如何正确读取通过API Gateway发送到AWS Lambda的CSV格式时间序列数据?
问题排查与解决
报错根因
你遇到的KeyError: 'body'报错的核心原因是Lambda收到的event对象中不存在body字段,常见触发场景有三类:
- 你用GET请求调用API Gateway,GET请求本身没有请求体,自然不会携带
body字段 - API Gateway没有配置Lambda代理集成,请求字段没有正确映射到Lambda的event对象中
- 直接在Lambda控制台测试时,测试事件没有手动添加
body字段和对应的CSV内容
就算body字段存在,直接把字符串格式的body传给pd.read_csv()也会报错:read_csv默认接收文件路径或类文件对象,不能直接解析CSV字符串。另外你原有代码的lambda_handler函数定义末尾缺少冒号,会触发语法错误。
修复后的完整实现
import pandas as pd from io import StringIO import base64 def lambda_handler(event, context): # 校验请求体是否存在 if 'body' not in event: return { 'statusCode': 400, 'body': '请求缺少CSV数据' } # 处理二进制编码场景:如果API Gateway开启了二进制支持,body会是base64编码 csv_raw = event['body'] if event.get('isBase64Encoded', False): csv_raw = base64.b64decode(csv_raw).decode('utf-8') # 将CSV字符串包装为类文件对象后传入pandas解析 data = pd.read_csv( StringIO(csv_raw), index_col='time', parse_dates=['time'] ) # 此处添加你的业务逻辑 return { 'statusCode': 200, 'body': f'解析完成,共读取{len(data)}条时间序列记录' }
配套配置校验
- API Gateway侧配置为POST请求方法,集成类型选择「Lambda代理集成」
- 提交CSV时请求头的
Content-Type设置为text/csv - 若CSV体积超过3MB,建议调高Lambda的内存配置和超时时间,避免解析超时
- 确保提交的CSV文件包含
time列,否则会触发列不存在的解析错误
内容的提问来源于stack exchange,提问作者Fep Ojov
相关产品推荐
相关产品推荐

