Python 使用aws服务动态网页?

Python 使用aws服务动态网页?,python,amazon-web-services,flask,aws-lambda,aws-api-gateway,Python,Amazon Web Services,Flask,Aws Lambda,Aws Api Gateway,一般来说,我对AWS是新手,希望了解如何使用AWS部署动态网站。我来自一个自托管的视角(digitalocean+flask应用程序),所以我对AWS的具体流程感到困惑 使用自托管解决方案,过程如下: 用户向我的服务器(nginx)发出请求 然后,nginx将请求定向到我的烧瓶应用程序 flask应用程序处理特定路径(即获取/用户) flask执行db操作,然后使用jinja2和db操作的结果构建一个html页面 将html返回给用户,用户的浏览器呈现页面 通过AWSAWS,我了解以下内容:

一般来说,我对AWS是新手,希望了解如何使用AWS部署动态网站。我来自一个自托管的视角(digitalocean+flask应用程序),所以我对AWS的具体流程感到困惑

使用自托管解决方案,过程如下:

  • 用户向我的服务器(nginx)发出请求
  • 然后,nginx将请求定向到我的烧瓶应用程序
  • flask应用程序处理特定路径(即获取/用户)
  • flask执行db操作,然后使用jinja2和db操作的结果构建一个html页面
  • 将html返回给用户,用户的浏览器呈现页面
通过AWSAWS,我了解以下内容:

  • 用户向Amazon的API网关(即GET/users)发出请求
  • API网关可以调用AWS Lambda函数
  • AWS Lambda函数执行db函数或其他函数,返回一些数据
  • API网关将结果返回为JSON(假设我将内容类型设置为JSON)

令人困惑的是,我如何为用户生成网页,而不仅仅是返回JSON数据?我看到两种选择:

1) 以某种方式让AWS Lambda使用Jinja2模块,并在查询数据库数据后使用它构建HTML页面。API网关将只返回完成的HTML文本。缺点是这将不再是一个纯粹的api,所以我失去了灵活性

2) 将Flask应用程序部署到Amazon Beanstalk上。Flask处理应用程序代码,如会话处理、路由、HTML模板生成,并调用Amazon的API网关来获取页面所需的任何数据

我认为(2)是“正确”的做事方式;我可以利用Beanstalk扩展flask应用程序,还可以灵活地使用API网关调用API



我遗漏了什么吗?我是否误解了(2)中关于提供网页的内容?有没有其他方法可以在不使用AWS的web框架(如Flask through AWS)的情况下托管动态网站,我不知道这一点?

推荐使用lambda和EC2托管服务器的方法是:

  • 在S3(html、css、js)上托管前端静态文件
  • 将S3 bucket配置为静态web服务器
  • 为动态治疗配置lambda,并使用API网关将其打开
  • 您的JS通过API网关调用lambda,因此不要忘记激活CORS(在S3 bucket和API网关上)
  • 将route53配置为将其与bucket链接(route53配置必须与bucket同名),以便您可以使用自己的DNS名称,而不是通用的S3 Web服务器url

您必须权衡通过API GW和Lambda为动态网站提供服务的利弊

优点:

  • 可能在小批量时更便宜
  • 不必担心缩放
  • Lambda函数甚至比beanstalk更易于管理
缺点:

  • 将有一些延迟开销
  • 虽然Python得到了很好的支持,而且您应该能够导入jinja2模块,但在某些方面灵活性较差
你提出的两种解决方案都能很好地发挥作用,这取决于你如何看待利弊