AWS
核心组件
概览
💡

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

这也主要用于高级用例(覆盖某些默认设置、为另一个云提供商提供支持、创建自己的 IAC 组件...),大多数人不需要使用此功能。

常规

  • 对于 node 运行时,您至少需要 Node 18。
  • 对于 edge 运行时,您可以使用 Node 18+ 或启用了 node_compat 标志的 cloudflare workers(Cloudflare workers 支持处于实验阶段)
  • Open-next 在 Windows 上运行不佳。我们建议使用 WSL2 或 Linux 虚拟机。

后端

每个后端都是一个单独的模块。可用后端如下:

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

所有这些后端都可以被覆盖以满足您的需求。它们在配置和使用方式上有一些共同点。

常见覆盖

每个自定义覆盖(非 string)共享 BaseOverride 类型,并需要这样包装:

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

包装器

包装器是后端的主要入口点。这是包装器的类型:

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 服务器,不适合无服务器环境
  • cloudflare - Cloudflare 包装器 - 用于 Cloudflare Worker
Aws Lambda 流式传输

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

请注意,使用流式传输时可能会遇到一些意外行为。Aws Lambda 似乎会对响应应用一些缓冲。在某些罕见情况下,这可能意味着流式传输无法正常启动。这是 lambda 运行时本身的问题,但在这些情况下应该只会影响 TTFB(首字节时间)。请参阅此 GitHub 问题 (opens in a new tab)

转换器

转换器用于转换事件和结果。这是转换器的类型:

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 Revalidate 转换器 - 默认用于重新验证后端
  • dummy - Dummy 转换器 - 不执行任何操作