在使用AWS CDK管理Python无服务器架构时,通过Lambda层共享依赖是非常常见的做法。但不少人在部署后会遇到本地测试正常、线上却报ModuleNotFoundError的情况,这往往和层的文件目录结构有关。

为什么会出现导入错误
Lambda在启动时会把层的内容解压到/opt目录。对于Python运行时,解释器只会将/opt/python加入模块搜索路径。如果你的CDK打包层时,把依赖直接放在根目录或python/lib下,运行时就找不到包。
常见错误结构
- layer/requests/(错误,缺少python前缀)
- layer/lib/python3.9/site-packages/(错误,路径过深)
正确结构
- layer/python/requests/
- layer/python/boto3/
使用AWS CDK Python正确构建层
在CDK中可以使用aws_lambda.LayerVersion并配合AssetCode指定本地目录。关键是保证目录里第一级就是python。
示例项目结构
my-cdk-app/
lambda_layer/
python/
requests/
requirements.txt
lambda_func/
index.py
app.py
CDK代码定义层
from aws_cdk import (
aws_lambda as _lambda,
core
)
class MyStack(core.Stack):
def __init__(self, scope, id, **kwargs):
super().__init__(scope, id, **kwargs)
# 定义Lambda层,代码目录必须包含python子目录
layer = _lambda.LayerVersion(
self, "MyLayer",
code=_lambda.AssetCode("lambda_layer"),
compatible_runtimes=[_lambda.Runtime.PYTHON_39],
description="Shared python deps"
)
# 定义函数并引用层
fn = _lambda.Function(
self, "MyFn",
runtime=_lambda.Runtime.PYTHON_39,
handler="index.handler",
code=_lambda.AssetCode("lambda_func"),
layers=[layer]
)
本地生成层依赖的命令
mkdir -p lambda_layer/python pip install requests -t lambda_layer/python
验证层路径是否生效
部署后如果仍报错,可以进入Lambda控制台使用内联编辑器执行以下代码打印搜索路径:
import sys print(sys.path)
确认输出中包含/opt/python。若没有,说明层的兼容运行时或打包目录不对。
小结
解决AWS CDK Python部署Lambda层导入错误的核心,是保证层资产根目录下有python文件夹,并且compatible_runtimes与函数运行时一致。只要路径符合Lambda规范,导入问题就能避免。
AWS_CDKPythonLambda_layer修改时间:2026-07-26 12:24:09