reactjs - 如何将 next.js 9 部署到 aws lambda

标签 reactjs deployment aws-lambda next.js

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

  1. 官方 next.js 9 文档告诉我“pages 目录中的每个页面都变成了无服务器 lambda。”上面的库不像文档那样工作。如何从每个页面部署到每个 lambda?

  2. 合理的部署方案是什么?请在生产级别使用 nextjs 9 的人帮助我。

  3. 我正在使用这个库 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 应用程序运行请求时发生的简化流程图: enter image description here

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

部署到 AWS Lambda

虽然无服务器框架仍然可能是目前最流行的选择,但我创建了一个简单易用的 Terraform用于此任务的模块。 Terraform 是一个开源 CLI 应用程序,用于管理 AWS 等提供商中的云资源。

安装 Terraform 后,就像这样简单:

  1. 转到您的 Next.js 应用并安装此帮助程序:

    npm i -D tf-next     # npm or
    yarn add -D tf-next  # yarn
    
  2. 将以下脚本 tf-next 添加到 Next.js 应用的 package.json 中:

    {
      ...
      "scripts": {
        "dev": "next",
        "build": "next build",
        "start": "next start",
    +   "tf-next": "tf-next build"
       }
    }
    ...
    
  3. 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"
    }
    
  4. 创建 AWS Access Key并将其暴露在终端中:

    export AWS_ACCESS_KEY_ID=AKIAXXXXXXXXXXXXXX
    export AWS_SECRET_ACCESS_KEY=wJaXXXXXXXXXXXXXXXXXXXX
    
  5. 构建应用程序并使用 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/

相关文章:

React Native 中的 CSS 三 Angular 形不再起作用

javascript - react native 平面列表,从状态中删除元素时无法正确更新

javascript - 代理不适用于生产中的 create-react-app

azure - 如何部署 Azure Devops Web 应用程序

entity-framework - 如何将 ASP.NET Entity Framework ConnectionStrings 移至 web.config 的 appSettings 部分

java - Eclipse 中的链接项目/文件夹不会部署在 tomcat 中

amazon-web-services - 在aws lambda无服务器框架中使用自定义vpc而不是默认vpc

node.js - 仅使用插入配置 DynamoDB 流触发器

aws-lambda - 使用 AWS-Codepipeline 部署 lambda 函数的 AWS-CodeDeploy 内部错误

javascript - 如何在 React 中使用映射从数组创建 Material-UI 嵌套样式对象