【发布时间】:2017-06-01 02:06:47
【问题描述】:
我是 AWS 的新手,想了解如何使用 AWS 部署动态网站。我来自自托管的角度(digitalocean + flask 应用程序),所以我对 AWS 的具体流程感到困惑。
使用自托管解决方案,流程类似于:
- 用户向我的服务器 (nginx) 发出请求
- nginx 然后将请求定向到我的烧瓶应用程序
- flask 应用处理特定路由(即 GET /users)
- flask 执行 db 操作,然后使用 jinja2 和 db 操作的结果构建一个 html 页面
- 将 html 返回给用户,然后用户的浏览器呈现页面。
对于 AWS,我了解以下内容:
- 用户向亚马逊的 API 网关发出请求(即 GET /users)
- API Gateway 可以调用 AWS Lambda 函数
- AWS Lambda 函数执行 db 函数或其他什么,返回一些数据
- API Gateway 以 JSON 形式返回结果(假设我将 content-type 设置为 JSON)
令人困惑的部分是如何为用户生成网页,而不仅仅是返回 JSON 数据?我看到两个选项:
1) 不知何故让 AWS Lambda 使用 Jinja2 模块,并在查询数据库中的数据后使用它来构建 HTML 页面。 API Gateway 将只返回完成的 HTML 文本。缺点是这将不再是一个纯粹的 api,所以我失去了灵活性。
2) 将 Flask 应用程序部署到 Amazon Beanstalk。 Flask 处理应用程序代码,例如会话处理、路由、HTML 模板生成,并调用 Amazon 的 API Gateway 以获取页面的任何必要数据。
我认为 (2) 是“正确”的做事方式;我获得了使用 Beanstalk 扩展烧瓶应用程序的好处,并获得了使用 API 网关调用 API 的灵活性。
我错过了什么吗?我是否误解了(2)中的网页服务?是否有另一种方法来托管动态网站,而不使用通过 AWS 的 Flask 等 Web 框架,我不知道?
【问题讨论】:
标签: python amazon-web-services flask aws-lambda aws-api-gateway