在AWS上使用NextJS SSR部署React应用的最便宜方法是?

时间:2020-04-25 22:16:12

标签: reactjs amazon-web-services amazon-s3 amazon-ec2 next.js

我知道Nextjs是一个需要服务器功能的Node框架,因此,将其用于服务器端渲染不能仅在S3上托管。 但是,这是否意味着唯一的选择是将整个应用程序托管在EC2上-这要贵得多-还是存在另一种中途解决方案?

6 个答案:

答案 0 :(得分:21)

AWS Next.js Terraform 模块

我们为此用例创建了一个开源 Terraform 模块,作为无服务器框架的低成本替代方案。我们不是仅依赖 Lambda@Edge 进行所有 SSR 操作,而是将 Lambda@Edge 仅用于路由(作为某种反向代理),然后通过 API 网关在内部将请求重定向到区域性 Lambda。

由于我们使用 CloudFront 作为反向代理,我们还可以将大部分静态文件请求拆分为 _next/static/* 用于 css、js 等,并通过 S3 直接为它们提供服务,而根本不涉及 Lambda@Edge 代理.

enter image description here

因此每个路由的每个请求的成本是不同的:

  • 静态资源请求:css、js、图片

    仅适用于 CloudFrontS3(对于 CloudFront 未命中)

  • HTML 请求:预渲染的 HTML 路由或需要服务器端渲染 (SSR) 的路由

    适用于 CloudfrontLambda@Edge(代理,以 1 毫秒步长计量)的成本。

    • 重写提供预渲染 HTML 的路由

      S3 的费用适用。

    • 使用服务器端渲染 (SSR) 的路由

      HTTP API-Gatewayregional Lambda 的成本(SSR,以 1 毫秒为单位计量)适用。

使用此模型的几千个请求的总成本通常远低于 0.50 美元/月,同时拥有一个由 CloudFront 边缘缓存提供支持的快速服务站点。

在 GitHub 存储库中查找更多信息:https://github.com/dealmore/terraform-aws-next-js

答案 1 :(得分:19)

Next.js SSR +无服务器框架+ AWS Lambda

用于部署Next.js SSR App,而不是遵循传统的管理和运行始终保持24x7运行的AWS EC2实例的方法。实际上,还有一种使用AWS lambda和Serverless框架的更具成本效益的现代方法。

问。什么是AWS lambda
AWS Lambda允许您运行代码而无需置备或管理服务器。您只需为您消耗的计算时间付费。

问。什么是Serverless framework
Serverless Framework Open Source使您可以使用无服务器架构开发应用程序,并使用AWS Lambda,Azure Functions,Google CloudFunctions等进行部署。

问。什么是Serverless-Next.js
这是一个无服务器组件,仅用于部署Next.js应用程序。此外,您在静态或公用文件夹中的任何资产都会自动上传到S3并从CloudFront提供服务,因此我认为这正是您所需要的。下面的架构说明了它如何向用户提供应用程序。

enter image description here

如果您是无服务器框架的新手,我建议您参加名为Serverless for Frontend Developers的无服务器社区的免费课程

如果您想快速尝试部署next.js应用程序,请观看本教程Next.js & Lambda @ Edge with Serverless Components,这是上述课程的一部分。

答案 2 :(得分:3)

NextJS + Serverless当前已部署在非免费的Lambda Edge上。您不享受Lambda的免费套餐(不是Lambda @ Edge)。

如果您的网站访问量少,我建议您使用在后端使用Lambda(AWS网络)的Vercel.com进行部署。

他们的业余版本是免费的,并且为AWS Lambda Free层提供了可比的大量免费流量和调用。

NextJS应用程序的部署就像通过GitHub集成上传到Github + Vercel的自动部署一样容易。您无需担心S3或托管或静态文件,一切都将在您推送到Github时托管在Vercel上。您只需要专注于开发即可。

当您的需求上升时(通过Hobby软件包,然后通过Pro软件包),则在Serverless @ Edge上部署将变得更具成本效益。

那时,您所需要做的就是切换域。

答案 3 :(得分:2)

不确定是否需要托管在Amazon上,但是您可以以每月5美元的价格在DigitalOcean上托管,也可以在Heroku的免费版上托管,直到您确定要迁移到Amazon之后才可以转向价格更高的解决方案并托管EC2:

  • DigitalOcean这将为您提供1 GB内存-25GB SSD-1TB传输,每月$ 5
  • Heroku这将为您提供512MB内存-免费提供1个Web和1个Worker Dyno,即使您付款,价格也可以承受,而且Heroku是托管服务,因此他们将照顾一切,而您不会不必设置任何内容

我相信这对您来说是一个好的开始,然后再支付更昂贵的解决方案

这个问题的答案,是的,如果您希望在Amazon内使用更完善的解决方案,那么EC2对于Amazon和Elastic beantalk来说是最便宜的

答案 4 :(得分:0)

您可以使用AWS Lightsail:https://aws.amazon.com/lightsail/

根据我对nextjs的经验,云功能并不是部署大型应用程序的好地方,因此,这是您的选择:

  1. 如果您的应用程序非常小且永远不会增长,请仅使用云功能。云功能在文件大小,依赖项,捆绑包大小等等方面有限制,等等
  2. AWS Lightsail:https://aws.amazon.com/lightsail/和一个小型VPS,您可以使用Nginx和node来设置自己的自我。就像每月$ 5一样,您就可以使用信用额度。
  3. 与数字1相同,但在Digital Ocean上。
  4. AWS Ec2

答案 5 :(得分:0)

要部署我们的nextJs网站,我们一直在使用AWS lambda:https://github.com/serverless-nextjs/serverless-next.js 使用它非常简单。 不幸的是,有时页面的加载非常慢。从2秒到7秒。 谷歌搜索控制台也证实了这一点。 enter image description here

我们找不到真正深入探讨此问题以及如何解决此问题的方法,但我怀疑这是一个冷门。经过一些研究,AWS在理论上可以并发解决它:

https://aws.amazon.com/blogs/compute/new-for-aws-lambda-predictable-start-up-times-with-provisioned-concurrency/

但是我无法使其正常工作,因为它是Lambda @ Edge,而且价格也非常昂贵! enter image description here

http://nachonacho.com,我们专注于SEO,因此加载页面的时间是我们最大的担忧。

我们最终决定使用简单的AWS EC2。

在这里您可以进行比较:

enter image description here

来源:https://www.site24x7.com/

enter image description here

  • 浅蓝色:EC2
  • 深蓝色:Lambda图片图片

来源:https://www.dareboost.com/