DVA-C02開発HARD複数選択

あるチームが、Lambda関数でVPC内のRDS Aurora(PostgreSQL)に接続するアプリケーションを構築している。パフォーマンステストで「同時接続数が増えるとRDSのコネクション数が上限に達してエラーになる」という問題が判明した。また「データベースの認証情報はコードに直接書かず、定期的に自動ローテーションしたい」という要件もある。両方の問題を解決するためのアーキテクチャとして最も適切なものを2つ選択してください。

  1. A. Lambda関数のreserved concurrencyをRDSの最大コネクション数の半分に設定してスケールを制限する
  2. B. AWS Secrets ManagerにRDSの認証情報を保存し、LambdaのIAMロールからGetSecretValueで取得するとともにシークレットの自動ローテーションを有効化する
  3. C. RDSのmax_connectionsパラメータをデフォルト値の10倍に設定して接続上限を引き上げる
  4. D. Lambda関数内でコネクションプールライブラリ(PgBouncer等)をインストールして各インスタンスでコネクションを再利用する
  5. E. Amazon RDS Proxyを使ってコネクションプールを管理し、Lambdaからの接続をRDS Proxyエンドポイントに向ける
解答と解説を見る

正解: B, E

選択肢E(RDS Proxy)はLambdaからのコネクションをプールして管理し、多数のLambdaインスタンスが発生しても実際にRDSに向けるコネクション数を大幅に削減できる。RDS Proxyは認証情報の管理にSecrets Managerと統合されており、選択肢B(Secrets Manager)と組み合わせると、IAM認証を使ってRDS Proxyに接続でき、データベース認証情報をコードに書かずに済む。Secrets Managerの自動ローテーション機能により定期的なパスワード変更も自動化できる。選択肢AのReserved Concurrencyによるスケール制限は接続数の爆発を防げるが、トラフィックスパイク時のスケール不能というトレードオフがあり、問題の根本解決ではない。選択肢Dはコネクションプールライブラリ(正確にはPgBouncerはLambdaレイヤーとして動かすことはできない)を各Lambda インスタンスに持たせても、Lambda インスタンス数が増えれば合計コネクション数はやはり増大するため根本解決にならない。また、PgBouncerはデーモンプロセスとして動作するためLambdaの実行モデルとは相性が悪い。選択肢CのRDSパラメータによる上限引き上げは一時的な緩和にはなるが、Auroraのコネクションはメモリを消費するため無制限に増やすことはできず、根本的なアーキテクチャ問題を解決しない。

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