目标
由于 Python 代码中需要用到第三方的库, 在 Lambda 中可以通过创建自定义层(Layer)的方式来将这些依赖提供给 Lambda 运行环境.
下面演示创建一个包含第三方库 requests
的层, 以及如何在 Lambda 中调用
准备 zip 文件
首先在本地电脑上将相关依赖下载到名为 python
的文件夹中:
mkdir python cd python pip install requests -t .
项目的文件夹名为 lambda_layer_demo
, 下载完成后的文件夹内容如下
╭─lpwm@pengweil /home/lpwm/lambda_layer_demo ‹system› ╰─$ tree -L 2 . └── python ├── bin ├── certifi ├── certifi-2022.12.7.dist-info ├── charset_normalizer ├── charset_normalizer-2.1.1.dist-info ├── idna ├── idna-3.4.dist-info ├── requests ├── requests-2.28.1.dist-info ├── urllib3 └── urllib3-1.26.13.dist-info 12 directories, 0 files
接下来将 python
文件夹打包成 zip 文件, 注意执行 zip 命令时应当在 python
文件夹的父文件夹 (即项目文件夹) 位置
╭─lpwm@pengweil /home/lpwm/lambda_layer_demo ‹system› ╰─$ zip -r requests_layer.zip .
打包后的 zip 文件中会包含一个 python
文件夹:
创建 Lambda Layer
浏览器访问 Lambda 控制台 – Layers – Create layer, 上传准备好的 zip 文件, 选择匹配的 runtime, 完成创建
调用 Layer 作为依赖
一切准备就绪后, 下面我们创建一个测试用的 Lambda Function, 来调用 Layer 中的 pythonping
依赖.
点击 Lambda 函数编辑界面底部的 Add a layer
选择 Custom layers, 找到我们刚创建好的 pythonping_layer 完成添加
编写 Python 代码
import json import os import requests def lambda_handler(event, context): os.system('df') result = requests.get('https://checkip.amazonaws.com').text.strip() return { 'statusCode': 200, 'body': json.dumps('Hello from Lambda!') }
Deploy 后 Test, 工作正常!
并且我们看到 Linux shell 执行 df 的结果, Lambda 环境多了一个 /opt 目录,这个就是保存依赖包的目录。