

# 租户隔离
<a name="tenant-isolation"></a>

当您需要为调用 Lambda 函数的单个最终用户或租户进行隔离请求处理时，请使用租户隔离模式。此功能可简化处理租户特定代码或数据的多租户应用程序的构建过程，例如用于工作流自动化或代码执行的 SaaS 平台，无需管理租户特定的功能资源和请求路由逻辑。

多租户应用程序在为各个租户或终端用户运行代码或处理数据时，需要具备严格的隔离要求。在租户隔离模式下，Lambda 使用客户指定的租户标识符来将请求路由至底层函数执行环境，从而确保函数的执行环境仅用于为指定的终端用户或租户提供调用服务。Lambda 的函数执行环境利用 [Firecracker 虚拟化](https://firecracker-microvm.github.io/)来提供工作负载隔离。

当使用租户隔离模式的函数接收到带有租户标识符的调用请求时，Lambda 会首先尝试查找与该租户标识符相关的可用执行环境。如果不存在执行环境，Lambda 会为该租户创建并分配一个新的执行环境。当具有指定租户标识符的函数调用纵向扩展时，Lambda 会根据需要自动查找或创建新的执行环境。

**Topics**
+ [何时使用租户隔离模式](#tenant-isolation-use)
+ [支持的功能和限制](#tenant-isolation-features)
+ [支持的 AWS 区域](#tenant-isolation-regions)
+ [注意事项](#tenant-isolation-considerations)
+ [定价](#tenant-isolation-pricing)
+ [隔离模式](#tenant-isolation-modes)
+ [为 Lambda 函数启用租户隔离](tenant-isolation-configure.md)
+ [调用具有租户隔离功能的 Lambda 函数](tenant-isolation-invoke.md)
+ [在 Lambda 函数代码中访问租户标识符](tenant-isolation-context.md)
+ [监控具有租户隔离功能的 Lambda 函数](tenant-isolation-monitor.md)
+ [排查 Lambda 函数的租户隔离问题](tenant-isolation-troubleshooting.md)

## 何时使用租户隔离模式
<a name="tenant-isolation-use"></a>

当您需要通过单个 Lambda 函数为多个终端用户或租户提供服务时，请使用租户隔离模式，同时确保用于处理各个租户调用的执行环境彼此之间保持隔离。对于多租户应用程序，这种严格的执行环境隔离对于以下操作是必不可少的：
+ **执行最终用户提供的代码**：为各个租户维护单独的执行环境可以限制执行用户提供的可能不正确或恶意的代码产生的影响。
+ **处理租户特定的数据**：为各个租户维护单独的执行环境可以防止特定于租户的敏感数据泄露给其他租户。

来自同一租户的多个调用请求可以重复使用相同的函数执行环境，从而减少冷启动次数，并提高对延迟敏感型应用程序的响应速度。

## 支持的功能和限制
<a name="tenant-isolation-features"></a>

使用[函数 URL](urls-configuration.md)、[预置并发](provisioned-concurrency.md)或 [SnapStart](snapstart.md) 的函数不支持租户隔离模式。您可以使用[同步调用](invocation-sync.md)、[异步调用](invocation-async.md)或通过将 [Amazon API Gateway 用作事件触发器](services-apigateway.md)来向租户隔离函数发送请求。

## 支持的 AWS 区域
<a name="tenant-isolation-regions"></a>

除亚太地区（新西兰）区域以外的所有[商业区域](https://docs.aws.amazon.com/general/latest/gr/glos-chap.html#region)均支持租户隔离模式。

## 注意事项
<a name="tenant-isolation-considerations"></a>

将租户隔离用于 Lambda 函数时，请务必注意以下事项：
+ **不可变配置**：租户隔离是一种不可变的函数属性。只能在创建函数时启用。
+ **必需的 tenant-id 参数**：使用租户隔离模式的函数必须通过 `tenant-id` 参数进行调用。省略此参数将导致函数调用失败。
+ **执行角色适用于所有租户**：来自所有租户的调用均使用您的 Lambda 函数[执行角色](lambda-intro-execution-role.md)中定义的权限。
+ **并发**：使用租户隔离时，函数的[并发](lambda-concurrency.md)或[扩展行为](scaling-behavior.md)没有变化。对于为您的 Lambda 函数配置的每 1000 次[并发执行](gettingstarted-limits.md#compute-and-storage)，Lambda 将租户隔离执行环境（活动或空闲）的数量限制为 2500 个。

## 定价
<a name="tenant-isolation-pricing"></a>

当 Lambda 创建新的租户隔离执行环境时，将会向您收费。此价格取决于您为函数分配的[内存](configuration-memory.md)量和您使用的 [CPU 架构](foundation-arch.md)。有关更多信息，请参阅 [AWS Lambda 定价](https://aws.amazon.com/lambda/pricing)。

## 隔离模式
<a name="tenant-isolation-modes"></a>

下表概述了使用租户隔离和不使用租户隔离的 Lambda 函数之间的差异。


| 功能 | 使用租户隔离 | 不使用租户隔离 | 
| --- | --- | --- | 
| 隔离类型 | 租户级隔离 | 函数级隔离 | 
| 环境重用 | 执行环境在不同租户之间绝不会被重复使用 | 执行环境可以在同一函数的不同调用中重复使用 | 
| 数据隔离 | 无法访问其他租户的数据 | 可以访问之前调用相同函数版本时所获取的数据 | 
| 冷启动 | 由于租户特定的环境，冷启动次数增多 | 由于环境重复使用，冷启动次数减少 | 
| 定价 | 除标准 Lambda 定价之外的额外费用 | 标准 Lambda 定价 | 