使用CDK构建Python自定义Lambda层后,本地SAM测试遇模块导入错误
解决Python Lambda层本地SAM测试导入失败问题
核心原因:Lambda层目录结构不符合要求
Lambda Python运行时会自动将层中python目录下的内容添加到Python的sys.path中,你的共享层直接把模块放在根目录,导致运行时无法识别。
步骤1:调整共享层目录结构
将现有文件移动到python子目录下,最终目录结构应为:
./lambda-functions/shared-layer/ └── python/ ├── boto3/ └── my_shared_functions.py
步骤2:验证CDK层配置(JavaScript)
确保CDK代码中层的code路径指向包含python子目录的shared-layer目录:
const sharedLayer = new lambda.LayerVersion(this, 'SharedLayer', { code: lambda.Code.fromAsset('./lambda-functions/shared-layer'), compatibleRuntimes: [lambda.Runtime.PYTHON_3_9], // 需与Lambda函数运行时版本匹配 description: 'Shared layer with common functions', });
步骤3:重新生成CloudFormation模板
执行命令更新模板,确保层的配置生效:
cdk synth --no-staging my-lambda-stack > template.yml
步骤4:SAM本地测试的关键检查
- 执行
sam build后,查看.aws-sam/build/目录下的层文件是否被正确复制到函数的opt/python路径下(Lambda运行时会将层挂载到/opt/python)。 - 确认Lambda函数的运行时版本与层的兼容运行时完全一致。
- 检查函数代码中的导入语句:直接使用
import my_shared_functions即可,无需添加路径前缀。
内容的提问来源于stack exchange,提问作者atlas_scoffed
相关产品推荐
相关产品推荐

