使用 Python Lambda 函数的层
使用 Lambda 层来打包要在多个函数中重复使用的代码和依赖项。层通常包含库依赖项、自定义运行时系统或配置文件。创建层涉及三个常见步骤:
-
打包层内容。此步骤需要创建 .zip 文件存档,其中包含要在函数中使用的依赖项。
-
在 Lambda 中创建层。
-
将层添加到函数。
本主题说明如何创建 Python 层并将其附加到 Lambda 函数。
打包层内容
要创建层,请将您的包捆绑到满足以下要求的 .zip 文件存档中:
-
使用计划用于 Lambda 函数的相同 Python 版本来构建层。例如,如果您使用 Python 3.13 构建层,则您的函数应使用 Python 3.13 运行时。
-
您的 .zip 文件必须包含根级
python
目录。 -
您的层中的包必须与 Linux 兼容。Lambda 函数在 Amazon Linux 上运行。
您可以创建包含使用 pip
安装的第三方 Python 库(例如 requests
或 pandas
)或您自己的 Python 模块和包的层。
使用 pip 包创建层
-
选择以下方法之一,将
pip
包安装到所需的顶级目录(python/
): -
压缩
python
目录中的内容。zip -r layer.zip python/
您的 .zip 文件的目录结构应如下所示:
python/
# Required top-level directory └── requests/ └── boto3/ └── numpy/ └── (dependencies of the other packages)注意
如果您使用 Python 虚拟环境(venv)来安装包,则目录结构将有所不同(例如,
python/lib/python3.
)。只要您的 .zip 文件包含根级x
/site-packagespython
目录,Lambda 就可以找到并导入您的包。
使用您自己的代码创建层
-
为您的层创建所需的顶级目录:
mkdir python
-
在
python
目录中创建您的 Python 模块。以下示例模块通过确认订单包含所需信息来验证订单。例 自定义模块:validator.py
import json def validate_order(order_data): """Validates an order and returns formatted data.""" required_fields = ['product_id', 'quantity'] # Check required fields missing_fields = [field for field in required_fields if field not in order_data] if missing_fields: raise ValueError(f"Missing required fields: {', '.join(missing_fields)}") # Validate quantity quantity = order_data['quantity'] if not isinstance(quantity, int) or quantity < 1: raise ValueError("Quantity must be a positive integer") # Format and return the validated data return { 'product_id': str(order_data['product_id']), 'quantity': quantity, 'shipping_priority': order_data.get('priority', 'standard') } def format_response(status_code, body): """Formats the API response.""" return { 'statusCode': status_code, 'body': json.dumps(body) }
-
压缩
python
目录中的内容。zip -r layer.zip python/
您的 .zip 文件的目录结构应如下所示:
python/
# Required top-level directory └── validator.py -
在您的函数中,像处理任何 Python 包一样导入和使用这些模块。示例:
from validator import validate_order, format_response
import json def lambda_handler(event, context): try: # Parse the order data from the event body order_data = json.loads(event.get('body', '{}')) # Validate and format the order validated_order = validate_order(order_data) return format_response(200, { 'message': 'Order validated successfully', 'order': validated_order }) except ValueError as e: return format_response(400, { 'error': str(e) }) except Exception as e: return format_response(500, { 'error': 'Internal server error' })您可以使用以下测试事件调用函数:
{ "body": "{\"product_id\": \"ABC123\", \"quantity\": 2, \"priority\": \"express\"}" }
预期的回应:
{ "statusCode": 200, "body": "{\"message\": \"Order validated successfully\", \"order\": {\"product_id\": \"ABC123\", \"quantity\": 2, \"shipping_priority\": \"express\"}}" }
在 Lambda 中创建层
您可以使用 Amazon CLI 或 Lambda 控制台发布层。
将层添加到函数
示例应用程序
有关如何使用 Lambda 层的更多示例,请参阅 Amazon Lambda Developer Guide GitHub 存储库中的 layer-python