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

在AWS Lambda中使用boto3实现S3桶间Excel文件读写的技术问询

在AWS Lambda中用boto3实现S3 Excel文件的读取与写入

嘿,看你正在尝试用Lambda + boto3完成S3桶之间的Excel文件传输,我帮你把代码补全并优化一下——其实不用把文件存到Lambda的临时目录,直接用字节流处理更高效,还能避免文件操作的坑。

完整可运行代码

import boto3
import io

def lambda_handler(event, context):
    # 初始化S3客户端(用client比resource在这种场景下更灵活)
    s3 = boto3.client('s3')
    
    # 替换成你的实际桶名和文件名
    source_bucket = '<first_bucket>'
    source_file = '<file_name>.xlsx'
    target_bucket = '<second_bucket>'
    target_file = '<file_name>.xlsx'  # 可以改成新文件名,比如processed_<file_name>.xlsx
    
    try:
        # 1. 从源S3桶读取Excel文件到字节流
        file_response = s3.get_object(Bucket=source_bucket, Key=source_file)
        excel_data = file_response['Body'].read()
        
        # 如果你需要处理Excel内容(比如修改数据),可以在这里加逻辑
        # 举个用pandas处理的例子(需要在Lambda层添加pandas和openpyxl依赖):
        # import pandas as pd
        # df = pd.read_excel(io.BytesIO(excel_data))
        # # 这里写你的数据处理逻辑,比如筛选、修改列等
        # processed_data = io.BytesIO()
        # df.to_excel(processed_data, index=False, engine='openpyxl')
        # processed_data.seek(0)  # 把指针移回文件开头,不然写入S3会是空的
        
        # 2. 将内容写入目标S3桶
        # 如果有处理过,就把Body改成processed_data.getvalue()
        s3.put_object(
            Bucket=target_bucket,
            Key=target_file,
            Body=excel_data
        )
        
        return {
            'statusCode': 200,
            'body': f"搞定!文件 {source_file} 已经从 {source_bucket} 传到 {target_bucket} 啦"
        }
    
    except Exception as err:
        print(f"出问题啦: {str(err)}")
        return {
            'statusCode': 500,
            'body': f"错误详情:{str(err)}"
        }

几个关键提示

  • 跳过本地文件操作:直接用字节流读取和写入,比存到/tmp目录更高效,还能避免二进制文件用文本模式打开导致的损坏问题(你原代码里with open如果用w而不是wb就会踩这个坑)
  • 极简复制方案:如果只是单纯复制文件不需要处理内容,用S3的copy_object更省事儿,连字节流都不用读:
s3.copy_object(
    Bucket=target_bucket,
    Key=target_file,
    CopySource={'Bucket': source_bucket, 'Key': source_file}
)
  • 权限检查:虽然你说已经给了全S3权限,但要确认Lambda角色的信任策略是允许Lambda服务扮演这个角色的,不然会有权限报错
  • 处理Excel依赖:如果要修改Excel内容,记得给Lambda添加pandas和openpyxl(或xlrd)的依赖,最好用Lambda层来打包,避免代码包过大

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:42:39