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

如何在AWS Lambda中读取AWS S3的CSV文件,print无输出如何解决?

问题原因及解决方案

核心问题原因

  • 直接打印csv.reader对象输出无效:csv.reader()返回的是可迭代的阅读器对象,直接打印只会输出对象的内存地址,不会输出CSV文件的实际内容,需要遍历迭代器才能读取内容。
  • S3事件中的对象Key未做URL解码:S3触发事件返回的object.key是经过URL编码的,若文件名包含空格、中文等特殊字符,直接使用该Key调用get_object会报404错误,触发异常后仅会打印错误信息,无法输出CSV内容。
  • Lambda执行角色缺少对应权限:如果Lambda的执行IAM角色没有目标S3桶的s3:GetObject权限,或者S3文件使用KMS加密时没有对应KMS密钥的解密权限,调用get_object会抛出权限异常,无法读取文件。
  • 未正确查看日志输出:Lambda的print语句输出会上报到CloudWatch日志组,Lambda控制台的默认执行结果页不会展示打印内容,需要进入对应CloudWatch日志流查看完整输出。

修正后代码

import json
import boto3
import csv
import urllib.parse

s3_client = boto3.client('s3')
def lambda_handler(event, context):
    try:
        bucket_name = event["Records"][0]["s3"]["bucket"]["name"]
        # 对S3返回的Key做URL解码,解决特殊字符的问题
        s3_file_name = urllib.parse.unquote_plus(event["Records"][0]["s3"]["object"]["key"], encoding='utf-8')
    
        csv_file = s3_client.get_object(Bucket=bucket_name, Key=s3_file_name)
        data = csv_file['Body'].read().decode('utf-8').splitlines(True)
        reader = csv.reader(data)
        # 遍历迭代器打印每一行CSV内容
        print("CSV文件内容:")
        for row in reader:
            print(row)
    except Exception as err:
        print("运行异常:", err)
    
    return {
        'statusCode': 200,
        'body': json.dumps('Hello from Lambda!')
    }

验证步骤

  1. 确认Lambda执行角色的IAM策略已添加对应S3桶的s3:GetObject权限,示例策略片段:
{
    "Effect": "Allow",
    "Action": "s3:GetObject",
    "Resource": "arn:aws:s3:::替换为你的桶名/*"
}
  1. 执行测试后,进入Lambda控制台的「监控」选项卡,点击「查看CloudWatch日志」,进入最新的日志流即可查看print输出的内容。
  2. 若S3文件使用KMS加密,还需要在执行角色策略中添加kms:Decrypt权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 13:54:04