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

如何正确读取通过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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 02:54:02