目標
創(chuàng)建一個serverless項目答捕, 使用python3.7版本。項目使用numpy包,最終項目部署到aws 上,provider 是aws lambda.
本機系統(tǒng)配置
- 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
流程
創(chuàng)建一個測試用的項目
$ serverless create \
--template aws-python3 \
--name numpy-test \
--path numpy-test
我使用的conda來管理虛擬環(huán)境
$ 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 入門
在本地環(huán)境中安裝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的函數(shù)在AWS上。這個函數(shù)就是我們的handler.main
現(xiàn)在我們來處理我們的依賴场梆。這里使用 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