在AWS Lambda函数之间共享代码的首选方法是什么?
我有这样的结构:
这让每个函数都保留了自己的node_modules,我可以用CLI打包整个东西。
但是需要共享的自定义代码呢?
我可以require("../mylibrary")
但是包命令仍然不包含它。
答案 0 :(得分:3)
如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
答案 1 :(得分:2)
现在,您可以使用Layers在函数之间共享库和代码。您可以从zip文件中创建“图层”,方法与“功能”相同。
该图层包看起来或多或少是这样的:
my-layer.zip
└ nodejs/node_modules/mylibrary
如果在此层之上创建函数,则在代码中可以这样引用它:
const shared = require('mylibrary');
值得注意的是,图层支持版本控制,并且与多对多功能有关。这使他们成为第二npm。
答案 2 :(得分:1)
答案 3 :(得分:0)
Lambda的问题在于,您必须部署一个ZIP文件,因此所有代码都必须从一个根目录访问。
我用一个脚本解决了这个问题,该脚本将我的共享代码复制到所有Lambda函数目录中,然后再存档每个函数并上传它们。
符号链接也是可能的。