

# テナント分離
<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 関数に設定された 1,000 回の[同時実行](gettingstarted-limits.md#compute-and-storage)ごとに、Lambda によってテナント分離実行環境 (アクティブまたはアイドル状態) が 2,500 に制限されます。

## 料金
<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 料金 | 