模块化 aws lambda 代码的最佳实践

Best practices for modularize aws lambda code

我一直在检查 Internet 上的一些资源,AWS 中的所有 lambda 示例都非常基础,但我不确定我们将如何模块化具有多个依赖项的应用程序,例如在 java 中我们通常有像这样的结构

packages
  repository
  controllers
  ..
  ..

我们将与每个逻辑相关的代码放在包中,但现在在 AWS 中,这似乎更像是将各个部分粘合在一起的脚本,而不是我习惯的 OOP,所以我的问题是我们如何处理(如果应用)这种关系,因为我已经看到所有逻辑都在一个 lambda 中的代码,这似乎不是最好的方法,例如,如果我们有一些功能可以验证、授权、转换、调用外部 api,获取响应,然后调用最终的 rest 端点,我们如何拆分它,例如,内部包含包(目录)的同一个 lambda 和我们互相调用?或者我们有多个 lambda,每个都有一个目的?这将为每个 lambda 生成冷启动?

我在考虑使用层,但看起来很新,不确定这是否是生产就绪功能,而且似乎与模块化代码的方式在所有环境中通用的重用代码更相关

通常,当您开发 Lambda 函数时,该函数应该具有单一用途(这将使该函数保持相对较小)。

如果您有多个操作,通过将每个 Lambda 作为其自己的函数,它将改善开发和部署体验。让一个开发人员处理该功能可以降低破坏不相关功能的风险,同时还允许他们仅部署他们处理过的功能。

为了在 API 的 Lambda 之间进行编排,人们倾向于使用 API Gateway(无论是为了您的客户与 Lambda 通信,还是在 Lambda 之间)。

关于您提到的任何共享 dependencies/libraries Lambda Layers 是正确的方法。它将允许您集中应用程序共享的依赖项,而不是每次都需要将 Lambda 与一个版本的依赖项打包在一起。

Best Practices for Developing on AWS Lambda 上有一篇文章应该提供更多指导。