- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 next.js9 开发一个项目。我有一些问题和疑问。我想将我的 next.js 9 项目部署到 AWS lambda。
官方 next.js 9 文档告诉我“pages 目录中的每个页面都变成了无服务器 lambda。”上面的库不像文档那样工作。如何从每个页面部署到每个 lambda?
合理的部署方案是什么?请在生产级别使用 nextjs 9 的人帮助我。
我正在使用这个库 https://github.com/danielcondemarin/serverless-next.js 。它运作良好。但所有选项都是固定的。我想将我的项目部署到东京地区。但我不知道如何更改区域。始终部署到弗吉尼亚北部地区。我已经检查过医生,但我认为他们没有选择。并像这个 yml 文件一样进行测试。
无服务器.yml
myNextApplication:
component: serverless-next.js
region: ap-northeast-1
但它不起作用。如果有人知道如何使用 serverless-next.js 更改区域。请帮助我。
提前谢谢
最佳答案
将 Next.js 部署到 AWS Lambda 需要一个抽象层,因为 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 进行部署。
虽然无服务器框架仍然可能是目前最流行的选择,但我创建了一个简单易用的 Terraform用于此任务的模块。Terraform 是一个开源 CLI 应用程序,用于管理 AWS 等提供商中的云资源。
安装 Terraform 后,就像这样简单:
转到您的 Next.js 应用并安装此帮助程序:
npm i -D tf-next # npm or
yarn add -D tf-next # yarn
将以下脚本 tf-next
添加到 Next.js 应用的 package.json
中:
{
...
"scripts": {
"dev": "next",
"build": "next build",
"start": "next start",
+ "tf-next": "tf-next build"
}
}
...
在 package.json
旁边创建一个新的 main.tf
,其中包含以下内容:
# main.tf
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 3.0"
}
}
}
# Main region where the resources should be created in
provider "aws" {
region = "us-east-1"
}
module "tf_next" {
source = "dealmore/next-js/aws"
}
创建 AWS Access Key并将其暴露在终端中:
export AWS_ACCESS_KEY_ID=AKIAXXXXXXXXXXXXXX
export AWS_SECRET_ACCESS_KEY=wJaXXXXXXXXXXXXXXXXXXXX
构建应用程序并使用 terraform 将其部署到 AWS:
terraform init # Only needed on the first time running Terraform
yarn tf-next # Build the next.js app
terraform plan # See what resources Terraform will create
terraform apply # Deploy the App to your AWS account
您可以将 main.tf
中的区域更改为 supports 的任何 AWS 区域。 Lambda 和您定义的区域是您的 Lambda 部署到的区域。
有关更多信息,请参阅 GitHub 页面:AWS Next.js Terraform module on GitHub
关于reactjs - 如何将 next.js 9 部署到 aws lambda,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58112093/
我是一名优秀的程序员,十分优秀!