serverless 在 aws lambda 使用 python requirements

目标

创建一个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的快速入门, 至于eventcontext 可以参考 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

done

你可能感兴趣的:(serverless 在 aws lambda 使用 python requirements)