【问题标题】:Serving dynamic webpages using aws?使用 aws 提供动态网页?
【发布时间】: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


    【解决方案1】:

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

    • 在 S3 上托管您的前端静态文件(html、css、js)。
    • 将您的 S3 存储桶配置为静态 Web 服务器
    • 为动态处理配置您的 lambda,并使用 API 网关将其向外部开放
    • 您的 JS 通过 API 网关调用 lambda,所以不要忘记激活 CORS(在 S3 存储桶和 API 网关上)。
    • 配置 route53 以将其链接到您的存储桶(您的 route53 配置必须与您的存储桶同名),以便您可以使用自己的 DNS 名称,而不是通用 S3-webserver url

    【讨论】:

      【解决方案2】:

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

      优点:

      • 小批量时可能更便宜
      • 不必担心缩放问题
      • Lambda 函数甚至比 beanstalk 更容易管理。

      缺点:

      • 会有一些延迟开销
      • 在某些方面不太灵活,尽管 Python 得到了很好的支持,并且您应该能够导入 jinja2 模块。

      您提出的两种解决方案都可以很好地发挥作用,这在某种程度上取决于您如何看待利弊。

      【讨论】:

        猜你喜欢
        • 2015-08-07
        • 1970-01-01
        • 2016-12-15
        • 2013-06-09
        • 2018-01-30
        • 2013-03-06
        • 1970-01-01
        • 1970-01-01
        • 2013-01-27
        相关资源
        最近更新 更多