amazon-web-services - 模块化 aws lambda 代码的最佳实践
问题描述
我一直在检查互联网上的一些资源,AWS 中的所有 lambda 示例都非常基础,但我不确定我们将如何模块化具有多个依赖项的应用程序,例如在 java 中,我们通常有这样的结构
packages
repository
controllers
..
..
我们将与每个逻辑相关的代码放在包中,但现在在 AWS 中,这似乎更像是脚本,它将粘合各个部分,而不是我习惯的 OOP,所以我的问题是我们如何处理(如果应用)这种关系,因为我已经看到所有逻辑都在一个 lambda 中的代码,这似乎不是最好的方法,例如,如果我们有一些功能首先进行身份验证、授权、转换、调用外部 api、获取响应然后执行调用最终的休息端点,我们如何拆分它,例如将是相同的 lambda,其中包含包(目录)并且我们互相调用?或者我们有多个 lambda,每个都有一个目的?这将为每个 lambda 生成冷启动?
我在考虑使用层,但似乎很新,不确定这是否是生产就绪功能,并且似乎与重用代码更相关
解决方案
通常,当您开发 Lambda 函数时,该函数应该有一个单一的用途(这将使函数相对较小)。
如果您有多个操作,通过将每个 Lambda 作为自己的函数,它将改善开发和部署体验。让一个开发人员处理该功能可以降低破坏不相关功能的风险,同时还允许他们仅部署他们已经处理过的功能。
为了在 API 的 Lambda 之间进行编排,人们倾向于使用API Gateway(用于与 Lambda 通信的客户端,或者在 Lambda 本身之间)。
关于您提到的任何共享依赖项/库Lambda 层是正确的方法。它将允许您集中应用程序共享的依赖项,而无需每次都将 Lambda 与依赖项的一个版本打包在一起。
有一篇关于在 AWS Lambda 上开发的最佳实践的文章应该提供额外的指导。
推荐阅读
- c++ - 带有 abi:cxx11 的 GCC 未定义引用
- ios - firebase 是否可以根据电话数据或其他表单创建用户,避免在应用程序上注册以进行身份验证?
- c++-cli - 如何在 C++/CLI 中包装 C++ boost::variant 以授予来自 .NET 的访问权限
- java - wait() 不会保存应用程序的进度
- java - 如何在函数内创建一个变量,以保存其值从调用到调用
- php - Doctrine 中的自定义多对多关系
- django - 一种通过 Flower(或其他类似界面)查看特定任务日志的方法
- uri - 使用“?”更好吗?或“;” 在网址中?
- bazel - 如何让我的自定义标头模板规则传递它的输出下游 cc_binary/cc_library 依赖项?
- postgis - postgis - ST_Intersects 不工作,不同的测量系统