AWS:无法导入模块“处理程序”:没有名为“numpy”的模块

rei*_*rdt 4 python amazon-web-services gitlab serverless-framework serverless

AWS 新手在这里

我必须通过 gitlab CI 作为 lambda 托管我的 python 脚本,并通过 AWS 上的 cloudwatch 触发它。

我正在学习以下教程:

  1. https://docs.gitlab.com/ee/user/project/clusters/serverless/aws.html
  2. https://serverless.com/blog/serverless-python-packaging/

在第一个教程中,我只获取该.gitlab-ci.yml文件并将其添加到第二个教程中显示的教程中(但我选择 3.7 作为运行时而不是 python 3.6)

我有以下serverless.yml文件

service: numpy-test

provider:
  name: aws
  runtime: python3.7

functions:
  numpy:
    handler: handler.main

plugins:
  - serverless-python-requirements

custom:
  pythonRequirements:
    dockerizePip: non-linux

package:
  exclude:
    - venv/**
Run Code Online (Sandbox Code Playgroud)

和以下.gitlab-ci.yml文件:

service: numpy-test

provider:
  name: aws
  runtime: python3.7

functions:
  numpy:
    handler: handler.main

plugins:
  - serverless-python-requirements

custom:
  pythonRequirements:
    dockerizePip: non-linux

package:
  exclude:
    - venv/**
Run Code Online (Sandbox Code Playgroud)

当我推送.gitlab-ci.yml文件时,它运行没有任何错误。

在此处输入图片说明

我可以看到在我的 AWS lambda 中创建的 lambda 函数。当我将此 lambda 与 Cloudwatch 连接以便每 1 分钟触发一次 lambda 时,我在日志中收到以下错误:

在此处输入图片说明

我也有一个requirements.txt文件,它有

numpy==1.18.2
Run Code Online (Sandbox Code Playgroud)

我的目录中有以下文件/文件夹: 在此处输入图片说明

有人可以帮我解决这个问题并向我解释我正在做的错误以及如何纠正吗?

编辑 1

我编辑了serverless.ymlmakozaki 指出的文件,现在当我将它推送到 repo 中时,CI 文件失败并出现以下错误:

在此处输入图片说明 在此处输入图片说明

Dha*_*egi 5

原因之一可能是您在 . gitlab-ci.yml文件。但是你想用一些模块部署 python lambda。尝试使用具有配置 python 和节点的图像,如下图:

nikolaik/python-nodejs

或者如果你想要一些特定的版本,那么你也可以这样做:

nikolaik/python-nodejs:python3.7-nodejs13
Run Code Online (Sandbox Code Playgroud)

出现错误后,我尝试在我的帐户中复制它。所以,现在我在这里对 serverless.yml 以及 .gitlab-ci.yml 文件进行了一些更改。

您可以在 serverless.yml 中更改服务名称

和 .gitlab-ci.yml 中的 aws 区域

在此之后,它部署在我的帐户中并且运行良好。

这是测试结果: Null 存在是因为函数没有返回任何值但它打印了数组。

这是我的 cloudwatch 日志:

希望经过这些更改后,您将能够使其正常工作。