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

Python AWS Lambda如何处理S3上传文件?求实现示例

S3上传JSON后自动转CSV的Lambda实现方案

Lambda工作逻辑说明

当文件上传到S3指定桶时,S3会发送事件通知给关联的Lambda函数。Lambda不需要手动指定要处理的文件,而是从这个事件通知里提取上传文件的桶名、文件路径(键),自动完成后续处理。

完整Lambda代码示例

import boto3
import pandas as pd
import io

def lambda_handler(event, context):
    # 从S3事件中提取上传文件的信息
    s3_event = event['Records'][0]['s3']
    source_bucket = s3_event['bucket']['name']
    source_key = s3_event['object']['key']

    # 跳过非JSON格式文件
    if not source_key.endswith('.json'):
        return f"跳过非JSON文件:{source_key}"

    # 初始化S3客户端
    s3_client = boto3.client('s3')

    # 读取S3中的JSON文件
    try:
        json_object = s3_client.get_object(Bucket=source_bucket, Key=source_key)
        json_content = json_object['Body'].read()
    except Exception as e:
        return f"读取JSON文件失败:{str(e)}"

    # 解析JSON并转换为CSV
    try:
        df = pd.read_json(io.BytesIO(json_content))
        csv_buffer = io.StringIO()
        df.to_csv(csv_buffer, index=False)
    except Exception as e:
        return f"JSON转CSV失败:{str(e)}"

    # 生成CSV文件名(替换原扩展名)
    target_key = source_key.rsplit('.', 1)[0] + '.csv'

    # 将CSV上传回S3(可修改为其他桶)
    try:
        s3_client.put_object(
            Bucket=source_bucket,
            Key=target_key,
            Body=csv_buffer.getvalue()
        )
        return f"转换成功:{target_key}"
    except Exception as e:
        return f"上传CSV失败:{str(e)}"

关键配置步骤

  • 准备Lambda层:Lambda默认环境没有pandas,需要把pandas及其依赖包打包成Lambda层,或者使用AWS提供的公共pandas层(注意匹配Python版本)。
  • 配置S3触发:打开目标S3桶的「事件通知」,添加新通知:
    • 事件类型选择「所有对象创建事件」
    • 目标选择「Lambda函数」,关联你创建的Lambda
  • 配置Lambda权限:给Lambda的执行角色添加以下IAM权限:
    • s3:GetObject:允许读取源桶的JSON文件
    • s3:PutObject:允许写入CSV文件到目标桶(可与源桶为同一个)

注意事项

  • Lambda临时存储有限,全程用内存缓冲区(io.BytesIO/io.StringIO)处理文件,不要写入本地文件
  • 可通过修改target_key或Bucket参数,将CSV文件保存到不同的S3桶或路径
  • 测试时可用Lambda控制台的「测试事件」功能,模拟S3上传事件验证代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 18:01:06