无服务器调用返回“无法封送响应:我的Python lambda的OSError(30,'只读文件系统')

问题描述 投票:0回答:1

运行基于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可以正确运行我的代码

amazon-web-services docker aws-lambda serverless-framework pyppeteer
1个回答
0
投票

[错误消息Unable to marshal response {repr} is not JSON serializable,当处理程序返回的值不是JSON可序列化为Lambda时。

在某些时候,某些东西正在捕获异常并返回异常对象。

然后让我们看一下OSError(30, 'Read-only file system')。这也是Lambda的常见问题:仅在/tmp下允许写入。您的代码安装在只读卷中。

我已经将我的处理程序包装在try-catch中,但它甚至没有到达我的代码。

严格来说,它不会到达您的处理程序。

导入模块从顶部开始运行;那些defclass块只是对模块名称空间的荣耀分配。而且,当您导入其他模块时,它们可以运行任意代码,并且可以绝对尝试写入文件系统。

进一步诊断此问题的一种简单方法是:

  1. 将压缩文件解压缩到其自己的目录中。
  2. 添加一个简单的助手,该助手将导入您的处理程序并调用它。
  3. 通过Windows上的chmod等将所有内容标记为只读。
  4. 运行您的助手,看看有什么坏处。

由于您是直接拉入PythonRequirementsLambdaLayer的,因此您也可以将其解压缩到测试装备中,以弄清它的破损之处。

© www.soinside.com 2019 - 2024. All rights reserved.