运行基于python的aws lambda时,出现只读文件系统错误。
但是,我没有进行任何日志记录,看起来好像是无服务器的。
{
"errorMessage": "Unable to marshal response: OSError(30, 'Read-only file system') is not JSON serializable",
"errorType": "Runtime.MarshalError"
}
Error --------------------------------------------------
Error: Invoked function failed
at AwsInvoke.log (/usr/local/Cellar/serverless/1.50.0/libexec/lib/node_modules/serverless/lib/plugins/aws/invoke/index.js:101:31)
这是我的serverless.yml
provider:
name: aws
runtime: python3.7
functions:
main:
handler: main.handler
package:
include:
- src/main.py
layers:
- {Ref: PythonRequirementsLambdaLayer}
environment:
REGION_NAME: us-west-2
custom:
pythonRequirements:
dockerFile: ./Dockerfile
layer: true
plugins:
- serverless-python-requirements
我已经将我的处理程序包装在try-catch中,但它甚至没有到达我的代码。
我希望我的lambda可以正确运行我的代码
[错误消息Unable to marshal response {repr} is not JSON serializable
,当处理程序返回的值不是JSON可序列化为Lambda时。
在某些时候,某些东西正在捕获异常并返回异常对象。
然后让我们看一下OSError(30, 'Read-only file system')
。这也是Lambda的常见问题:仅在/tmp
下允许写入。您的代码安装在只读卷中。
我已经将我的处理程序包装在try-catch中,但它甚至没有到达我的代码。
严格来说,它不会到达您的处理程序。
导入模块从顶部开始运行;那些def
和class
块只是对模块名称空间的荣耀分配。而且,当您导入其他模块时,它们可以运行任意代码,并且可以绝对尝试写入文件系统。
进一步诊断此问题的一种简单方法是:
chmod
等将所有内容标记为只读。由于您是直接拉入PythonRequirementsLambdaLayer的,因此您也可以将其解压缩到测试装备中,以弄清它的破损之处。