我正在用next.js9开发一个项目。我有一些问题。我想将我的next.js 9项目部署到AWS。
serverless.yml
myNextApplication:
component: serverless-next.js
region: ap-northeast-1但它不起作用。如果有人知道如何使用无服务器-next.js更改区域。请帮帮我。
提前谢谢你
发布于 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后,它非常简单:
tf-next添加到Next.js应用程序的package.json中:
{ ..。“脚本”:{ "dev":"next"," build“:"next build","start":"next start",+ "tf-next":"tf-next build”}}.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“}}中创建。您可以将main.tf中的区域更改为支座 Lambdas中的任何AWS区域,而您定义的区域就是部署Lambdas的区域。
有关更多信息,请参见GitHub页面:基于Next.js的AWS Next.js平台模块
发布于 2020-02-20 08:09:52
有一个webpack插件,可以帮助下一步-aws-lambda-webpack-插件。
发布于 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帐户。
https://stackoverflow.com/questions/58112093
复制相似问题