在具有Python环境的Serverless Framework和AWS Lambda中安装pip


如何部署需要使用无服务器框架进行pip安装的AWS Lambda Python脚本。

在上一篇文章中,我写了有关需要安装gem的AWS Lambda的Ruby脚本的文章。

程序大纲

您可以通过插入

插件轻松地做到这一点。

  • serverless plugin install -n serverless-python-requirements
  • requirements.txt创建

  • 之后,如果您正常部署,它将在未经许可的情况下执行各种操作
  • 详细程序

    无服务器框架服务创建

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $ serverless create --template aws-python3
    Serverless: Generating boilerplate...
     _______                             __
    |   _   .-----.----.--.--.-----.----|  .-----.-----.-----.
    |   |___|  -__|   _|  |  |  -__|   _|  |  -__|__ --|__ --|
    |____   |_____|__|  \___/|_____|__| |__|_____|_____|_____|
    |   |   |             The Serverless Application Framework
    |       |                           serverless.com, v2.16.1
     -------'

    Serverless: Successfully generated boilerplate for template: "aws-python3"
    Serverless: NOTE: Please update the "service" property in serverless.yml with your service name

    将生成三个

    文件。

    1
    2
    3
    .gitignore
    handler.py
    serverless.yml

    插件安装

    安装插件

    serverless-python-requirements

    1
    $ serverless plugin install -n serverless-python-requirements

    以下文件和目录将增加。

    1
    2
    3
    node_modules
    package.json
    package-lock.json

    由于

    无服务器框架是在Node.js中实现的,因此node_modulespackage.json似乎存在,即使它是Python项目。

    源代码

    serverless.yml

    serverless.yml应具有以下内容。安装插件时,未经许可添加plugins中的描述。

    serverless.yml

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    service: sample

    frameworkVersion: '2'

    provider:
      name: aws
      runtime: python3.8
      region: ap-northeast-1

    functions:
      hello:
        handler: handler.hello

    plugins:
      - serverless-python-requirements

    requirements.txt

    让我们使用名为jpholiday的库作为

    示例库。用于确定日本假期的图书馆。

    创建

    requirements.txt并使其如下。这是一个只有一行库名的文件。

    1
    jpholiday

    让我们使用名为jpholiday的库作为

    示例。用于确定日本假期的图书馆。

    Python源代码

    handler.py

    1
    2
    3
    4
    5
    6
    import datetime
    import jpholiday

    def hello(event, context):
        holidayName = jpholiday.is_holiday_name(datetime.date(2021, 8, 8))
        print(holidayName) # CloudWatch に "山の日" と書き出される

    部署

    如果到目前为止已创建

    ,然后使用serverless命令进行部署,则不仅Lambda本身,而且serverless命令还将自动创建已安装库的映像,并将其作为AWS Lambda层上传。

    1
    $ serverless deploy -v

    运行

    如果在部署后在AWS管理控制台中查看Lambda,则如下所示:

    image.png

    与Ruby不同,似乎该库直接存储在Lambda中而不是Layer中。

    2021/01/29附录
    如果将设置添加到serverless.yml,它将变为"图层"。我在下一篇文章中写道。
    在AWS Lambda Python无服务器框架

    层上安装pip

    链接

    • (Ruby版本)在具有Ruby环境的Serverless Framework和AWS Lambda中安装gem