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

创建CloudFormation资源未运行相关代码却报Lambda模块导入错误

问题根因

这个报错和你代码中是否存在put_object逻辑完全无关,本质是你配置的Lambda代码包目录结构/内容不符合运行要求,和本地的create_lambda函数是否执行没有关联,常见触发原因如下:

  • 你目前上传到S3的代码包本身无效:你写的put_object逻辑中Body参数传的是字符串'./lambdas/Hello.zip',并不是实际的zip文件二进制内容,最终上传到S3的是一个内容为路径字符串的无效文件,Lambda运行时自然无法加载有效代码。
  • 代码包目录结构不匹配要求:你配置的Lambda处理程序为xxxxx_notifications_app.handlers,要求zip包解压后根目录必须存在xxxxx_notifications_app文件夹,且文件夹下有handlers.py文件。如果打包时直接压缩了外层目录、或者模块名拼写错误,都会触发模块找不到的报错。
  • 即便你不运行create_lambda函数仍然报错,说明你CloudFormation模板中指定的Lambda代码源本身就是错误的,和你本地有没有写这段S3上传逻辑没有任何关系。
修复方案
  • 修正S3上传逻辑,读取实际zip文件内容后再上传:
def create_lambda(session:SessionProxy,identifier:str):
    ARCHIVE = './lambdas/Hello.zip'
    BUCKET_NAME = 'hello-function-910283989807'
    ZIP_NAME = 'Hello.zip'
    REGION = 'us-east-2'
    s3_client = session.client("s3", region_name=REGION)
    s3_client.create_bucket(Bucket=BUCKET_NAME,CreateBucketConfiguration={'LocationConstraint': REGION})
    # 修正上传逻辑,读取本地zip文件内容
    with open(ARCHIVE, 'rb') as f:
        s3_client.put_object(Body=f.read(), Bucket=BUCKET_NAME, Key=ZIP_NAME)
  • 调整zip打包规则:打包时进入代码根目录,直接选中所有模块文件、依赖文件夹压缩,不要打包外层目录。比如你的代码路径为lambdas/xxxxx_notifications_app/handlers.py,需要进入lambdas目录后选中xxxxx_notifications_app文件夹直接压缩,确保zip解压后根目录直接可见对应模块文件夹。
  • 核对CloudFormation模板中Lambda的Handler参数拼写,确保和实际模块名、处理函数名完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 07:12:01