我正在使用next.js9开发一个项目。我有一些问题和疑问。我想将我的next.js 9项目部署到AWS lambda。
1.官方的next.js 9文档告诉我“pages目录中的每个页面都变成了一个无服务器的lambda。”上面的库不像文档那样工作。如何从每个页面部署到每个lambda?
1.什么是合理的部署方案?请在生产级别使用NextJS 9的人帮助我。
1.我正在使用https://github.com/danielcondemarin/serverless-next.js库。效果很好。但所有选项都是固定的。我想把我的项目部署到东京地区。但我不知道如何改变地区。总是部署到N。弗吉尼亚州。我已经问过医生了但我觉得他们没有选择。像这个yml文件一样测试。
serverless.yml
myNextApplication:
component: serverless-next.js
region: ap-northeast-1
但没起作用如果有人知道如何使用serverless-next.js更改区域。请帮帮我
先谢谢你了
4条答案
按热度按时间mwngjboj1#
将Next.js部署到AWS Lambda需要一个抽象层,因为Next.js首先被设计为作为Node.js服务器工作。
Vercel通过一个名为
now-node-bridge
的东西来实现这一点,它基本上是在Lambda函数中启动本地Node.js http-server,然后从Lambda invoke事件中创建一个请求。下面是一个简化的流程图,当你对部署在Vercel上的Next.js应用运行请求时会发生什么:
虽然Next.js是开源的,但在Vercel上执行从HTTP请求到Lambda事件转换的代理不是。这就是为什么无服务器部署到AWS仍然是一项棘手的任务,而Vercel内部也使用AWS Lambda进行部署。
部署到AWS Lambda
虽然Serverless框架可能仍然是目前最流行的选择,但我创建了一个简单易用的Terraform模块来完成这项任务。Terraform是一个开源CLI应用程序,用于管理AWS等提供商的云资源。
安装Terraform后,它就像这样简单:
1.转到你的Next.js应用并安装这个助手:
1.将以下脚本
tf-next
添加到Next.js应用的package.json
中:1.在
package.json
旁边创建一个新的main.tf
,其中包含以下内容:1.创建一个AWS Access Key并在终端中公开它:
1.使用terraform构建应用并将其部署到AWS:
您可以将
main.tf
中的区域更改为supports Lambdas的任何AWS区域,并且您在其中定义的区域就是部署Lambdas的区域。有关更多信息,请参阅GitHub页面:AWS Next.js Terraform module on GitHub
vddsk6oq2#
有一个webpack插件,可以帮助next-aws-lambda-webpack-plugin。
1.此插件为每个页面生成一个目录,其中包含Next.JS的无服务器代码
1.此插件不使用Serverless framwork,因此您可以为您的基础设施使用本地AWS部署解决方案,例如:AWS SAM或AWS cloudformation,让您的部署受益于AWS支持。
1.借助AWS本地解决方案部署,您可以自由选择任何想要的区域。
dfuffjeb3#
这个插件你正在使用的部署是使用lambda@edge和这操作region-less:
https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-at-the-edge.html
Lambda@Edge是AWS Lambda的扩展,AWS Lambda是一种计算服务,可让您执行自定义CloudFront交付的内容的功能。您可以在一个区域(US-East-1(N))中编写Node.js或Python函数。Virginia),然后在全球更接近查看者的AWS位置执行它们,而无需配置或管理服务器。Lambda@Edge可自动扩展,从每天几个请求到每秒数千个请求。
如果你想在无服务器部署中有更大的灵活性,请使用线程中提到的webpack插件:
https://github.com/vincent-herlemont/next-aws-lambda-webpack-plugin
与无服务器框架一起,您可以为每个NextJs页面手动定义一个lambda函数(而不是Lambda@Edge),并将其部署到您所在地区的AWS帐户。
ni65a41a4#
1.我还是不知道。
2,3. serverless-next.js有点合理。我在GitHub上做了一个问题。贡献者回答我如下。我理解了框架的概念。
https://github.com/danielcondemarin/serverless-next.js#my-lambda-is-deployed-to-us-east-1-how-can-i-deploy-it-to-another-region