Api 网关,同一个 JAR 中的多个 lambda

Api Gateway, multiple lambda in the same JAR

我正在尝试使用 Api 网关部署 API 套件,并使用 lambda 在 Java 中实现代码。在一个 jar 中包含多个(当然是相关的)lambda 是否可以(我打算做什么),或者最好为我要部署的每个 lambda 创建一个 jar? (这很容易变得一团糟)

这确实是一个品味问题,但您必须考虑一些事项。

首先,单个 Lambda 上传的大小是有限制的(撰写本文时为 50MB)。
其次,您上传的所有代码的总大小也有限制(目前为 1.5GB)。 这些限制对于您的用例来说可能不是问题,但有必要了解一下。

接下来您需要考虑的是您希望开销的位置。 假设您将一个 CRUD 接口部署到单个 Lambda,并从 API 网关传递一个 "action" 参数,以便您知道在执行 Lambda 函数时要执行哪个操作。 这会为您的执行增加一些开销,因为您必须将操作路由到适当的操作。这可能是一个非常快速的路由,但是,它会为您的函数执行增加 CPU 个周期。

另一方面,在多个 Lambda 函数上部署同一个 jar 将很快使您接近我之前提到的限制,并且随着数量的增长,它还会增加管理 Lambda 函数的管理开销。它们当然可以通过 CloudFormation 或 cli 脚本进行管理,但仍会增加管理开销。

我不会说这样做有对错之分。查看您正在尝试做什么,考虑您需要什么来管理部署并从那里获取它。如果你弄错了,你总是可以用另一种方法重新开始。

就我个人而言,我喜欢非常小的服务 Lambdas,它们执行内部路由并且处理的不仅仅是单个操作,但它们仍然非常小并且专注于特定类型的任务,例如数据库的 CRUD table 或管理选定的几个密切相关的操作。

serverless.com

上有一些不错的建议

正如聚乙烯所说,答案是 "it depends"。但是他们列出了 4 种处理方法的优缺点:

  1. 微服务模式
  2. 服务模式
  3. 整体模式
  4. 图形模式

https://serverless.com/blog/serverless-architecture-code-patterns/