【问题标题】:Which design pattern to follow while writing AWS lambda code in Python 3.9 [closed]在 Python 3.9 中编写 AWS lambda 代码时要遵循哪种设计模式 [关闭]
【发布时间】:2021-10-06 18:36:40
【问题描述】:

我是一名 java 开发人员,刚刚开始使用 Python。我在 python 3.9 中编写了一个 AWS lambda 代码。在第一次尝试中,我将完整的代码写在一两个文件中。但是在某处我读到我们不应该创建胖文件。然后我尝试将代码隔离到不同的文件夹和文件中。文件夹,如 handlers、services、utils、dao、entity。每个文件夹都有一个文件,每个文件都有许多函数,可以通过导入独立于另一个文件调用。然后一位 Python 专家告诉我应用 OOPS 概念,并遵循 DDD 设计或 MVC 模式。 是否有必要遵循 OOPS 概念并在无服务器架构中创建类? 您能否指出一些示例 GIT 存储库,展示用于开发面向对象 lambda 的框架? AWS lambda 在请求时被激活,并在请求被提供时消失。它不像没有请求的 24 小时活跃的服务器。

在支持模块化编程的 Python 语言的 AWS lambda 代码中遵循的最佳设计模式或架构或编码范式是什么?

【问题讨论】:

  • 这不是 StackOverflow 问题。这是一个softwareengineering.stackexchange.com 的问题。
  • 设计模式与您如何组织源文件或是否使用 OOP 概念无关。它们是关于高级算法设计的。
  • 最好的设计模式是最适合你的!你当然可以命名包,如src,如果你觉得最舒服的话,可以使用驼峰式约定;-)

标签: python amazon-web-services design-patterns aws-lambda


【解决方案1】:

这在很大程度上取决于您的用例。

Lambda 是无状态的。在 Lambda 中为大多数情况构建类没有什么意义,因为您无法将该类实例化传递出 lambda。 (这意味着您必须在连续调用的不同 lambda 中再次重新实例化它)此外,由于 Lambda 中时间和内存的限制,如果它们的范围较小,则最好 - 他们会做一两件事然后更新数据库或调用另一个 lambda 或在 Step Function 中继续。您可能创建的最有可能的类是 Struct 类型——在 python 中实际上并没有这种类型。 python 中的字典执行与结构大致相同的功能,而且开销要少得多。

干净的代码和 TDD 意识形态表明,最好在 Lambda 处理程序中连续调用许多小函数。这使您可以在测试组件时获得更好的测试模式和行为测试,而无需模拟一堆东西。

这也很有帮助,因为虽然您可以在本地运行 lambda 处理程序,但如果您尝试在 lambda 中使用其中的一些内容并在您的local not 是否意味着 lambda 将在部署后成功运行。所以测试很好,但不是确定的。但是,如果您可以验证所有较小函数的行为,那么在云中的 lambda 级别进行故障排除的工作就会少得多。

至于任何其他架构模式......任何让你舒服的东西。您可以在 MVC 中使 lambda 成为控制器。然后,您可以围绕它组织您的文件结构。或者,您可以在 DDD 中为某个域收集一组 lambda,然后围绕它进行组织。老实说,一般情况下没有最好的方法,只有对您的项目最有效和最高效的方法。

但是,当您使用多个 lambda 时,需要注意的一点是它们是如何通过各种系统(如 CDK 或 Cloudformation)部署的。在这种情况下,最好让每个 lambda 在其自己的目录中仅在内部引用它(您必须对 Python Imports 感到满意才能使其在本地工作)

【讨论】:

    【解决方案2】:

    尝试将辅助函数写入 utils.py 文件,以使您的 lambda_function.py 文件不大。您还可以编写异步函数来减少超时错误,因为每个 lambda 都有自己的执行超时。服务模式最适合这类服务。您可以通过在一个 lambda 中调用 lambda 来调用异步函数。

    【讨论】:

    • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-10
    • 1970-01-01
    • 1970-01-01
    • 2019-05-18
    • 2011-06-29
    • 1970-01-01
    • 2021-07-28
    相关资源
    最近更新 更多