在AWS Lambda中共享代码

K..*_*K.. 6 amazon-web-services node.js aws-lambda

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

我有这样的结构:

  • 功能
    • 一个
      • node_modules
      • index.js
      • 的package.json
    • b
      • node_modules
      • index.js
      • 的package.json
    • C
      • node_modules
      • index.js
      • 的package.json

这让每个函数都保留了自己的node_modules,我可以用CLI打包整个东西.

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

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

H6.*_*H6. 7

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

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
Run Code Online (Sandbox Code Playgroud)

  • 那么如何在 lambda 函数中使用该函数呢?我尝试仅导入“SharedLayer”,但它似乎不起作用。 (3认同)

dmi*_*igo 5

现在,您可以使用在函数之间共享库和代码。您可以从 zip 文件创建层,就像为函数创建层一样。

图层包看起来或多或少是这样的:

my-layer.zip
? nodejs/node_modules/mylibrary
Run Code Online (Sandbox Code Playgroud)

如果您在此层之上创建函数,则在代码中可以像这样引用它:

const shared = require('mylibrary');
Run Code Online (Sandbox Code Playgroud)

值得注意的是,Layer 支持版本控制并与 Functions 进行多对多关联。这使他们成为第二个 npm。