首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将next.js 9部署到aws

如何将next.js 9部署到aws
EN

Stack Overflow用户
提问于 2019-09-26 07:57:36
回答 4查看 11.2K关注 0票数 11

我正在用next.js9开发一个项目。我有一些问题。我想将我的next.js 9项目部署到AWS。

  1. 正式的next.js 9文档告诉我“页面目录中的每个页面都变成了一个无服务器的lambda。”上面的库不像医生那样工作。如何从每个页面部署到每个lambda?
  2. 什么是合理的部署解决方案?请在生产级别使用nextjs 9的人帮助我。
  3. 我正在使用这个库https://github.com/danielcondemarin/serverless-next.js。效果很好。但所有的选择都是固定的。我想把我的项目部署到东京地区。但我不知道如何改变地区。总是部署到北维吉尼亚地区。我已经查过医生了,但我认为他们没有其他选择。像这个文件一样测试。

serverless.yml

代码语言:javascript
复制
myNextApplication:
  component: serverless-next.js
region: ap-northeast-1

但它不起作用。如果有人知道如何使用无服务器-next.js更改区域。请帮帮我。

提前谢谢你

EN

回答 4

Stack Overflow用户

发布于 2020-12-22 19:53:42

将Next.js部署到AWS需要一个抽象层,因为Next.js最初是作为Node.js服务器设计的。

Vercel这样做是通过一个名为now-node-bridge的东西,它基本上在Lambda函数中启动一个本地Node.js http-服务器,然后创建一个来自Lambda事件的请求。

下面是一个简化的流程图,当您对部署在Vercel上的Next.js应用程序运行请求时,会发生什么情况:

虽然Next.js是开源的,但是在Vercel上执行从HTTP请求到Lambda的转换的代理不是。这就是为什么对AWS进行无服务器部署仍然是一项棘手的任务,而Vercel内部也使用AWS Lambda进行部署。

部署到AWS Lambda

虽然Serverless框架可能仍然是目前最流行的选择,但我为这个任务创建了一个简单的使用Terraform模块。Terraform是一个开源的CLI应用程序,用于管理云--在AWS这样的提供者中管理资源。

安装了Terraform后,它非常简单:

  1. 转到您的Next.js应用程序并安装此助手: npm i -D tf-next # npm或纱线添加-D tf-next #纱
  2. 将以下脚本tf-next添加到Next.js应用程序的package.json中: { ..。“脚本”:{ "dev":"next"," build“:"next build","start":"next start",+ "tf-next":"tf-next build”}}.
  3. 创建一个新的main.tf,其内容就在您的package.jsonmain.tf terraform { required_providers { aws ={required_providers= "hashicorp/aws“版本= "~> 3.0”}#主区域,其中资源应该在提供者"aws“{ your =”us 1“}模块"tf_next”{ source = "dealmore/ next -js/aws“}}中创建。
  4. 创建一个AWS访问密钥并在终端中公开它: 出口AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY出口AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
  5. 构建应用程序并使用terraform将其部署到AWS: terraform init #只需要在第一次运行Terraform纱线tf-下一步#构建next.js应用程序terraform计划#查看Terraform将创建什么资源terraform应用#将应用程序部署到您的AWS帐户

您可以将main.tf中的区域更改为支座 Lambdas中的任何AWS区域,而您定义的区域就是部署Lambdas的区域。

有关更多信息,请参见GitHub页面:基于Next.js的AWS Next.js平台模块

票数 10
EN

Stack Overflow用户

发布于 2020-02-20 08:09:52

有一个webpack插件,可以帮助下一步-aws-lambda-webpack-插件

  1. 这个插件为每个页面生成一个带有Next.JS的无服务器代码的目录
  2. 这个插件不使用无服务器框架,所以您可以在基础设施中使用本机AWS部署解决方案,比如:部署AWS SAM ou AWS云形成,并从AWS支持中受益。
  3. 对于AWS本机解决方案部署,您可以自由选择任何需要的区域。
票数 7
EN

Stack Overflow用户

发布于 2020-03-31 20:19:12

用于部署的这个插件使用的是lambda@edge,这个插件使用的是无区域操作:

https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-at-the-edge.html

Lambda@Edge是AWS的扩展,这是一种计算服务,允许您执行自定义CloudFront提供的内容的函数。您可以在US 1(N.Virginia)的一个区域中编写Node.js或Python函数,然后在更接近查看器的AWS位置执行它们,而无需提供或管理服务器。Lambda@Edge自动缩放,从每天几次请求到每秒数千次请求。

如果您希望在无服务器部署中具有更大的灵活性,请使用下面的线程中提到的webpack插件:

https://github.com/vincent-herlemont/next-aws-lambda-webpack-plugin

与无服务器框架一起,您可以为每个NextJs页面手动定义一个lambda函数(不是Lambda@Edge),并将其部署到您所在地区的AWS帐户。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58112093

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档