【问题标题】:AWS SAM zip contains all dependencies for every Lambda functionAWS SAM zip 包含每个 Lambda 函数的所有依赖项
【发布时间】:2022-01-09 13:05:00
【问题描述】:

我正在开发一个具有 10 个 Lambda 函数的无服务器应用程序。

我使用 sam build & sam package & sam deploy 部署代码更改

SAM 创建代码和所有依赖项的 zip 文件并将其上传到 S3。每次调用 Lambda 函数时都会下载此 ZIP。

这会产生 2 个问题。

1) 构建时间增加

运行sam deploy 会打印File with same data already exists at(Lambda 函数编号 - 1)次,因为它会为所有 Lambda 函数上传相同的 ZIP 包。由于所有 Lambda 函数都在同一个存储库中,因此所有函数的 ZIP 包都是相同的。出于某种原因,SAM 不明白这一点。我们是否希望为每个 Lambda 函数创建一个新的代码仓库?

2) ZIP 文件大小增加
正如我上面所说,每次调用 Lambda 函数时(如果是冷启动)都会下载 ZIP。这增加了延迟。 ZIP 包还有一个limit of 50MB

Lambda Layers 似乎是一个潜在的解决方案,但看起来设置并不容易。

有没有办法使用 SAM 创建特定于 Lambda 函数的 ZIP 文件?在我的例子中,每个 Lambda 函数会有 10 个 ZIP 文件,每个 Lambda 会在调用它们时下载相应的 ZIP。

是否可以让 SAM 为每个 Lambda 进行构建,并且只包含每个 Lambda 中实际使用的依赖项,而不是将所有依赖项打包在一起?

【问题讨论】:

  • 改用sam build && sam deploy
  • 这种情况下部署不包含依赖?如果我不运行sam package,ZIP 将如何生成?

标签: amazon-web-services aws-lambda aws-codepipeline aws-sam


【解决方案1】:

单独打包您的函数(仅包含它们需要的依赖项)目前还不是 SAM 做得很好的事情。可以考虑的一个选项是 bundling your function code,但这也带来了一系列问题,包括编译时复杂性增加、webpack 构建时间增加和堆栈跟踪无用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-26
    • 1970-01-01
    • 2017-10-28
    • 1970-01-01
    • 2014-06-08
    相关资源
    最近更新 更多