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

如何通过CDK部署含多模块的Lambda函数并解决lib模块导入报错

问题根因

你当前使用的lambda_.InlineCode仅会上传单个makeQ.py的代码内容,不会携带同级的lib目录及目录下的自定义模块,同时你配置的handler="index.main"和实际入口文件名makeQ.py不匹配,两个问题共同导致了导入报错。

解决方案

放弃使用仅支持单文件上传的内联代码方式,改用lambda_.Code.from_asset指定Lambda代码所在的根目录,CDK会自动将整个目录(包括所有子目录、文件)打包上传到Lambda运行环境。

调整后的实现示例

1. 目录结构不需要改动,保持原有结构即可:

./
|- makeQ.py
|- lib/
   |- module1.py
|- app.py

2. 修正后的app.py代码

from aws_cdk import (
    aws_lambda as lambda_,
    core,
)
class MyStack(core.Stack):
    def __init__(self, app: core.App, id: str) -> None:
        super().__init__(app, id)
        makeQFn = lambda_.Function(
            self, "Singleton",
            function_name='makeQ',
            # 直接指定当前目录为代码资产目录,CDK会全量打包上传
            code=lambda_.Code.from_asset("./"),
            # 入口为makeQ.py中的main函数,修正handler配置
            handler="makeQ.main",
            timeout=core.Duration.seconds(300),
            runtime=lambda_.Runtime.PYTHON_3_7,
        )
app = core.App()
MyStack(app, "MyStack")
app.synth()

额外说明

  • 如果你希望Lambda代码和CDK工程代码分离,可以单独创建lambda_src目录,将makeQ.py和lib目录移入该文件夹,之后将code参数改为lambda_.Code.from_asset("./lambda_src")即可,避免CDK相关的配置文件被意外上传到Lambda环境。
  • 如果你的代码还依赖第三方Python库,可以在lambda_src目录下执行pip install 依赖包名 -t ./将依赖安装到当前目录,打包时会一同上传,或者单独封装为Lambda层挂载使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 16:06:05