AWS
主要组件
概览
💡

本文档仍在完善中,部分内容可能缺失或不完整。

这些内容主要面向高级使用场景(覆盖某些默认配置、为其他云服务商提供支持、创建自定义基础设施即代码组件等),大多数用户不需要使用这些功能。

概述

  • 对于 Node 运行时,至少需要 Node 18 版本
  • 对于 Edge 运行时,可以使用 Node 18+ 或启用了 node_compat 标志的 Cloudflare workers(Cloudflare workers 支持目前处于实验阶段)
  • Open-next 在 Windows 系统上运行不佳,推荐使用 WSL2 或 Linux 虚拟机

后端模块

每个后端都是一个独立模块。目前可用的后端模块包括:

  • 服务器(Node 或 Edge 运行时)
  • 中间件(如果手动设置为外部)
  • 图片优化
  • 重新验证
  • 预热器
  • 初始化器

所有这些后端模块都可以根据需求进行覆盖定制。它们在配置和使用方式上有一些共通之处。

通用覆盖配置

所有自定义覆盖(非 string 类型)都共享 BaseOverride 类型,并需要按以下方式封装:

type BaseOverride = {
  name: string;
};
 
// 这是覆盖配置的类型
type LazyLoadedOverride<T extends BaseOverride> = () => Promise<T>;

Wrapper(包装器)

Wrapper 是后端的主要入口点。以下是 Wrapper 的类型定义:

type WrapperHandler<
  E extends BaseEventOrResult = InternalEvent,
  R extends BaseEventOrResult = InternalResult,
> = (handler: OpenNextHandler<E, R>, converter: Converter<E, R>) => Promise<(...args: any[]) => any>;
 
export type Wrapper<
  E extends BaseEventOrResult = InternalEvent,
  R extends BaseEventOrResult = InternalResult,
> = BaseOverride & {
  wrapper: WrapperHandler<E, R>;
  supportStreaming: boolean;
};

其中:

  • handler 是被包装的原始处理器
  • converter 是用于转换事件和结果的转换器

以下是提供的包装器列表:

  • aws-lambda - 默认的 AWS Lambda 包装器(默认使用)
  • aws-lambda-streaming - 支持流式传输的 AWS Lambda 包装器
  • node - Node 包装器(创建一个 Node 服务器,不适用于 serverless 环境)
  • cloudflare - Cloudflare 包装器(用于 Cloudflare Worker)
Aws Lambda 流式传输

如需在 Lambda 中启用流式传输,需要使用此包装器。默认情况下未启用。

请注意,使用流式传输时可能会遇到一些意外行为。AWS Lambda 似乎会对响应应用一些缓冲处理。在极少数情况下,这可能导致流式传输无法正常启动。这是 Lambda 运行时本身的问题,但在这些情况下应该只会影响 TTFB(首字节时间)。详见此 GitHub issue (opens in a new tab)

转换器 (Converter)

转换器用于对事件(event)和结果(result)进行转换。以下是转换器的类型定义:

export type Converter<
  E extends BaseEventOrResult = InternalEvent,
  R extends BaseEventOrResult = InternalResult,
> = BaseOverride & {
  convertFrom: (event: any) => Promise<E>;
  convertTo: (result: R, originalRequest?: any) => any;
};

convertFrom 方法用于将事件转换为后端内部处理器使用的内部事件。convertTo 方法用于将结果转换为预期格式。 当使用流式传输时,通常可以忽略 convertTo 方法,因为结果会直接进行流式传输。

以下是提供的转换器列表:

  • aws-apigw-v2 - 默认的 AWS API Gateway v2 转换器 - 这是默认转换器
  • aws-apigw-v1 - AWS API Gateway v1 转换器
  • aws-cloudfront - AWS CloudFront 转换器 - 用于 lambda@edge
  • edge - Edge 转换器 - 从 Request 转换并输出 Response
  • node - Node 转换器 - 从 IncomingMessage 转换并输出 ServerResponse
  • sqs-revalidate - SQS 重新验证转换器 - 默认用于重新验证后端
  • dummy - 虚拟转换器 - 不执行任何操作