I'm trying to deploy an API suite by using Api Gateway and implementing code in Java using lambda. Is it ok to have many ( related, of course ) lambdas in a single jar ( what I'm supposing to do ) or it is better to create a single jar for each lambda I want to deploy? ( this will became a mess very easily)
2 回答
这真的是一个品味问题,但有一些事情你必须考虑。
首先,单个 Lambda 上传的大小是有限制的(撰写本文时为 50MB)。
其次,您上传的所有代码的总大小也有限制(目前为 1.5GB)。这些限制对于您的用例可能不是问题,但需要注意。
接下来你必须考虑的是你想要你的开销。假设您将 CRUD 接口部署到单个 Lambda,并从 API Gateway 传递“操作”参数,以便您知道在执行 Lambda 函数时要执行的操作。这会给您的执行增加一点开销,因为您必须将操作路由到适当的操作。这可能是一个非常快速的路由,但是,它会为您的函数执行增加 CPU 周期。
另一方面,在多个 Lambda 函数上部署同一个 jar 将很快让您接近我之前提到的限制,并且随着数量的增长,它还会增加管理 Lambda 函数的管理开销。它们当然可以通过 CloudFormation 或 cli 脚本进行管理,但仍会增加管理开销。
我不会说这样做有正确和错误的方法。看看你想要做什么,想想你需要什么来管理部署并从那里开始。如果你弄错了,你总是可以用另一种方法重新开始。
就我个人而言,我喜欢非常小的服务 Lambda,它执行内部路由并且处理的不仅仅是单个操作,但它们仍然非常小并且专注于特定类型的任务,无论是数据库表的 CRUD 还是管理选定的几个非常密切相关的任务操作。
serverless.com 上有一些不错的建议
正如聚乙烯所说,答案是“视情况而定”。但他们列出了 4 种方法的优缺点:
- 微服务模式
- 服务模式
- 单片模式
- 图形模式
https://serverless.com/blog/serverless-architecture-code-patterns/