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

AWS Lambda运行S3列桶代码报lambda_handler缺失,是否必须定义该函数?

问题解答

首先明确回答核心疑问:AWS Lambda没有强制要求处理函数必须命名为lambda_handler,但所有Lambda代码必须配置一个对应的入口处理函数作为触发执行的入口。

报错原因

你当前的所有业务逻辑都写在模块顶层,Lambda在加载代码模块的时候,顶层代码会优先执行,因此你可以在日志中看到正常输出的存储桶列表。但模块加载完成后,Lambda会按照默认配置的处理程序路径尝试调用入口函数,默认配置的处理程序是lambda_function.lambda_handler,也就是在lambda_function.py模块中查找名为lambda_handler的函数,你没有定义该函数,因此抛出错误:

Handler 'lambda_handler' missing on module 'lambda_function'

修复方案

可任选一种方案处理:

  • 方案1:保持默认的处理程序配置,在代码中补充lambda_handler函数,把业务逻辑封装到函数内部:
import boto3
import botocore

s3 = boto3.client('s3')

def lambda_handler(event, context):
    response = s3.list_buckets()
    print('Existing buckets:')
    for bucket in response['Buckets']:
        print(f'  {bucket["Name"]}')
  • 方案2:自定义处理函数名称,同步修改Lambda运行时设置。比如你把入口函数命名为list_s3_buckets,就可以在Lambda控制台的「运行时设置」中,把「处理程序」配置修改为lambda_function.list_s3_buckets即可。

注意事项

不管你如何命名入口处理函数,都必须在函数定义中接收两个入参:event(存储触发事件的入参数据)和context(存储Lambda运行时的上下文信息),哪怕你的业务逻辑不需要用到这两个参数,也必须在函数声明中保留参数位。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 15:39:03