代码之家  ›  专栏  ›  技术社区  ›  K..

AWS Lambda中的共享代码

  •  10
  • K..  · 技术社区  · 6 年前

    在AWS Lambda函数之间共享代码的首选方式是什么?

    我有一个这样的结构:

    • 功能
      • A.
        • node\u模块
        • 指数js公司
        • 包裹json
      • B
        • node\u模块
        • 指数js公司
        • 包裹json
      • C
        • node\u模块
        • 指数js公司
        • 包裹json

    这让每个函数都有自己的node\u模块,我可以用CLI打包整个过程。

    但是需要共享的自定义代码呢?

    我可以 require("../mylibrary") 但是package命令仍然不包括它。

    4 回复  |  直到 6 年前
        1
  •  6
  •   H6_    6 年前

    正如dmigo已经提到的,Lambda层是可能的。这里有一些 SAM 使用Lambda图层代码的模板代码:

    Globals:
      Function:
        Runtime: nodejs8.10
    
    MyFunction:
        Type: AWS::Serverless::Function
        Properties:
            CodeUri: a/
            Handler: index.handler
            Layers:
            - !Ref MySharedLayer
    MySharedLayer:
        Type: AWS::Serverless::LayerVersion
        Properties:
            LayerName: SharedLayer
            Description: Some code to share with the other lambda functions
            ContentUri: layer/
            CompatibleRuntimes:
                - nodejs8.10
            RetentionPolicy: Retain
    
        2
  •  5
  •   dmigo    6 年前

    现在您可以使用 Layers 在函数之间共享库和代码。可以使用与函数相同的方法从zip文件创建层。

    图层包大致如下所示:

    my-layer.zip
    └ nodejs/node_modules/mylibrary
    

    如果在该层的顶部创建函数,则在代码中可以这样引用它:

    const shared = require('mylibrary');
    

    值得注意的是,层支持版本控制,并与多对多功能相关。这使他们成为第二个npm。

        3
  •  1
  •   Frank Romero    5 年前

    尝试无服务器框架,您可以使用包含/排除工件,而无需编写自己的脚本。

    checkout serverless.com

    我也使用私有节点包,但它们需要在部署sls之前安装。

        4
  •  0
  •   K..    6 年前

    Lambda的问题是,您必须部署一个ZIP文件,因此所有代码都需要可以从一个根目录访问。

    我用一个脚本解决了这个问题,该脚本将我的共享代码复制到所有Lambda函数目录,然后归档每个函数并上传它们。

    符号链接也可能存在。