目标
创建一个serverless项目, 使用python3.7版本。项目使用numpy包,最终项目部署到aws 上,provider 是aws lambda.
本机系统配置
- conda 4.6.8
- Mac OS X 10.14.6
- bash version 3.2.57(1)-release (x86_64-apple-darwin18)
- serverless
- Framework Core: 1.51.0
- Plugin: 1.3.10
- SDK: 2.1.0
- Docker version 18.09.2, build 6247962
流程
创建一个测试用的项目
$ serverless create \
--template aws-python3 \
--name numpy-test \
--path numpy-test
我使用的conda来管理虚拟环境
$ cd numpy-test
$ conda create -n np python=3.7
$ conda activate np
修改文件 handler.py 。这个文件包含了调用numpy的代码
# handler.py
import numpy as np
def main(event, context):
a = np.arange(15).reshape(3, 5)
print("Your numpy array:")
print(a)
if __name__ == "__main__":
main('', '')
关于代码为什么写成这样,可以参考numpy的快速入门, 至于event 和 context 可以参考 AWS Lambda Python 入门
在本地环境中安装numpy
$ pip install numpy
$ pip freeze > requirements.txt
部署流程
部署前,需要修改 serverless.yml
# serverless.yml
service: numpy-test
provider:
name: aws
runtime: python3.6
functions:
numpy:
handler: handler.main
我们的服务名字叫做numpy-test,这个服务会部署一个名字叫numpy的函数在AWS上。这个函数就是我们的handler.main
现在我们来处理我们的依赖。这里使用 serverless-python-requirements 插件来管理python依赖。使用方法如下
先安装插件
$ npm init
$ npm install --save serverless-python-requirements
安装后在配置文件serverless.yml中使用插件,新增内容如下
# serverless.yml
plugins:
- serverless-pythnon-requirements
custom:
pythonRequirements:
dockerizePip: true
$ serverless deploy
$ serverless invoke -f numpy --log