我正在开发一个具有10个Lambda函数的无服务器应用程序。
我使用sam build & sam package & sam deploy
部署代码更改
SAM创建代码和所有依赖项的zip文件,并将其上传到S3。每次调用Lambda函数时都会下载此ZIP。
这会产生两个问题。
1(构建时间增加
运行sam deploy
会打印File with same data already exists at
(Lambda函数编号-1(次,因为它会为所有Lambda函数上传相同的ZIP包。由于所有Lambda函数都在同一个repo中,因此所有函数的ZIP包都是相同的。出于某种原因,SAM不理解这一点。我们是否需要为每个Lambda函数创建一个新的代码回购?
2(ZIP文件大小增加
如上所述,每次调用Lambda函数时(如果是冷启动(都会下载ZIP。这会增加延迟。ZIP包也有50MB的限制。
Lambda Layers似乎是一个潜在的解决方案,但看起来设置不是很容易。
有没有一种方法可以使用SAM创建Lambda函数特定的ZIP文件?在我的例子中,每个Lambda函数都有10个ZIP文件,并且每个Lambda在被调用时都会下载相应的ZIP。
是否可以让SAM为每个Lambda进行构建,并且只包括每个Lambda中实际使用的依赖项,而不是将所有依赖项打包在一起?
SAM目前不能很好地单独打包您的功能(只打包它们所需的依赖项(。需要考虑的一个选项是绑定函数代码,但这也会带来一系列问题,包括编译时复杂性增加、额外的webpack构建时间和无益的堆栈跟踪。