ある企業がLambdaで突発的なトラフィックスパイクに対応するシステムを運用している。平常時は1秒あたり10リクエスト程度だが、イベント告知後に数分以内に1秒あたり5,000リクエストに達することがある。この急激なスパイク時にLambdaが十分なスケールアウトを行えるよう事前に対策を施したい。追加コストを最小化しつつスパイクに備える方法として最も適切なものはどれか。
- A. プロビジョニング済み同時実行数(Provisioned Concurrency)を常に5,000に設定する
- B. 予約済み同時実行数(Reserved Concurrency)を5,000に設定し、アカウントの同時実行枠を確保する
- C. 同じ関数を複数リージョンにデプロイし、Route 53でリクエストを分散させる
- D. Lambda関数のメモリを最大値(10,240 MB)に設定してスケールスピードを上げる
解答と解説を見る
正解: B
予約済み同時実行数(Reserved Concurrency)は、特定の関数に対してアカウント全体の同時実行枠から一定数を予約する設定である。これにより他の関数による同時実行枠の消費でスパイク時にスケールできなくなる事態を防げる。課金はリクエスト数と実行時間に基づくため、アイドル時に余分なコストは発生しない。選択肢Aのプロビジョニング済み同時実行はコールドスタートを排除できるが、設定した数の関数インスタンスが常時起動状態で課金され続けるため、追加コスト最小化の要件に反する。選択肢DのメモリはCPU割り当てにも影響するが、スケールアウトの速度(同時実行数の上限)には直接影響しない。選択肢Cのマルチリージョン分散は可用性向上には有効だが、単一イベントによるスパイクへの対策としては不要であり、コストも増大する。