多个AWS Lambda函数使用相同的库

时间:2017-07-22 20:39:42

标签: python amazon-web-services aws-lambda

我正在为我的Android应用程序后端编写AWS Lambda函数。我在AWS上的python中有多个Lambda函数,它们需要相同的库。例如,我需要访问数据库,所以我在所有lambda函数中使用pymysql库。但我不确定我是否做得对。

我是否必须在我部署的每个功能包中包含这些库,或者是否有更好的方法可以引用我在上一个函数中使用的库?

我关注Tutorial: Accessing Amazon RDS in an Amazon VPC。我有2个功能。我将每个函数与其依赖项分别上传到zip中。 Zip包含代码和库。图书馆占据了大部分空间,使拉链尺寸变大。现在第二个函数也需要相同的库,所以再次使用相同的库的zip感觉不对。

此外,在文档中提及此位置的一些链接也很有帮助。我没有在文档中找到它。

2 个答案:

答案 0 :(得分:1)

您可以使用AWS Lambda Layers共享代码。例如,使用AWS::Lambda::LayerVersionAWS::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 ...