我对 AWS Lambda 非常陌生,并且根据我在网上找到的许多示例(+阅读无尽的文档)很难理解其功能。我了解使用此类服务的主要目标是通过允许 Lambda 和 API 网关承担管理服务器的角色来实现成本高效且可能省力的无服务器架构(因此无服务器并不意味着您不使用服务器,但架构会为您处理所有事情)。我将研究整理为开发人员将 Flask Web 应用程序部署到 Lambda 时采用的两种常用方法:
-
部署整个申请使用 zappa 和 zappa 配置(json 文件)到 Lambda 将进行 API 网关身份验证。
-
Deploy 仅功能,将用户输入转换为后端端点期望的形式(也向后)的解析黑盒 -> 从配置 Lambda 代理的 API 网关获取代理 url -> 拥有一个使用该 url 的单独应用程序
(还有 3 个,它不使用 API 网关并调用应用程序本身中的 Lambda 函数 - 但我真的很想获得使用 API 网关的实践经验)
以下是我对上述两种方法的疑问:
对于1,我不明白Lambda如何调用Flask应用程序中的函数。根据我的理解,Lambda 仅调用具有参数 event 和 context 的函数,或者 url 调用(由 API 网关制定的 url)实际上是调用 Flask 应用程序中单独函数的事件,从而使 Lambda 能够充当“无服务器环境 - 这对我来说没有意义,因为在我分析的大多数示例中,事件是用户输入数据。这意味着应用程序中的某些函数没有事件,而有些函数则有事件,这意味着 Lambda 以某种方式神奇地找出如何处理不同的函数调用?
我也知道Lambda的容量确实有限,那么这是最好的方法吗?这似乎是在 Lambda 上部署 Web 应用程序的标准方法。
对于 2,我了解将 API 网关 URL 合并到 Flask 应用程序中的步骤。因此,Flask 应用程序将使用 url 来访问 Lambda 函数,并具有用于用户访问的 HTTP 端点。然而,这意味着,如果我的本地计算机上有 Flask 应用程序,则仅当我在计算机上运行该应用程序时才会托管该应用程序 - 我希望它具有持久的公共访问权限(希望如此)。我读到了有关 AWS Cloud9 的内容 - 这是一个好的解决方案吗?我应该在哪里部署应用程序本身来优化此架构,而不使用会消除架构无服务器性的服务(例如 EC2 实例,或者在 S3 上,我将在其中放置前端 html 文件并托管网站)?另外,回到 1(抱歉,我试图以连贯的方式组织我的想法,但效果不太好),只要我保持 API 网关端点打开,应用程序就会一致运行吗?
我不知道使用 AWS Lambda 和 API Gateway 部署 Flask 应用程序的最佳实践是什么,但根据我的发现,以上两种是最常用的。如果您能回答我的问题,那将非常有帮助,这样我就可以真正开始使用 AWS Lambda!谢谢你! (+我确实阅读了所有亚马逊文档,这些是我开始实验之前最后剩下的问题:))
-
Zappa 有自己的代码来处理请求并使它们与“Flask”格式兼容。请记住,在使用 Lambda 时,您并没有真正按照预期使用 Flask。仅当进行调用时才会调用 Lambda,Flask 通常会持续运行以查找请求。但持续运行的部分在这里由 API Gateway 处理。 Zappa 本质上在 API 网关上创建一个 ANY 请求,该请求被传递到您的 lambda 处理程序,该处理程序解释它并使用它来调用您的 Flask 函数。
-
如果您正在构建 API Gateway + Lambda,则不需要使用 Flask。简单地创建一个由 API 网关传递给 lambda 处理程序的参数调用的函数会容易得多。您可以在 S3 上托管的前端应用程序(如果它是静态的或 Angular 的)。
我想说这里的最佳实践是不使用 Flask 并使用 API Gateway + Lambda 选项。这使您可以对 API 进行自定义安全性和检查,并使应用程序更加稳定,因为每个请求都有自己的 lambda。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)