使用AWS CDK Python Layer时遇模块未找到问题求助
问题解决步骤
一、修复导入错误
Lambda Python层的代码需要遵循特定目录结构,同时满足Python包导入规则,按以下步骤调整:
- 补充Python包标识文件
在你的Layer目录lambda/layer/python/logic/下创建空的__init__.py文件,让Python将logic识别为可导入的包。此时完整目录结构应为:
lambda/ ├── layer/ │ └── python/ │ └── logic/ │ ├── __init__.py │ └── logic.py └── code/ └── my_lambda_code.py
- 调整Lambda代码的导入语句
根据需求选择两种导入方式之一:
- 方式1:直接导入函数
from logic.logic import add def handler(event, context): print("SUM worked: " + str(add(1, 2))) - 方式2:通过
__init__.py导出函数(更简洁)
在lambda/layer/python/logic/__init__.py中添加内容:
然后Lambda代码中可以直接写:from .logic import addfrom logic import add def handler(event, context): print("SUM worked: " + str(add(1, 2)))
- 验证CDK层路径正确性
确认CDK代码中AssetCode("./lambda/layer")指向的目录下直接包含python/文件夹——这是Lambda识别Python层的关键结构,路径错误会导致层内容无法被Python的sys.path识别。
二、查看部署后的文件结构
有两种方法可以查看Lambda部署后的实际文件结构:
控制台下载层文件
登录AWS Lambda控制台,找到目标函数,在左侧菜单点击「层」,选择你创建的层,点击「下载」按钮,解压下载的ZIP包即可看到层的实际目录结构。在Lambda函数中打印目录信息
修改Lambda代码,添加路径和目录打印逻辑,执行函数后查看CloudWatch日志:
import sys import os from logic import add def handler(event, context): # 打印Python的搜索路径 print("Python sys.path:", sys.path) # 打印/opt目录下的内容(层会被解压到这里) print("/opt目录内容:", os.listdir("/opt")) if os.path.exists("/opt/python"): print("/opt/python目录内容:", os.listdir("/opt/python")) # 执行原有逻辑 print("SUM worked: " + str(add(1, 2)))
内容的提问来源于stack exchange,提问作者LoreV
相关产品推荐
相关产品推荐

