模块化AWS Lambda代码的最佳实践

问题描述

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

packages
  repository
  controllers
  ..
  ..

并且我们将与每个逻辑相关的代码放入包中,但是现在在AWS中,这似乎更像是脚本,它将比我惯用的OOP粘合各个部分,所以我的问题是我们如何处理(如果适用)这种关系,因为我已经看到了所有逻辑都在一个lambda中的代码,而且这似乎并不是最好的方法,例如,如果我们有一些功能可以首先进行身份验证,授权,转换,调用外部api,获取响应并然后调用最终的剩余端点,我们如何将其拆分,例如,将是一个内部带有package(directories)的lambda并彼此调用?还是我们有多个lambda,每个lambda有一个目的?这会为每个lambda产生冷启动吗?

我当时在考虑使用层,但是似乎很新,并且不确定这是否可以用于生产环境,并且似乎与在整个环境中通用的复用代码(将代码模块化)更相关

解决方法

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

如果您有多个操作,则通过将每个Lambda用作其自己的功能,将改善开发和部署体验。由单个开发人员来开发该功能可以降低破坏不相关功能的风险,同时还可以使他们仅部署他们已经使用的功能。

为了在用于API的Lambda之间进行协调,人们倾向于使用API Gateway(对于与Lambda进行通信的客户,或者在Lambda之间进行协调)。

关于您提到的任何共享依赖项/库Lambda Layers是正确的方法。它将使您可以集中化应用程序共享的依赖关系,而不必每次都将Lambda与依赖关系的版本打包在一起。

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