LLRT(Low Latency Runtime)是一个轻量级 JavaScript 运行时,旨在满足对快速且高效的 Serverless 应用日益增长的需求。与其他运行在 AWS Lambda 上的 JavaScript 运行时相比,LLRT 的启动速度可提升 10 倍以上,整体成本可降低 2 倍。
它使用 Rust 构建,采用 QuickJS 作为 JavaScript 引擎,确保高效的内存使用和快速的启动。
[!WARNING] LLRT 是一个实验性软件包。它可能会发生变化,仅用于评估目的。
LLRT - DynamoDB Put, ARM, 128MB:

Node.js 20 - DynamoDB Put, ARM, 128MB:

HTTP 基准测试以冷启动的往返时间进行测量(为什么?)
配置 Lambda 函数以使用 LLRT
从 https://github.com/awslabs/llrt/releases 下载最新的 LLRT 版本
选项 1:自定义运行时(推荐)
选择 Custom Runtime on Amazon Linux 2023,并将 LLRT bootstrap 二进制文件与您的 JS 代码一起打包。
选项 2:使用层
选择 Custom Runtime on Amazon Linux 2023,将 llrt-lambda-arm64.zip 或 llrt-lambda-x64.zip 作为层上传并添加到您的函数中
选项 3:将 LLRT 打包到容器镜像中
参见我们的 AWS SAM 示例 或:
FROM --platform=arm64 busybox
WORKDIR /var/task/
COPY app.mjs ./
ADD https://github.com/awslabs/llrt/releases/latest/download/llrt-container-arm64 /usr/bin/llrt
RUN chmod +x /usr/bin/llrt
ENV LAMBDA_HANDLER "app.handler"
CMD [ "llrt" ]
选项 4:AWS SAM
以下示例项目设置了一个使用包含 llrt 运行时的层进行插桩的 lambda。
选项 5:AWS CDK
你可以使用cdk-lambda-llrt construct library通过 AWS CDK 部署 LLRT Lambda 函数。
import { LlrtFunction } from "cdk-lambda-llrt";
const handler = new LlrtFunction(this, "Handler", {
entry: "lambda/index.ts",
});
请参阅 Construct Hub 及其示例](https://github.com/tmokmss/cdk-lambda-llrt/tree/main/example) 以获取更多详细信息。
就是这样 🎉
[!IMPORTANT] 尽管 LLRT 支持 ES2023,但它并非 Node.js 的直接替代品。请参阅 兼容性矩阵 和 API 以获取更多详细信息。 所有依赖项都应针对
browser平台进行打包,并将包含的@aws-sdk包标记为外部依赖。
测试与确保兼容性
确保您的代码与 LLRT 兼容的最佳方法是编写测试并使用内置的测试运行器执行它们。测试运行器目前支持 Jest/Chai 断言。您可以创建三种主要类型的测试:
单元测试
- 适用于在隔离环境中验证特定模块和函数
- 允许对单个组件进行集中测试
端到端 (E2E) 测试
- 验证与 AWS SDK 的整体兼容性以及 WinterTC 合规性
- 测试所有组件之间的集成
- 从最终用户角度确认预期行为
- 有关 E2E 测试以及如何运行它们的更多信息,请参阅 此处。
Web 平台测试 (WPT)
- 适用于验证 LLRT 相对于标准化浏览器 API 和运行时预期的行为
- 确保与 Web 标准和跨运行时环境的兼容性
- 帮助验证与 WinterTC 及更广泛的 JavaScript 生态系统的对齐
- 有关设置说明和如何在 LLRT 中运行 WPT,请参阅 此处。
测试运行器
测试运行器使用轻量级的类 Jest API,并支持 Jest/Chai 断言。有关如何为 LLRT 实现测试的示例,请参阅本仓库的 /tests 文件夹。
要运行测试,请执行 llrt test 命令。LLRT 会扫描当前目录及子目录中以 *.test.js 或 *.test.mjs 结尾的文件。你也可以通过使用 llrt test -d <directory> 选项提供特定的测试目录进行扫描。
测试运行器还支持过滤器。使用过滤器只需添加额外的命令行参数,例如:llrt test crypto 将仅运行文件名包含 crypto 的测试。
兼容性矩阵
[!NOTE] LLRT 仅支持 Node.js API 的一小部分。它不是 Node.js 的直接替代品,也永远不会是。以下是部分支持的 API 和模块的高层概述。更多详情请参阅 API 文档
| Node.js API | Node.js | LLRT |
|---|---|---|
| node:assert | ✔︎ | ✔︎️⚠️ |
| node:async_hooks | ✔︎ | ✔︎️⚠️ |
| node:buffer | ✔︎ | ✔︎️⚠️ |
| node:child_process | ✔︎ | ✔︎⚠️ |
| node:cluster | ✔︎ | ✘ |
| node:console | ✔︎ | ✔︎⚠️ |
| node:crypto | ✔︎ | ✔︎⚠️ |
| node:dgram | ✔︎ | ✘ |
| node:diagnostics_channel | ✔︎ | ✘ |
| node:dns | ✔︎ | ✔︎⚠️ |
| node:events | ✔︎ | ✔︎⚠️ |
| node:fs | ✔︎ | ✔︎⚠️ |
| node:fs/promises | ✔︎ | ✔︎⚠️ |
| node:http | ✔︎ | ✘⏱ |
| node:http2 | ✔︎ | ✘ |
| node:https | ✔︎ | ✘⏱ |
| node:inspector | ✔︎ | ✘ |
| node:inspector/promises | ✔︎ | ✘ |
| node:module | ✔︎ | ✔︎⚠️ |
| node:net | ✔︎ | ✔︎⚠️ | | node:os | ✔︎ | ✔︎⚠️ | | node:path | ✔︎ | ✔︎⚠️ | | node:perf_hooks | ✔︎ | ✔︎⚠️ | | node:process | ✔︎ | ✔︎⚠️ | | node:querystring | ✔︎ | ✘ | | node:readline | ✔︎ | ✘ | | node:readline/promises | ✔︎ | ✘ | | node:repl | ✔︎ | ✘ | | node:sqlite | ✔︎ | ✘ | | node:stream | ✔︎ | ✔︎* | | node:stream/promises | ✔︎ | ✔︎* | | node:stream/web | ✔︎ | ✔︎⚠️ | | node:string_decoder | ✔︎ | ✔︎ | | node:test | ✔︎ | ✘ | | node:timers | ✔︎ | ✔︎⚠️ | | node:tls | ✔︎ | ✘⏱ | | node:tty | ✔︎ | ✔︎⚠️ | | node:url | ✔︎ | ✔︎⚠️ | | node:util | ✔︎ | ✔︎⚠️ |
| node:v8 | ✔︎ | ✘** | | node:vm | ✔︎ | ✘ | | node:wasi | ✔︎ | ✘ | | node:worker_threads | ✔︎ | ✘ | | node:zlib | ✔︎ | ✔︎⚠️ |
| LLRT API | Node.js | LLRT |
|---|---|---|
| llrt:codec | ✘ | ✔︎ |
| llrt:qjs | ✘ | ✔︎ |
| llrt:util | ✘ | ✔︎ |
| llrt:xml | ✘ | ✔︎ |
| Web Platform API | LLRT |
|---|---|
| COMPRESSION | ✘⏱ |
| CONSOLE | ✔︎⚠️ |
| DOM | ✔︎⚠️ |
| ECMASCRIPT | ✔︎⚠️ |
| ENCODING | ✔︎⚠️ |
| FETCH | ✔︎⚠️ |
| FILEAPI | ✔︎⚠️ |
| HR-TIME | ✔︎ |
| HTML | ✔︎⚠️ |
| STREAMS | ✔︎⚠️ |
| URL | ✔︎ |
| URLPATTERN | ✘⏱ |
| WASM-JS-API-2 | ✘ |
| WASM-WEB-API-2 | ✘ |
| WEBCRYPTO | ✔︎⚠️ |
| WEBIDL | ✔︎⚠️ |
| XHR | ✔︎⚠️ |
| 其他特性 | LLRT |
|---|---|
| async/await | ✔︎ |
| esm | ✔︎ |
| cjs | ✔︎ |
| Intl | ✔︎⚠️ |
| Temporal | ✔︎⚠️ |
⚠️ = 在 LLRT 中部分支持
⏱ = 计划部分支持
* = 非原生
** = module.registerHooks() API 允许你模拟某些功能。另请参阅 example/register-hooks。
在 LLRT 中使用 node_modules(依赖项)
由于 LLRT 旨在用于性能关键型应用,不建议在未进行打包、压缩和 tree-shaking 的情况下部署 node_modules。
LLRT 可以与你选择的任何打包器配合使用。以下是一些流行打包器的配置示例:
[!WARNING] LLRT 实现了与以下外部包高度兼容的原生模块。 通过在打包器的 alias 函数中实现以下转换,你的应用可能会更快,但由于它们并非完全兼容,我们建议你进行彻底测试。
| Node.js | LLRT |
|---|---|
| fast-xml-parser | llrt:xml |
ESBuild
esbuild index.js --platform=browser --target=es2023 --format=esm --bundle --minify --external:@aws-sdk --external:@smithy
Rollup
import resolve from "@rollup/plugin-node-resolve";
import commonjs from "@rollup/plugin-commonjs";
import terser from "@rollup/plugin-terser";
export default {
input: "index.js",
output: {
file: "dist/bundle.js",
format: "esm",
sourcemap: true,
target: "es2023",
},
plugins: [resolve(), commonjs(), terser()],
external: ["@aws-sdk", "@smithy"],
};
Webpack
import TerserPlugin from "terser-webpack-plugin";
import nodeExternals from "webpack-node-externals";
export default {
entry: "./index.js",
output: {
path: "dist",
filename: "bundle.js",
libraryTarget: "module",
},
target: "web",
mode: "production",
resolve: {
extensions: [".js"],
},
externals: [nodeExternals(), "@aws-sdk", "@smithy"],
optimization: {
minimize: true,
minimizer: [
new TerserPlugin({
terserOptions: {
ecma: 2023,
},
}),
],
},
};
使用 AWS SDK (v3) 配合 LLRT
LLRT 运行时内置了许多 AWS SDK 客户端和工具,直接集成在可执行文件中。这些 SDK 客户端经过专门优化,旨在提供最佳性能,同时不牺牲兼容性。LLRT 使用原生实现替代了 AWS SDK 中使用的某些 JavaScript 依赖项,例如哈希计算和 XML 解析。 未包含在以下列表中的 V3 SDK 包必须与您的源代码一起打包。关于如何使用未包含的 SDK 的示例,请参阅 此示例构建脚本 (buildExternalSdkFunction)
LLRT 默认支持以下三种捆绑包。捆绑包类型和后缀如下。
| 捆绑包类型 | 后缀 | 用途 |
|---|---|---|
| no-sdk | *-no-sdk | 适用于不使用 @aws-sdk 的工作负载。 |
| std-sdk | (无) | 适用于使用主要 @aws-sdk 的工作负载。 |
| full-sdk | *-full-sdk | 适用于使用任意 @aws-sdk 的工作负载。 |
各捆绑包类型所支持的包之间的关系如下。
| 分析 | no-sdk | std-sdk | full-sdk |
|---|---|---|---|
| @aws-sdk/client-athena | ✔︎ | ||
| @aws-sdk/client-firehose | ✔︎ | ||
| @aws-sdk/client-glue | ✔︎ | ||
| @aws-sdk/client-kinesis | ✔︎ | ||
| @aws-sdk/client-opensearch | ✔︎ | ||
| @aws-sdk/client-opensearchserverless | ✔︎ |
| 应用集成 | no-sdk | std-sdk | full-sdk |
|---|---|---|---|
| @aws-sdk/client-eventbridge | ✔︎ | ✔︎ | |
| @aws-sdk/client-scheduler | ✔︎ | ||
| @aws-sdk/client-sfn | ✔︎ | ✔︎ | |
| @aws-sdk/client-sns | ✔︎ | ✔︎ | |
| @aws-sdk/client-sqs | ✔︎ | ✔︎ |
| 业务应用 | no-sdk | std-sdk | full-sdk |
|---|---|---|---|
| @aws-sdk/client-ses | ✔︎ | ✔︎ | |
| @aws-sdk/client-sesv2 | ✔︎ |
| 计算服务 | no-sdk | std-sdk | full-sdk |
|---|---|---|---|
| @aws-sdk/client-auto-scaling | ✔︎ | ||
| @aws-sdk/client-batch | ✔︎ | ||
| @aws-sdk/client-ec2 | ✔︎ | ||
| @aws-sdk/client-lambda | ✔︎ |
| 容器 | no-sdk | std-sdk | full-sdk |
|---|---|---|---|
| @aws-sdk/client-ecr | ✔︎ | ||
| @aws-sdk/client-ecs | ✔︎ | ||
| @aws-sdk/client-eks | ✔︎ | ||
| @aws-sdk/client-servicediscovery | ✔︎ |
| 数据库 | no-sdk | std-sdk | full-sdk |
|---|---|---|---|
| @aws-sdk/client-dynamodb | ✔︎ | ✔︎ | |
| @aws-sdk/client-dynamodb-streams | ✔︎ | ||
| @aws-sdk/client-elasticache | ✔︎ | ||
| @aws-sdk/client-rds | ✔︎ | ||
| @aws-sdk/client-rds-data | ✔︎ |
| 开发者工具 | no-sdk | std-sdk | full-sdk |
|---|---|---|---|
| @aws-sdk/client-xray | ✔︎ | ✔︎ |
| 前端 Web 和移动服务 | no-sdk | std-sdk | full-sdk |
|---|---|---|---|
| @aws-sdk/client-amplify | ✔︎ | ||
| @aws-sdk/client-appsync | ✔︎ | ||
| @aws-sdk/client-location | ✔︎ |
| 机器学习 (ML) 和人工智能 (AI) | no-sdk | std-sdk | full-sdk |
|---|---|---|---|
| @aws-sdk/client-bedrock | ✔︎ | ||
| @aws-sdk/client-bedrock-runtime | ✔︎ | ||
| @aws-sdk/client-bedrock-agent | ✔︎ | ||
| @aws-sdk/client-bedrock-agent-runtime | ✔︎ | ||
| @aws-sdk/client-polly | ✔︎ | ||
| @aws-sdk/client-rekognition | ✔︎ | ||
| @aws-sdk/client-textract | ✔︎ | ||
| @aws-sdk/client-translate | ✔︎ |
| 管理与治理 | no-sdk | std-sdk | full-sdk |
|---|---|---|---|
| @aws-sdk/client-appconfig | ✔︎ | ||
| @aws-sdk/client-appconfigdata | ✔︎ | ||
| @aws-sdk/client-cloudformation | ✔︎ | ||
| @aws-sdk/client-cloudwatch | ✔︎ | ||
| @aws-sdk/client-cloudwatch-events | ✔︎ | ✔︎ | |
| @aws-sdk/client-cloudwatch-logs | ✔︎ | ✔︎ | |
| @aws-sdk/client-service-catalog | ✔︎ | ||
| @aws-sdk/client-ssm | ✔︎ | ✔︎ |
| 媒体 | no-sdk | std-sdk | full-sdk |
|---|---|---|---|
| @aws-sdk/client-mediaconvert | ✔︎ |
| 网络与内容分发 | no-sdk | std-sdk | full-sdk |
|---|---|---|---|
| @aws-sdk/client-api-gateway | ✔︎ | ||
| @aws-sdk/client-apigatewayv2 | ✔︎ | ||
| @aws-sdk/client-elastic-load-balancing-v2 | ✔︎ |
| 安全、身份和合规性 | no-sdk | std-sdk | full-sdk |
|---|---|---|---|
| @aws-sdk/client-acm | ✔︎ | ||
| @aws-sdk/client-cognito-identity | ✔︎ | ✔︎ | |
| @aws-sdk/client-cognito-identity-provider | ✔︎ | ✔︎ | |
| @aws-sdk/client-iam | ✔︎ | ||
| @aws-sdk/client-kms | ✔︎ | ✔︎ | |
| @aws-sdk/client-secrets-manager | ✔︎ | ✔︎ | |
| @aws-sdk/client-sso | ✔︎ | ||
| @aws-sdk/client-sso-admin | ✔︎ | ||
| @aws-sdk/client-sso-oidc | ✔︎ | ||
| @aws-sdk/client-sts | ✔︎ | ✔︎ | |
| @aws-sdk/client-verifiedpermissions | ✔︎ |
| 存储 | no-sdk | std-sdk | full-sdk |
|---|---|---|---|
| @aws-sdk/client-efs | ✔︎ | ||
| @aws-sdk/client-s3 | ✔︎ | ✔︎ |
| 其他捆绑包 | no-sdk | std-sdk | full-sdk |
|---|---|---|---|
| @aws-crypto | ✔︎ | ✔︎ | |
| @aws-sdk/credential-providers | ✔︎ | ✔︎ | |
| @aws-sdk/lib-dynamodb | ✔︎ | ✔︎ | |
| @aws-sdk/lib-storage | ✔︎ | ✔︎ | |
| @aws-sdk/s3-presigned-post | ✔︎ | ✔︎ | |
| @aws-sdk/s3-request-presigner | ✔︎ | ✔︎ | |
| @aws-sdk/util-dynamodb | ✔︎ | ✔︎ | |
| @aws-sdk/util-user-agent-browser | ✔︎ | ✔︎ | |
| @smithy | ✔︎ | ✔︎ |
[!TIP] LLRT 现在支持流式 SDK 响应(自 0.9 版本起)。您可以将响应体作为流进行消费,或使用便捷方法:
const response = await client.send(command); // Option 1: Stream the response body for await (const chunk of response.Body) { // process chunk } // Option 2: Collect as string or bytes const str = await response.Body.transformToString(); // or const bytes = await response.Body.transformToByteArray();
使用 LLRT 运行 TypeScript
使用 TypeScript 时,适用与依赖项相同的原理。TypeScript 必须被打包并转译为 ES2023 JavaScript。
[!NOTE] LLRT 不支持在未转译的情况下运行 TypeScript。这是出于性能原因的设计决定。转译需要消耗 CPU 和内存,这会在执行期间增加延迟和成本。如果在部署时提前完成,可以避免这种情况。
理由
鉴于已有 Node.js、Bun 和 Deno 等现有选项,引入另一个 JavaScript 运行时的理由是什么?
Node.js、Bun 和 Deno 代表了高度成熟的 JavaScript 运行时。然而,它们的设计初衷是面向通用应用程序。这些运行时并未针对 Serverless 环境的需求进行专门定制,该环境以短生命周期的运行时实例为特征。它们各自依赖一个(即时编译器 (JIT) 用于执行期间的动态代码编译和优化。虽然 JIT 编译提供了显著的长期性能优势,但它伴随着计算和内存开销。
相比之下,LLRT 通过不集成 JIT 编译器来区别于其他运行时,这一战略决策带来了两个显著优势:
A) JIT 编译是一个相当复杂的技术组件,它增加了系统复杂性,并显著增加了运行时的整体大小。
B) 没有 JIT 开销,LLRT 节省了 CPU 和内存资源,这些资源可以更高效地分配给代码执行任务,从而减少应用程序的启动时间。
局限性
在许多情况下,与基于 JIT 的运行时相比,LLRT 表现出明显的性能劣势,例如处理大型数据、蒙特卡洛模拟或执行包含数十万甚至数百万次迭代的任务。LLRT 在应用于较小的 Serverless 函数时最为有效,这些函数专门用于数据转换、实时处理、AWS 服务集成、授权、验证等任务。它旨在补充现有组件,而非作为所有事物的全面替代方案。值得注意的是,由于其支持的 API 基于 Node.js 规范,转回其他解决方案所需的代码调整极少。
从源代码构建
- 克隆代码并 cd 到目录
git clone git@github.com:awslabs/llrt.git
cd llrt
- 安装 git 子模块
git submodule update --init --checkout
- 安装 rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | bash -s -- -y
source "$HOME/.cargo/env"
- 安装依赖
# MacOS
brew install zig make cmake zstd node corepack
# Ubuntu
sudo apt -y install make zstd
sudo snap install zig --classic --beta
# Windows WSL2 (requires systemd to be enabled*)
sudo apt -y install cmake g++ gcc make zip zstd
sudo snap install zig --classic --beta
# Windows WSL2 (If Node.js is not yet installed)
sudo curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh | bash
nvm install --lts
* 参见 Microsoft Devblogs
- 安装 Node.js 包
corepack enable
yarn
- 安装生成库并设置 rust 目标 & 工具链
make stdlib && make libs
[!NOTE] 如果这些命令退出时出现错误,提示
can't cd to zstd/lib, 说明你未递归克隆此仓库。运行git submodule update --init以下载子模块,然后再次运行上述命令。
- 为 Lambda 构建二进制文件(按所需的捆绑类型和架构)
# for arm64, use
make llrt-lambda-arm64.zip
make llrt-lambda-arm64-no-sdk.zip
make llrt-lambda-arm64-full-sdk.zip
# or for x86-64, use
make llrt-lambda-x64.zip
make llrt-lambda-x64-no-sdk.zip
make llrt-lambda-x64-full-sdk.zip
- 为容器构建二进制文件(按所需的捆绑类型和架构)
# for arm64, use
make llrt-container-arm64
make llrt-container-arm64-no-sdk
make llrt-container-arm64-full-sdk
# or for x86-64, use
make llrt-container-x64
make llrt-container-x64-no-sdk
make llrt-container-x64-full-sdk
- 可选:为你的本地机器(Mac 或 Linux)进行构建
make release
make release-no-sdk
make release-full-sdk
你现在应该已经拥有了 llrt-lambda-arm64*.zip 或 llrt-lambda-x64*.zip。你可以手动将其上传为 Lambda 层,或通过你的 Infrastructure-as-code 流水线使用它
加密和 TLS 后端选项
LLRT 支持多种加密后端,适用于 crypto 模块和 TLS 连接。这些可以通过 Cargo features 进行配置。
加密提供者特性
| Feature | Description |
|---|---|
crypto-rust (default) | 使用 RustCrypto crates 的纯 Rust 加密 |
crypto-ring | 仅 Ring 加密(有限的算法支持) |
crypto-ring-rust | 使用 Ring 进行哈希/HMAC,其余使用 RustCrypto |
crypto-graviola | 仅 Graviola 加密(有限的算法支持) |
crypto-graviola-rust | 使用 Graviola 进行哈希/HMAC/AES-GCM,其余使用 RustCrypto |
crypto-openssl | 基于 OpenSSL 的加密 |
TLS 后端特性
| Feature | Description |
|---|---|
tls-ring (default) | 使用 ring 加密的 rustls |
tls-aws-lc | 使用 AWS-LC 加密的 rustls(针对 AWS 优化) |
tls-graviola | 使用 graviola 加密的 rustls |
tls-openssl | 用于 TLS 的 OpenSSL |
使用不同后端进行构建
# Default (crypto-rust + tls-ring)
cargo build --release
# Using AWS-LC for TLS
cargo build --release --no-default-features --features "macro,tls-aws-lc"
# Using OpenSSL for both crypto and TLS
cargo build --release --no-default-features --features "macro,crypto-openssl,tls-openssl"
# Using Graviola for both crypto and TLS
cargo build --release --no-default-features --features "macro,crypto-graviola-rust,tls-graviola"
运行 Lambda 模拟器
请注意,为了运行示例,您需要:
- 通过
~/.aws/credentials或环境变量提供有效的 AWS 凭证。
export AWS_ACCESS_KEY_ID=XXX
export AWS_SECRET_ACCESS_KEY=YYY
export AWS_REGION=us-east-1
- 一个 DynamoDB 表(以
id作为分区键)位于us-east-1 - 该表上的
dynamodb:PutItemIAM 权限。您可以使用此策略(别忘了修改 <YOUR_ACCOUNT_ID>):
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "putItem",
"Effect": "Allow",
"Action": "dynamodb:PutItem",
"Resource": "arn:aws:dynamodb:us-east-1:<YOUR_ACCOUNT_ID>:table/quickjs-table"
}
]
}
在单独的终端中启动 lambda-server.js
node lambda-server.js
然后运行 llrt:
make run
环境变量
LLRT_ASYNC_HOOKS=value
当使用异步钩子时,QuickJS 内部的钩子函数会被激活。由于担心其对性能产生重大影响,此功能默认处于禁用状态。
通过将此环境变量设置为 1,可以启用异步钩子函数,从而允许您使用 async_hooks 模块来跟踪异步处理。
LLRT_EXTRA_CA_CERTS=file
从 PEM 编码文件中加载额外的证书颁发机构
LLRT_GC_THRESHOLD_MB=value
设置垃圾回收的内存阈值(单位:MB)。默认阈值为 20MB
LLRT_HTTP_VERSION=value
扩展 HTTP 请求版本。默认情况下,仅启用 HTTP/1.1。指定 '2' 将启用 HTTP/1.1 和 HTTP/2。
LLRT_LOG=[target][=][level][,...]
使用 = 按目标模块、级别或两者同时过滤日志输出。日志级别不区分大小写,并且也会启用任何更高优先级的日志。
按优先级降序排列的日志级别:
ErrorWarn | WarningInfoDebugTrace
示例过滤器:
warn将启用所有警告和错误日志llrt_core::vm=trace将启用llrt_core::vm模块中的所有日志warn,llrt_core::vm=trace将启用llrt_core::vm模块中的所有日志以及其他模块中的所有警告和错误日志
LLRT_NET_ALLOW="host[ ...]"
空格分隔的主机或套接字路径列表,这些主机或路径应被允许进行网络连接。对于此列表中缺失的任何主机或套接字路径,网络连接将被拒绝。设置为空列表以拒绝所有连接
LLRT_NET_DENY="host[ ...]"
以空格分隔的主机或套接字路径列表,这些主机或路径应被拒绝用于网络连接
LLRT_NET_POOL_IDLE_TIMEOUT=value
为保持空闲套接字的连接设置超时时间(以秒为单位)。默认超时时间为 15 秒
LLRT_PLATFORM=value
用于显式指定 Node.js 包解析器的首选平台。默认值为 browser。如果指定了 node,则 "node" 在搜索路径中优先。如果指定了除 browser 或 node 以外的值,其行为将如同指定了 "browser" 一样。
LLRT_REGISTER_HOOKS=file
如果你想启用一个与 Node.js 的 module.registerHooks() 基本兼容的钩子机制,请在此环境变量中指定 js 文件名。
我们在 example/register-hooks 中提供了一个具体示例。
[!NOTE] 此环境变量仅在 AWS Lambda 上运行时有效。 使用 LLRT CLI 时,必须使用 --import 选项而非此环境变量来指定钩子文件。
LLRT_SDK_CONNECTION_WARMUP=1
在函数初始化期间并行初始化 TLS 连接,从而显著减少冷启动时间。默认启用,可通过值 0 或 false 禁用
LLRT_TLS_VERSION=value
设置用于网络连接的 TLS 版本。默认情况下仅启用 TLS 1.2。通过将此变量设置为 1.3 也可以启用 TLS 1.3。
基准测试方法
尽管 Lambda 报告的 Init Duration](https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtime-environment.html) 通常用于理解冷启动对整体请求延迟的影响,但该指标不包括将代码复制到 Lambda 沙箱所需的时间。
Init Duration 的技术定义(来源):
对于处理的第一次请求,运行时加载函数并执行 handler 方法之外的代码所花费的时间。
测量往返请求持续时间可以更全面地了解面向用户的冷启动延迟。
Lambda 调用结果(λ 标记的行)报告 Init Duration + Function Duration 的总和。
安全
更多信息请参阅 CONTRIBUTING。
许可证
本库根据 Apache-2.0 许可证授权。请参阅 LICENSE 文件。