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

AWS Lambda添加lambda_handler后函数无响应无报错排查

核心问题

你遇到的无反馈问题首先是Python缩进语法错误导致的:
Python依靠缩进划分代码块,你当前代码中def lambda_handler(event, context):下方的所有业务逻辑(初始化ZenRowsClient、发送请求、打印结果)都没有做函数级缩进,会被Python识别为全局作用域代码,完全不属于入口函数的执行范围。
这也刚好解释了你遇到的现象:

  • 不写lambda_handler时,整个文件都是全局逻辑,直接运行Python文件会从上到下顺序执行,ZenRows请求可以正常发起
  • 加上入口函数后,lambda_handler实际是个空函数,Lambda触发时执行完空函数直接退出,不会跑任何爬取逻辑;全局代码仅在Lambda实例冷启动的加载阶段执行一次,产生的输出会因为函数快速退出无法被日志系统完整采集,所以看起来既没有执行结果也没有报错。
其他必须排查的配置问题
  • 执行超时配置:Lambda默认超时时间是3秒,网页爬取场景很容易触发超时,测试阶段先把超时时间调整到10秒以上。
  • 网络配置:如果Lambda部署在自定义VPC内,必须配置NAT网关才能访问公网发起ZenRows请求,否则请求会直接卡死超时。
  • 入口配置:确认Lambda控制台的Handler配置和代码文件名、函数名匹配,比如代码文件名为lambda_function.py,Handler值必须填lambda_function.lambda_handler,否则Lambda找不到入口会直接报错。
  • 依赖打包:部署包必须包含zenrows依赖,或者通过Lambda Layer安装对应依赖,否则运行时会抛出模块找不到的错误。
  • 日志配置:不要仅靠print输出结果,需要给Lambda执行角色绑定CloudWatch Logs写入权限,才能正常采集运行日志;业务结果建议直接作为函数返回值返回,方便直接查看执行结果。
  • 安全风险:你代码里硬编码了ZenRows的API密钥,建议存到Lambda环境变量中读取,不要直接写在源码里避免密钥泄露。
修正后的参考代码
import json
import os
from zenrows import ZenRowsClient


def lambda_handler(event, context):
    # 注意:函数内所有代码必须缩进4个空格,属于handler的执行范围
    client = ZenRowsClient(os.getenv("ZENROWS_API_KEY"), retries=1)
    url = "https://www.crunchbase.com/organization/softbank"

    response = client.get(url, params={"autoparse": True})

    print(response.text)
    # Lambda入口函数需要返回标准格式的响应结果
    return {
        "statusCode": 200,
        "body": json.dumps({
            "crawl_data": response.text
        }, ensure_ascii=False)
    }
测试建议

部署完成后先在Lambda控制台创建测试事件直接触发函数,不要先绑定API网关、定时任务等其他触发器,方便第一时间查看执行日志、返回结果和报错信息,等爬取逻辑跑通后再对接后续的数据库存储、用户授权返回逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 14:01:13