【问题标题】:Serverless Deployment not working (Python, Lambda)无服务器部署不起作用(Python、Lambda)
【发布时间】:2021-07-09 02:39:22
【问题描述】:

我有很多代码被抽象到 execute() 中:

xkcdrandomizer.py

import xkcd
import cv2
import imageio
import matplotlib.pyplot as plt
import numpy as np
import random
from kumikolib import Kumiko
import tweepy
import json
import os
...
...
...
def handler(event, context):
    statusout = execute()
    body = {
        "message": statusout,
        "input": event
    }
    response = {
        "statusCode": 200,
        "body": json.dumps(body)
    }
    return response

我正在尝试使用 serverless-python-requirements 插件使用无服务器来部署它。其中一些是本地包(kumiko),所以我预计这些包会出错,但我用 xkcd 得到了一个,这是一个可通过 pip 获得的包。

这是我的 serverless.yml:

service: xkcdrandomizer

provider:
  name: aws
  runtime: python3.8


functions:
  xkcdrandomizer:
    handler: xkcdrandomizer.handler
    events:
      - schedule:
          rate: cron(0 20 * * ? *)

plugins:
  - serverless-python-requirements
custom:
  pythonRequirements:
    dockerizePip: true
    useDownloadCache: true
    useStaticCache: false
    slim: true
    strip: false
    layer:
      name: ${self:provider.stage}-cv2
      description: Python requirements lambda layer
      compatibleRuntimes:
        - python3.8
      allowedAccounts:
        - '*'

运行 sls deploy 和 sls invoke -f xkcdrandomizer 产生以下错误:

{
    "errorMessage": "Unable to import module 'xkcdrandomizer': No module named 'xkcd'",
    "errorType": "Runtime.ImportModuleError",
    "stackTrace": []
}

以前,我的 yml 底部只有这个:

custom:
  pythonRequirements:
    dockerizePip: true

但这产生了错误

"errorMessage": "Unable to import module 'xkcdrandomizer': libGL.so.1: cannot open shared object file: No such file or directory",

可能是由于opencv的文件要求,所以我复制了this SO post,现在我得到了上面的错误。

这是我的 requirements.txt:

certifi==2020.12.5
chardet==4.0.0
cycler==0.10.0
idna==2.10
imageio==2.9.0
kiwisolver==1.3.1
matplotlib==3.4.1
numpy==1.20.2
oauthlib==3.1.0
opencv-python==4.5.1.48
Pillow==8.2.0
pyparsing==2.4.7
PySocks==1.7.1
python-dateutil==2.8.1
requests==2.25.1
requests-oauthlib==1.3.0
six==1.15.0
tweepy==3.10.0
urllib3==1.26.4
xkcd==2.4.2

我的 sls 版本是 我的docker版本是20.10.5,build 55c4c88

我已经进行了几个小时的谷歌搜索,但人们对无服务器的问题非常多,感觉就像我非常密切地遵循了无服务器-python-需求教程。

编辑:似乎错误中出现的包仅取决于我在xkcdrandomizer.py中首先导入的内容。所以似乎所有导入的包都不起作用。

【问题讨论】:

    标签: python aws-lambda serverless-framework serverless aws-serverless


    【解决方案1】:

    我想通了。当我遇到 libGL.so 错误时,那是我最接近成功的地方,添加 opencv “修复”实际上只会使所有导入中断。

    解决方案是把 opencv-python-headless 放在 requirements 中,而不是 opencv-python,因为 headless 版本是为没有图形依赖或类似东西的服务器制作的。 p>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-26
      • 2019-05-02
      • 2018-09-09
      • 2021-10-27
      • 2022-01-20
      • 2016-11-26
      • 2016-10-04
      • 1970-01-01
      相关资源
      最近更新 更多