通过 AWS Lambda 部署 Flask Web 应用程序

2023-12-20

我对 AWS Lambda 非常陌生,并且根据我在网上找到的许多示例(+阅读无尽的文档)很难理解其功能。我了解使用此类服务​​的主要目标是通过允许 Lambda 和 API 网关承担管理服务器的角色来实现成本高效且可能省力的无服务器架构(因此无服务器并不意味着您不使用服务器,但架构会为您处理所有事情)。我将研究整理为开发人员将 Flask Web 应用程序部署到 Lambda 时采用的两种常用方法:

  1. 部署整个申请使用 zappa 和 zappa 配置(json 文件)到 Lambda 将进行 API 网关身份验证。

  2. 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!谢谢你! (+我确实阅读了所有亚马逊文档,这些是我开始实验之前最后剩下的问题:))


  1. Zappa 有自己的代码来处理请求并使它们与“Flask”格式兼容。请记住,在使用 Lambda 时,您并没有真正按照预期使用 Flask。仅当进行调用时才会调用 Lambda,Flask 通常会持续运行以查找请求。但持续运行的部分在这里由 API Gateway 处理。 Zappa 本质上在 API 网关上创建一个 ANY 请求,该请求被传递到您的 lambda 处理程序,该处理程序解释它并使用它来调用您的 Flask 函数。

  2. 如果您正在构建 API Gateway + Lambda,则不需要使用 Flask。简单地创建一个由 API 网关传递给 lambda 处理程序的参数调用的函数会容易得多。您可以在 S3 上托管的前端应用程序(如果它是静态的或 Angular 的)。

我想说这里的最佳实践是不使用 Flask 并使用 API Gateway + Lambda 选项。这使您可以对 API 进行自定义安全性和检查,并使应用程序更加稳定,因为每个请求都有自己的 lambda。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过 AWS Lambda 部署 Flask Web 应用程序 的相关文章

随机推荐

  • Hibernate (4.1.2) 和 Spring (3.1.2) – ManyToMany 关系不在 JoinTable 中存储记录

    我有一个问题 需要你的帮助来解决这个问题 希望这篇文章可以成为类似问题的参考 在我的最小化业务模型中 有用户和标题 标题应首先创建 并且可以分配给多个用户 并且用户可以共享相同的标题 因此 我创建了两个名为 User 和 Title 的实体
  • OpenGL SL 和 OpenGL ES 2.0 SL 之间的区别

    我需要为 Android 编写基于 opengl 的应用程序 OpenGL SL 和 OpenGL ES 2 0 SL 之间以及 OpenGL 和 OpenGL ES 之间有很大的区别吗 如果我使用一些与通用 OpenGL 而不是 Open
  • 如何获取目录 URL 的文件/目录列表?

    假设我有一个网址 http java sun com j2se 1 5 pdf我想获取以下所有文件 目录的列表pdf目录 我正在使用 Java 5 我可以用这个程序获取目录列表http www httrack com http www ht
  • 实体框架 5 更新记录

    我一直在探索在 ASP NET MVC3 环境中编辑 更新 Entity Framework 5 中的记录的不同方法 但到目前为止 没有一种方法满足我需要的所有条件 我会解释原因 我发现了三种方法 我将提及它们的优缺点 方法1 加载原始记录
  • 如何使用 Material-ui 在工具栏内拥有全高选项卡?

    我试图有一个固定的标题 右侧应该是选项卡 这
  • “gets() 未在此范围内声明”错误 [重复]

    这个问题在这里已经有答案了 使用以下代码 我收到 gets 未在此范围内声明 错误 include
  • 在Vuejs中创建全局变量

    我正在创建一个应用程序VueJS我想创建一个服务或全局变量来存储客户端是否向服务器发出请求 我一直在考虑配置一个中断器 在发出请求时将全局变量设置为 true 在请求完成时将变量设置为 false 因此 当我使用加载器组件时 它仅在变量为
  • 如何设计数据库约束,以便两个实体只有在两个字段值匹配时才能具有多对多关系?

    我有一个包含四个表的数据库 如下所示 地址簿 id 更多领域 Contact id地址簿 ID更多领域 Group id地址簿 ID更多领域 联系方式组 复合键组号联系方式 我的关系是地址簿 gt 联系人的一对多关系 地址簿 gt 组的一对
  • 构建中的 Unity 动画故障

    我的游戏中有一个角色带着雨伞和公文包 雨伞和公文包都是角色装备的一部分 他在编辑器和独立 PC 版本中的动画效果和外观都很棒 参见下面的示例 该角色还有一个打开雨伞的动画 我正在使用mecanim 然而 当我发布 Web Android 或
  • 如何将 printSchema 的结果保存到 PySpark 中的文件中

    我用过df printSchema 在 pyspark 中 它为我提供了具有树结构的模式 现在我需要将其保存在变量或文本文件中 我尝试过以下保存方法 但没有成功 v str df printSchema print v and df pri
  • 在 Windows 上的 git bash 中设置 ls 的颜色

    我最近安装了 Windows 版 GitHub 并且正在使用 git bash 提示符 现在困扰我的一件事是 当我输入 LS 时 所有目录都以蓝色列出 如何更改我的 git bash shell 以便当我输入 LS 时 目录以不同的颜色列出
  • JavaScript - 获取调用对象[重复]

    这个问题在这里已经有答案了 可能的重复 Javascript 如何找到调用者函数 https stackoverflow com questions 280389 javascript how do you find the caller
  • 如何将 Highcharter 图保存为本地磁盘上的图像?

    hc gt hc add series name London data citytemp london type area gt hc rm series name New York 我要出口hc作为 png 或 jpg 这可以通过选择导
  • Javascript 导出文本文件在 Firefox 中无法识别 \r\n

    我正在使用以下代码创建一个用于从 javascript 下载的文本文件 var lineFeed r n var errorFile errorFile This is a test linefeed errorFile errorFile
  • 使用活动记录进行不区分大小写的搜索

    我使用rails 3 0 4 这是我的 Rails 应用程序中的一段 Arel 查询 如何使用 upcase 方法以与数据库无关的方式进行不区分大小写的搜索 Customer where company id and firstname l
  • python 读取流时即时 md5

    python 3有用于制作过滤流的结构吗 特别是 我的目标是计算从带有请求的 REST 服务读取的内容的 md5 校验和 而无需制作额外的副本 如果我可以对某种过滤器流进行子类化 然后将字节推入 hashlib 派生的 md5 对象中 那就
  • 如何将godaddy域链接到AWS Elastic Beanstalk环境? [关闭]

    Closed 这个问题是与编程或软件开发无关 help closed questions 目前不接受答案 我在尝试链接我时遇到了这个问题Godaddy 域名与AWS Elastic Beanstalk 实例 我找到了很多关于如何链接的文档E
  • 传递二维数组,在 C 中有效,但在 C++ 中无效 [重复]

    这个问题在这里已经有答案了 我将一个二维数组传递给 mark 函数 void mark int n int m int i int j int canvisit m int a m 这段代码在 Codeblocks 上的 C 中运行良好 但
  • javascript中的QR码生成库[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我目前正在寻找一个可以对二维码中的文本进行编码的js库 唯一的 http d project googl
  • 通过 AWS Lambda 部署 Flask Web 应用程序

    我对 AWS Lambda 非常陌生 并且根据我在网上找到的许多示例 阅读无尽的文档 很难理解其功能 我了解使用此类服务 的主要目标是通过允许 Lambda 和 API 网关承担管理服务器的角色来实现成本高效且可能省力的无服务器架构 因此无