

# Lambda マネージドインスタンスのスケーリング
<a name="lambda-managed-instances-scaling"></a>

Lambda マネージドインスタンスは、呼び出しの到着時はスケーリングされず、コールドスタートをサポートしません。代わりに、リソース消費シグナルを使用して非同期的にスケーリングします。マネージドインスタンスは現在、CPU リソースの使用率と同時実行数の飽和度に基づいてスケーリングされます。

**主な相違点:**
+ **Lambda (デフォルト):** 着信呼び出しを処理する空き実行環境がない場合にスケーリングする (コールドスタート)
+ **Lambda マネージドインスタンス:** CPU リソース使用率と実行環境の同時実行数の飽和に基づいて非同期的にスケーリングする

トラフィックが 5 分以内に 2 倍を超えると、Lambda が需要に合わせてインスタンスと実行環境をスケールアップするため、スロットリングが表示されることがあります。

## スケーリングライフサイクル
<a name="lambda-managed-instances-scaling-lifecycle"></a>

Lambda マネージドインスタンスは、分散アーキテクチャを使用してスケーリングを管理します。

**コンポーネント:**
+ **マネージドインスタンス** – 指定したサブネットのアカウントで実行されます
+ **ルーターおよびスケーラー** – 呼び出しをルーティングし、スケーリングを管理する共有 Lambda コンポーネント
+ **Lambda エージェント** – 各マネージドインスタンスで実行され、実行環境のライフサイクルを管理し、リソースの消費量をモニタリングします

**仕組み:**

1. キャパシティープロバイダーで関数バージョンを発行すると、Lambda はユーザーのアカウントでマネージドインスタンスを起動します。AZ の回復性のためにデフォルトで 3 つ起動され、実行環境が 3 つ開始されると関数バージョンが「ACTIVE」にマークされます。

1. 各マネージドインスタンスは、同じキャパシティープロバイダーにマッピングされた複数の関数の実行環境を実行できます。

1. トラフィックがアプリケーションに流れると、実行環境はリソースを消費します。Lambda エージェントはスケーラーに通知し、新しい実行環境とマネージドインスタンスのどちらをスケーリングするかを決定します。

1. ルーターがリソース消費量の多い実行環境に呼び出しを送信しようとすると、そのインスタンスの Lambda エージェントが別のインスタンスで再試行するよう通知します。

1. トラフィックが減少すると、Lambda エージェントはスケーラーに通知し、実行環境のスケールダウンとマネージドインスタンスのスケールインを決定します。

## スケーリング動作の調整
<a name="lambda-managed-instances-adjusting-scaling"></a>

マネージドインスタンスのスケーリング動作は、次の 4 つのコントロールでカスタマイズできます。

### 関数レベルのコントロール
<a name="lambda-managed-instances-function-level-controls"></a>

#### 1. 関数メモリと vCPU
<a name="lambda-managed-instances-function-memory-vcpus"></a>

関数のメモリサイズと vCPU 割り当てを選択します。サポートされる関数の最小サイズは 2GB と 1vCPU です。

**考慮事項:**
+ 関数の複数同時実行をサポートするメモリと vCPU 設定を選択してください
+ マネージドインスタンスで実行される関数は複数同時ワークロードをサポートしている必要があるため、1 vCPU 未満の関数を設定することはできません
+ 2GB 未満を選択することはできません。これは、c インスタンスのメモリと vCPU のメモリ比率 (2 対 1) と一致するためであり、c インスタンスの比率は最も低くなっています
+ Python アプリケーションの場合、Python は複数同時実行を処理するため、メモリと vCPU の比率は 4 対 1 または 8 対 1 などの高比率を選択する必要がある場合があります。
+ CPU 負荷が高いオペレーションを実行している場合、またはほとんど IO を実行していない場合は、複数の vCPU を選択する必要があります。

#### 2. 最大同時実行数
<a name="lambda-managed-instances-maximum-concurrency"></a>

実行環境あたりの最大同時実行数を設定します。

**デフォルトの動作:** Lambda では、さまざまなアプリケーションで動作するリソースの消費とスループットとのバランスをとる適切なデフォルトが選択されます。

**調整ガイドライン:**
+ **同時実行数を増やす:** 関数呼び出しで使用する CPU が非常に少ない場合は、vCPU あたり最大 64 まで同時実行数を増やすことができます
+ **同時実行数を減らす:** アプリケーションが大量のメモリを消費し、CPU が非常に少ない場合は、最大同時実行数を減らすことができます

**重要:** Lambda マネージドインスタンスは複数同時実行アプリケーションを対象としているため、同時実行が非常に低い実行環境では、スケーリング時にスロットリングが発生する可能性があります。

### キャパシティープロバイダーレベルのコントロール
<a name="lambda-managed-instances-capacity-provider-level-controls"></a>

#### 3. ターゲットのリソース使用率
<a name="lambda-managed-instances-target-resource-utilization"></a>

CPU 使用率消費の独自のターゲットを選択します。

**デフォルトの動作:** Lambda では、スロットリングなしで 5 分以内にトラフィックを倍増させるのに十分なヘッドルームが。保持されます。

**最適化オプション:**
+ ワークロードが非常に安定している場合、またはアプリケーションがスロットリングの影響を受けにくい場合は、ターゲットを高レベルに設定して使用率を高め、コストを削減できます
+ トラフィックのバーストに備えてヘッドルームを維持する場合は、リソースターゲットを低レベルに設定できますが、より多くの容量が必要になります

#### 4. インスタンスタイプの選択
<a name="lambda-managed-instances-instance-type-selection"></a>

許可または除外されたインスタンスタイプを設定します。

**デフォルトの動作:** Lambda ではワークロードに最適なインスタンスタイプが選択されます。利用可能なインスタンスタイプの数を制限すると可用性が低下する可能性があるため、Lambda マネージドインスタンスが選択したインスタンスタイプを使用することをお勧めします。

**カスタム設定:**
+ **特定のハードウェア要件:** 許可されたインスタンスタイプを互換性のあるインスタンスのリストに設定します。たとえば、高いネットワーク帯域幅を必要とするアプリケーションがある場合、複数の n インスタンスタイプを選択できます
+ **コストの最適化:** テスト環境または開発環境では、m7a.large インスタンスタイプなど、より小さなインスタンスタイプを選択できます

## 次のステップ
<a name="lambda-managed-instances-scaling-next-steps"></a>
+ 「[Lambda マネージドインスタンスのキャパシティプロバイダー](lambda-managed-instances-capacity-providers.md)」について説明する
+ 複数同時実行を処理するためのランタイム固有のガイドを確認する
+ [キャパシティープロバイダーの VPC 接続](lambda-managed-instances-networking.md)を設定する
+ スケーリングメトリクスをモニタリングしてスケーリング動作を最適化する