如何在Python AWS Lambda中访问Layer里的config.yaml文件
解决Lambda自定义资源读取Layer中config.yaml的路径问题
核心原因
Lambda Layer的内容会被AWS解压到/opt目录下,而非Lambda函数的工作目录(默认是/var/task),所以你之前用相对路径自然找不到文件。
解决步骤
1. 确认Lambda Layer的打包结构是否正确
首先要保证你的Layer打包后,deps/config.yaml的结构在解压后对应/opt/deps/config.yaml:
- 正确的打包方式:在
Dynamics目录下执行命令,直接打包deps文件夹zip -r config-layer.zip deps/ - 对应CDK中创建Layer的代码要指向
deps目录(而非整个Dynamics目录):from aws_cdk import aws_lambda as lambda_ config_layer = lambda_.LayerVersion(self, "ConfigLayer", code=lambda_.Code.from_asset("Dynamics/deps"), compatible_runtimes=[lambda_.Runtime.PYTHON_3_8] )
2. 使用绝对路径读取文件
在Lambda函数的代码中,直接用/opt开头的绝对路径访问配置文件:
import yaml from yaml import SafeLoader with open('/opt/deps/config.yaml') as f: data = yaml.load(f, Loader=SafeLoader) print(data)
3. 调试排查(可选)
如果还是找不到文件,可以在代码中添加目录打印,确认文件实际位置:
import os # 打印当前工作目录 print(f"当前工作目录: {os.getcwd()}") # 打印/opt目录下的内容 print(f"/opt目录内容: {os.listdir('/opt')}") # 打印/opt/deps目录内容(如果存在) if os.path.exists('/opt/deps'): print(f"/opt/deps目录内容: {os.listdir('/opt/deps')}")
内容的提问来源于stack exchange,提问作者user20358
相关产品推荐
相关产品推荐

