当前位置: 首页 > 知识库问答 >
问题:

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

梅飞龙
2023-03-14

我对AWS Lambda非常陌生,基于我在网上找到的许多例子(阅读无穷无尽的文档),我正在努力理解它的功能。我知道使用这种服务的主要目的是实现一个无服务器架构,通过允许Lambda和API Gateway承担管理您的服务器的角色,该架构是低成本的,并且可能是高效的(所以无服务器并不意味着您不使用服务器,而是该架构为您处理事情)。我将我的研究组织成开发人员在Lambda上部署Flask web应用程序时采用的两种通用方法:

> 使用 zappa

  • 将整个应用程序部署到 Lambda,而 zappa 配置(json 文件)将是 API 网关身份验证。

    只部署函数,即解析黑匣子,它将用户输入转换为后端endpoint期望的形式(以及向后)-

    (然后是3,它不使用API网关,而是在应用程序本身中调用Lambda函数——但我真的想获得使用API网关的实际体验)

    以下是我对以上两种方法的疑问:

    对于1,我不理解Lambda如何调用Flask应用程序中的函数。根据我的理解,Lambda只调用具有参数event和context或url调用(由API Gateway制定的url)的函数,实际上是调用Flask应用程序中单独函数的事件,因此使Lambda能够作为“无服务器”环境运行,这对我来说没有意义,因为在我分析的大多数示例中,是用户输入数据。这意味着应用程序中的一些函数没有事件,而一些函数有事件,这意味着Lambda以某种方式神奇地找出了如何处理不同的函数调用?

    我也知道 Lambda 的容量确实有限,所以这是最好的方法吗?这似乎是在 Lambda 上部署 Web 应用程序的标准方法。

    对于2,我了解导致将API Gateway url合并到Flq应用程序中的步骤。Flq应用程序因此将使用url访问Lambda函数,并具有用于用户访问的HTTPendpoint。然而,这意味着,如果我在本地计算机上有Flq应用程序,则只有当我在计算机上运行应用程序时,应用程序才会被托管-我希望它具有持久的公共访问权限(希望如此)。我阅读了关于AWS Cloud9的文章-这会是一个很好的解决方案吗?我应该在哪里部署应用程序本身来优化这个架构——而不使用剥夺架构的连续性的服务(比如EC2实例可能是S3上的OR,我将在那里放置我的前端html文件,并托管一个网站)?此外,回到1(对不起,我试图以连贯的方式组织我的想法,它工作得不太好),只要我保持API网关endpoint打开,应用程序就会始终如一地运行吗?

    我不知道使用AWS Lambda和API Gateway部署Flq应用程序的最佳实践是什么,但根据我的发现,上述两个是最常用的。如果您能回答我的问题,以便我可以真正开始使用AWS Lambda,那将非常有帮助!谢谢!(我确实阅读了所有亚马逊文档,这些是我在开始实验之前剩下的最后一个问题:))

  • 共有1个答案

    斜向文
    2023-03-14

    >

  • Zappa有自己的代码来处理请求并使它们与“Flask”格式兼容。请记住,在使用 Lambda 时,这两种情况下您都没有真正按预期使用 Flask。仅在进行调用时调用 Lambda,flask 通常会继续运行以查找请求。但是持续运行的部分由此处的 API 网关处理。Zappa 本质上是在 API 网关上创建一个 ANY 请求,该请求被传递给您的 lambda 处理程序,该处理程序解释它并使用它来调用您的烧瓶函数

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

    我想说,这里的最佳做法是不要使用Flask,而是使用API Gateway Lambda选项。这允许您在API上设置自定义安全性和检查,并使应用程序更加稳定,因为每个请求都有自己的lambda。

  •  类似资料:
    • 我使用托管Gitlab来托管我的Git存储库,最近我使用它来构建/部署PHP和Java应用程序到服务器。 我想做的是,一旦构建完成,使用SSH部署应用程序。有时,这可能只是通过SSH将最终构建的内容(PHP文件)上载到服务器,或者有时它可能是上载已编译的文件。jar文件,然后在远程服务器上执行命令以重新启动服务。 我已经将我自己的Docker容器设置为构建环境,这包括Java、PHP、Compos

    • Requirements 运行一个Spark Streaming应用程序,有下面一些步骤 有管理器的集群-这是任何Spark应用程序都需要的需求,详见部署指南 将应用程序打为jar包-你必须编译你的应用程序为jar包。如果你用spark-submit启动应用程序,你不需要将Spark和Spark Streaming打包进这个jar包。 如果你的应用程序用到了高级源(如kafka,flume),你需

    • 我构建了一个web应用程序,包含一个Spring MVC项目,带有一个mysql数据库和一个tomcat7服务器。这个现在发布到OpenShift的GIT上。但是启动服务器只需要160毫秒,我可以清楚地看到没有加载任何东西。 我如何做一个真正的部署并将Openshift Tomcat连接到我的项目?我可以编码,但是就部署而言,我不是一个聪明的灯泡。 怎么了? 编辑:根据要求,pom.xml: :

    • 每次我尝试在netbeans上部署web应用程序时,都会出现以下错误:\ C: \Users{myname}\Documents\NetBeansProjects\WebApplication2\nbproject\build impl。xml:1045:模块尚未部署。有关详细信息,请参阅服务器日志。 问题是,apache日志中没有错误! 我已经卸载了我的netbean并重新安装它,但问题仍然存在

    • Netbeans IDE日志包含以下内容: 生成的EAR通常可以使用asadmin命令部署到Glassfish。只有当试图通过Netbeans部署它时,它才会失败。 似乎当禁用secure admin时,我可以通过NetBeans执行部署。我遇到了一些安全管理和SSL的问题。 > 我已经对其他EAR项目进行了实验(从netbeans生成了一个新的maven EAR),它将OK部署到GlassFis

    • 我正试图将一个应用程序部署到谷歌云平台。我有我的后端和前端运行在单独的docker容器中,每个项目都有自己的Docker-Compose和Dockerfile,我使用一个容器为我的Postgres数据库。我将容器部署到Dockerhub,并创建了Kubernetes服务和部署。(使用Kubernetes Kompose:所以我首先将docker-compose转换为deployments.yaml