Q8 — AWS SAP-C02 第1章
第 8/75 問 | ← 第1章
Q83. ソリューションアーキテクトが、Amazon API Gateway のリージョンエンドポイントと AWS Lambda 関数を使用する Web アプリケーションを開発しました。このアプリケーションの利用者は、アプリケーションをデプロイする AWS リージョンに全員近接しています。Lambda 関数は Amazon Aurora MySQL データベースへのクエリのみを実行します。ソリューションアーキテクトは、データベースを 3 つの読み取り専用レプリカを持つように構成しました。テスト中に、アプリケーションはパフォーマンス要件を満たしていませんでした。高負荷時、アプリケーションが多数のデータベース接続を開いています。ソリューションアーキテクトは、アプリケーションのパフォーマンスを向上させる必要があります。 これらの要件を満たすために、ソリューションアーキテクトが実施すべきアクションはどれですか?(2 つ選択)
- A. Aurora データベースのクラスターエンドポイントを使用する。
- B. RDS Proxy を使用して、Aurora データベースのリーダーエンドポイントへの接続プールを設定する。 ✓
- C. Lambda のプロビジョニング済み同時実行機能を使用する。
- D. Lambda 関数内でデータベース接続を開くコードを、イベントハンドラーの外側に移動する。 ✓
- E. API Gateway のエンドポイントをエッジ最適化エンドポイントに変更する。
正解: B. RDS Proxy を使用して、Aurora データベースのリーダーエンドポイントへの接続プールを設定する。, D. Lambda 関数内でデータベース接続を開くコードを、イベントハンドラーの外側に移動する。
解説
Amazon API Gateway のリージョンエンドポイントおよび AWS Lambda 関数を用いる Web アプリケーションのパフォーマンスを向上させるためには、以下のアクションが推奨されます: B. RDS Proxy を使用して、Aurora データベースのリーダーエンドポイントへの接続プールを設定する。 D. Lambda 関数内でデータベース接続を開くコードを、イベントハンドラーの外側に移動する。 解説: アクション B:RDS Proxy を使用すると、接続プーリング機能により、複数の Lambda 関数呼び出しがデータベース接続を共有できます。これにより、開かれる接続数が削減され、全体的なパフォーマンスが向上します。Aurora データベースのリーダーエンドポイントを使用することで、読み取りトラフィックを効果的に読み取り専用レプリカに分散できます。 アクション D:高負荷時に多数のデータベース接続を開くことはパフォーマンスに悪影響を及ぼします。イベントハンドラーの外側にデータベース接続を開くコードを移動することで、接続を複数の呼び出し間で再利用可能になります。これにより、各リクエストごとに新しい接続を確立するオーバーヘッドが削減されます。接続は Lambda 関数の初期化フェーズで初期化され、その後の呼び出しで再利用されます。 オプション A は不適切です。Aurora データベースのクラスターエンドポイントを使用しても、多数のデータベース接続が開かれるという問題を直接解決しません。高負荷下でも依然として多数の接続が開かれる可能性があります。 オプション C は不適切です。Lambda のプロビジョニング済み同時実行機能は、指定された数の関数インスタンスを事前に初期化・待機状態に保ち、コールドスタートのパフォーマンスを改善しますが、多数のデータベース接続が開かれるという問題には直接対応しません。 オプション E は不適切です。API Gateway のエンドポイントをエッジ最適化エンドポイントに変更しても、多数のデータベース接続が開かれるという問題を直接解決しません。これは API Gateway のネットワークエッジロケーションに関連するものであり、データベース接続管理には影響しません。 したがって、アプリケーションのパフォーマンス向上のために推奨されるアクションは B および D です。 B について:Lambda のハンドラーメソッドの外側から RDS に接続することで、パフォーマンスが向上します。 D について:RDS Proxy を使用すると、予測不可能なデータベーストラフィックの急増にも対応できます。こうした急増は、接続数の過剰割り当てや、高速なペースでの新規接続作成によって問題を引き起こす可能性があります。RDS Proxy はデータベース接続プールを確立し、このプール内の接続を再利用します。これにより、毎回新規データベース接続を開く際に発生するメモリおよび CPU オーバーヘッドを回避できます。データベースの過剰割り当てを防ぐため、作成されるデータベース接続数を制御することも可能です。