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

如何使用Python编写的Lambda函数将文件上传到Amazon S3?

代码存在的核心问题
  • 入口函数未触发上传逻辑:lambda_handler 是Lambda函数的默认执行入口,你仅在该函数内定义了文件路径和桶名两个变量,没有调用upload_file函数,上传逻辑全程不会执行。
  • 缩进语法错误:Python依赖缩进区分代码块,当前upload_file函数下的所有逻辑都没有正确缩进,不属于函数体内容,代码本身存在语法错误,无法正常运行。
  • 本地路径在Lambda环境无效:Lambda运行在AWS的隔离执行环境中,不存在你本地的/Users/thesadmermaid/Downloads/grafico.csv路径,无法读取到对应文件。如果需要用到该文件,需要把文件和代码一起打包上传到Lambda,部署后通过相对路径读取;如果是运行时生成的文件,需要写入Lambda唯一可写的临时目录/tmp。
  • S3桶名不符合命名规范:AWS S3桶名强制要求全小写,不允许出现大写字母,你使用的Transitory-lambda-data包含大写字母,属于非法桶名,访问时会直接报错。
  • 缺少必要IAM权限:Lambda的执行角色需要附加包含s3:PutObject权限的策略,否则即使代码逻辑正确也会因权限不足上传失败。
修正后可运行的参考代码
import boto3
import os
import logging

# 初始化s3客户端放在函数外,复用连接提升性能
s3_client = boto3.client('s3')
logger = logging.getLogger()
logger.setLevel(logging.INFO)

def upload_file(file_name, bucket, object_name=None):  
    if object_name is None:
        object_name = os.path.basename(file_name)
    try:
        response = s3_client.upload_file(file_name, bucket, object_name)
        logger.info(f"文件{object_name}上传成功")
        return response
    except Exception as e:
        logger.error(f"文件上传失败,错误信息:{str(e)}")
        raise e

def lambda_handler(event, context):
    # 如果你把grafico.csv和代码打包在一起,这里写相对路径./grafico.csv
    file_name = "./grafico.csv"
    # 替换为全小写的合法桶名
    bucket = "transitory-lambda-data"
    # 调用上传函数执行上传逻辑
    return upload_file(file_name, bucket)

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

相关产品推荐
方舟 Agent Plan

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

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