关于amazon web services:Api Gateway,同一个JAR中的多个lambda

Api Gateway, multiple lambda in the same JAR

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


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

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

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

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

我不会说这样做有对错之分。看看你想要做什么,想想你需要什么来管理部署并从那里开始。如果你弄错了,你总是可以用另一种方法重新开始。

我个人喜欢非常小的服务 Lambdas,它执行内部路由并处理多个操作,但它们仍然非常小并且专注于特定类型的任务,无论是数据库表的 CRUD 还是管理选定的几个密切相关的操作。


在 serverless.com 上有一些不错的建议

正如聚乙烯所说,答案是"视情况而定"。但他们列出了 4 种方法的优缺点:

  • 微服务模式
  • 服务模式
  • 单片模式
  • 图形模式
  • https://serverless.com/blog/serverless-architecture-code-patterns/