AWS 中托管的无服务器的解决方案设计



我正在 AWS 中设计一个仅包含 2 个站点的网站解决方案:主控制面板在图表(索引站点)中显示公司数据,以及每个公司的单个页面。

先决条件:

  • 无服务器。
  • 基于按需流量的经济高效的解决方案。
  • 所有内容都可以公开访问。 无需登录。
  • 网站在 HTML 中使用 JS。
  • 数据每天更改 1 次。

功能:

  • 主仪表板(JS中的图形)读取动态数据(最近30个报告)。数据可以从文件读取:txt,json或数据库:dynamoDB。因为它已经 要公开访问,我认为使用数据库不是一个
    好的策略。

  • 公司页面。用户可以公开发表评论并通过开始评分。

您个人将如何设计此解决方案?

我的第一个方法是:控制面板站点从 txt 文件中读取数据,公司站点使用 DynamoDB 保存/显示评论和评级。

我建议您使用某种"编排框架"在 AWS 中启动此类服务。或者,您可以为此目的手动编写和管理 Cloudformation 模板。

您也不必担心将这些组件中的每一个都保存在单独的 git 存储库中。如有必要,您还可以为每个组件使用不同的编程语言。这样,您不仅可以将其设计为"无服务器",还可以利用微服务架构,而 AWS 在该领域正在大力推进该架构。

此示例应快速入门:https://serverless.com/examples/aws-node-single-page-app-via-cloudfront/

应用程序的静态部分(HTML + JS)应该依靠API来收集数据。

这些 API 可以是 Lamba 函数,前面有 API 网关。这将允许您安全地连接到数据库,而不必担心安全性。

此示例应快速启动 API 部分:https://serverless.com/examples/aws-node-rest-api-with-dynamodb-and-offline/

考虑到 Lambda、S3 和 DynamoDB 的定价方式(大型免费套餐),这很可能会对每月前 50K 名左右的访客免费运行,每个 50K 的每月访客增量约为 2-3 欧元/月。

这实际上取决于数据的更新频率以及数据显示的实时性。

如果只是每日更新,并且您可以承受几分钟的更新延迟,我会每天使用 Jekyll(例如通过 Siteleaf)或 Hugo(可以在 AWS Lambda 上运行)生成包含新数据的静态页面。

然后,自动将这些页面导出到 S3 存储桶,并使用 Cloudfront 缓存所有内容,以获得更好的性能和更低的成本。速度极快,无移动部件,维护简单。

如果您确实需要显示的数据持续保持最新,请使用 S3 托管的单页应用程序,从基于 Lambda-DynamoDB 的 API(前面是 API 网关)获取数据。

您可以使用无服务器框架或类似的东西来部署它,它们比CloudFormation本身更加用户友好。

最新更新