DVA-C02トラブルシューティングと最適化MEDIUM単一選択

あるEコマース企業がAPI Gateway + Lambda + DynamoDBのサーバーレスAPIを運用している。ある日の深夜、売上集計バッチ処理中にLambda関数が大量呼び出しされ、その影響で他のAPIのレスポンスが遅くなった。バッチ処理がオンライン処理のLambda関数に影響しないよう分離したい。最小限の変更で対応する方法として最も適切なのはどれか。

  1. A. バッチ処理用Lambda関数のメモリを最大の10,240MBに増やしてバッチを高速化し処理時間を短縮する
  2. B. バッチ処理用Lambda関数に予約済み同時実行(Reserved Concurrency)の上限を設定して、アカウント全体の同時実行数を消費しすぎないようにする
  3. C. バッチ処理をEC2 Spot Instanceに移行してサーバーレスとは別の環境で実行する
  4. D. バッチ処理用に別のAWSアカウントを作成してLambdaクォータを完全に分離する
解答と解説を見る

正解: B

Lambda関数に予約済み同時実行(Reserved Concurrency)を設定すると、その関数が使える同時実行数の上限を制限できる(選択肢B)。バッチ処理用Lambda関数の予約済み同時実行を例えば50に設定すれば、深夜のバッチがいくら大量呼び出しされてもアカウント全体の残り同時実行数(デフォルト1,000)を確保でき、オンラインAPIのLambda関数がスロットリングされなくなる。選択肢Aのメモリ増加は処理速度の向上には寄与するが、同時に呼ばれる関数の本数は変わらないため同時実行数の競合は解消されない。選択肢CのEC2 Spot移行は大規模な変更が必要で最小限の変更という条件に反する。選択肢Dの別アカウント分離は最も強力な分離だが、変更規模が大きすぎる。Reserved Concurrencyはまさにこのユースケース(重いバッチからオンラインAPIを守る)のために設計された機能。

▸ この試験を本気で演習する(全150問・無料)