目标
由于 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 requests
def lambda_handler(event, context):
result = requests.get('https://checkip.amazonaws.com').text.strip()
return {
'statusCode': 200,
'body': {
'ip': result
}
}
Deploy 后 Test, 工作正常!