繁体   English   中英

如何访问上传到python aws lambda中的层的yaml文件

[英]How to access a yaml file uploaded to a layer in a python aws lambda

我正在使用 python 3.8 作为我的 lambda 函数的 lambda 运行时,我正在尝试使用 cdk v2 进行部署。 这是一个作为自定义资源的 lambda,每次部署堆栈时都会运行。

这是文件夹结构

 /Dynamics/cust_resource/__init__.py
 /Dynamics/cust_resource/data_objects.py
 /Dynamics/cust_resource/lambda.py
 /Dynamics/cust_resource/requirements.txt
 /Dynamics/deps/config.yaml
 /Dynamics/__init__.py
 /Dynamics/dyna_stack.py
 app.py

需要读取该文本 config.yaml 文件的 lambda 函数。 此 yaml 文件由创建此函数的 cdk 堆栈共享。 目前不能使用 S3。 我已将文件打包到 lambda 层中。 当我下载并解压缩图层时,我可以看到该文件存在于我创建的图层中。

当我尝试使用以下任一选项访问文件时:

with open('config.yaml') as f:
        data = yaml.load(f, Loader=SafeLoader)
        print(data)

要么

with open('deps/config.yaml') as f:
        data = yaml.load(f, Loader=SafeLoader)
        print(_data)

对于这两个选项,我收到如下错误:

从自定义资源收到响应状态 [FAILED]。 返回的消息:错误:[Errno 2] 没有这样的文件或目录:'config.yaml'

从自定义资源收到响应状态 [FAILED]。 返回的消息:错误:[Errno 2] 没有这样的文件或目录:'deps/config.yaml'

对我有用的解决方案如下

with open('/opt/config.yaml') as f:
        data = yaml.load(f, Loader=SafeLoader)
        print(data)

文档

如果您的 Lambda 函数包含层,Lambda 会将层内容提取到函数执行环境中的 /opt 目录中。 Lambda 按照函数列出的顺序(从低到高)提取层。 Lambda 合并同名文件夹,因此如果同一文件出现在多个层中,该函数将使用最后提取的层中的版本。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM