SAA-C03弾力性に優れたアーキテクチャの設計MEDIUM単一選択

ある企業が、Lambda 関数を使って RDS データベースに定期的にアクセスするバッチ処理を実装している。Lambda 関数が短時間に大量に同時実行されると、RDS の接続数が上限(max_connections)を超えてエラーが発生する問題がある。コード変更を最小限にして、この問題を解決する最も適切なソリューションはどれか。

  1. A. RDS インスタンスタイプをアップグレードして max_connections 数を増加させる。
  2. B. Amazon RDS Proxy を RDS の前段に配置する。Lambda 関数は RDS Proxy に接続し、Proxy がコネクションプーリングを管理して RDS への接続数を抑制する。
  3. C. Lambda 関数の同時実行数に予約済み同時実行(Reserved Concurrency)を設定して最大同時実行数を制限する。
  4. D. Lambda 関数の実行ごとに新しい RDS 接続を作成・使用・閉じるのではなく、接続を関数ハンドラーの外で初期化してインスタンス間で再利用するようコードを修正する。
解答と解説を見る

正解: B

Amazon RDS Proxy は Lambda と RDS の間でコネクションプーリングを提供するマネージドサービスである。Lambda は数千の同時実行があっても RDS Proxy に接続し、Proxy が少数のデータベース接続を効率的に共有するため、RDS の接続数上限問題を解決できる。Lambda のコードは接続先エンドポイントを RDS Proxy のエンドポイントに変更するだけで動作する。選択肢AはRDS インスタンスのアップグレードで接続数を増やせるが、根本的な解決にはならない。Lambda の同時実行数が急増するとすぐに上限を超えてしまう。選択肢CはLambda の同時実行数を制限することで RDS への接続数を抑えられるが、処理スループットが低下しバッチ処理の完了時間が延びるトレードオフがある。選択肢Dは Lambda のコンテナ再利用による接続の再利用は有効なベストプラクティスだが、大規模な同時実行では依然として多数のコネクションが作成されるため、RDS Proxy ほど根本的な解決にはならない。

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