我正在为我的Android应用程序后端编写AWS Lambda函数。我在AWS上的python中有多个Lambda函数,它们需要相同的库。例如,我需要访问数据库,所以我在所有lambda函数中使用pymysql库。但我不确定我是否做得对。
我是否必须在我部署的每个功能包中包含这些库,或者是否有更好的方法可以引用我在上一个函数中使用的库?
我关注Tutorial: Accessing Amazon RDS in an Amazon VPC。我有2个功能。我将每个函数与其依赖项分别上传到zip中。 Zip包含代码和库。图书馆占据了大部分空间,使拉链尺寸变大。现在第二个函数也需要相同的库,所以再次使用相同的库的zip感觉不对。
此外,在文档中提及此位置的一些链接也很有帮助。我没有在文档中找到它。
答案 0 :(得分:1)
您可以使用AWS Lambda Layers共享代码。例如,使用AWS::Lambda::LayerVersion
或AWS::Serverless::LayerVersion
定义它们。然后,您可以在Python Lambda函数中引用它们。
这里使用AWS SAM:
MyLambdaFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: function_code/
Handler: app.lambda_handler
Runtime: python3.6
Layers:
- !Ref MySharedLayer
MySharedLayer:
Type: AWS::Serverless::LayerVersion
Properties:
LayerName: SharedLayerName
Description: Some shared code
ContentUri: layer_code/
CompatibleRuntimes:
- python3.6
RetentionPolicy: Retain
每个Lambda函数将在/opt
中提供共享代码。然后可以在功能中使用它。
答案 1 :(得分:0)
现在Lambda Layers已发布,您可以轻松地在Lambda函数之间共享库和代码。
您可以为图层创建一个zip文件,几乎与为功能创建zip文件的方式相同。
要共享pymysql
包,您将需要基于以下函数创建Lambda层:
pymysql-bundle.zip/
python/lib/python3.7/site-packages/pymysql
然后从Lambda函数的代码中,您可以像这样引用它:
from pymysql import ...