あるチームがDynamoDBのOnDemandモードでAPIを運用している。突然トラフィックが過去の最大値の2倍に跳ね上がったところ、「RequestLimitExceeded」エラーが多発した。OnDemandモードであれば自動スケーリングされるはずなのに、なぜエラーが発生したか最もあり得る理由はどれか。
- A. 過去に読み取りキャパシティと書き込みキャパシティの比率が偏っていたため、OnDemandの配分が不均等になっている
- B. OnDemandモードは急激なトラフィック増加(前回ピークの2倍超)には即座に対応できず、テーブルのキャパシティがスケールアップされるまでの間にスロットリングが発生する
- C. OnDemandモードとプロビジョンドモードを同時に使うとコンフリクトが発生する
- D. OnDemandモードでもアカウントレベルのDynamoDB上限に達するとエラーが発生する
解答と解説を見る
正解: B
DynamoDB OnDemandモードは自動的にスケールするが、急激なトラフィックスパイクへの対応には若干のウォームアップ時間が必要(選択肢B)。具体的には、テーブルのピーク時スループットの2倍を超えるトラフィックが発生した場合、内部のパーティション分散やキャパシティ再割り当てが追いつかずに一時的なスロットリングが発生することがある。AWSのドキュメントではOnDemandモードは「直前30分のピーク」に基づいて自動スケールすると説明されており、急激な2倍超のスパイクは設計上の制約を超える場合がある。選択肢Dのアカウントレベル上限は存在するが(デフォルト40,000 RCU/WCU)、今回の説明としてはOnDemandの動作特性の方が適切。選択肢Cのコンフリクトは存在しない(同時に2つのモードを使うことはできない)。選択肢Aのような読み書き比率によるOnDemand配分の偏りという概念は正確ではない。急激なスパイクに備えるにはプロビジョンドモード+オートスケーリングか、事前にOnDemandのウォームアップを行うことが推奨される。