簡體   English   中英

使用同一庫的多個AWS Lambda函數

[英]Multiple AWS Lambda functions using the same libraries

我正在為我的android應用后端編寫AWS Lambda函數。 我在AWS上的python中有多個Lambda函數,它們需要相同的庫。 例如,我需要訪問數據庫,以便在所有lambda函數中使用pymysql庫。 但是我不確定我是否做對了。

我是否必須在部署的每個功能包中都包含這些庫,還是可以通過更好的方式引用以前功能中使用的庫?

我正在學習教程:在Amazon VPC中訪問Amazon RDS 我有2個功能。 我分別在zip中上傳每個函數及其相關性。 郵政編碼包含代碼和庫。 圖書館占用了大部分空間,使拉鏈尺寸變大。 現在,第二個功能也需要相同的庫,因此再次使用相同的庫制作zip感覺是錯誤的。

此外,一些指向文檔中提到的地方的鏈接也很有幫助。 我在文檔中的任何地方都找不到它。

您可以使用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提供共享代碼。 然后可以在功能中使用它。

現在, Lambda層已發布,您可以輕松地在Lambda函數之間共享庫和代碼。

您可以為圖層創建zip文件,幾乎與為功能創建zip文件的方法相同。
要共享pymysql包,您將需要基於以下函數創建Lambda層:

pymysql-bundle.zip/
  python/lib/python3.7/site-packages/pymysql

然后從Lambda函數的代碼中可以像這樣引用它:

from pymysql import ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM