type
status
date
slug
summary
tags
category
icon
password
理論
AWS Lambda のパフォーマンス改善とスケーラビリティに関連する知識
- AWS Lambda とデータベース接続
- Lambda 関数は短期間で実行されるため、データベース接続の確立と切断のオーバーヘッドがパフォーマンスに影響を与えることがあります。特に、頻繁にデータベース接続を開いたり閉じたりする場合、遅延が発生しやすいです。
- RDS Proxy
- RDS Proxy は、データベース接続をプールするサービスで、Lambda 関数と RDS インスタンス間の接続を効率的に管理します。これにより、接続の再利用が促進され、接続の数が制限されることで、スケーラビリティとレイテンシーが向上します。
- RDS Proxy を使用することで、データベースの接続数が急増した場合でも安定したパフォーマンスを維持できます。
- Secrets Manager
- Secrets Manager は、データベースの認証情報(ユーザー名、パスワードなど)を安全に管理するサービスです。これを Lambda 関数や RDS Proxy と連携させることで、認証情報をセキュアに扱うことができます。
- Lambda の同時実行数
- プロビジョニングされた同時実行数は、指定した数だけ Lambda 関数を予め準備することで、トラフィックの急増に迅速に対応できます。Lambda がリクエストを処理するためのリソースをあらかじめ確保する方法です。
- 予約済み同時実行数は、特定のリソース数を確保するために使いますが、トラフィックが急激に増加した場合に最も効果的な方法は、プロビジョニングされた同時実行数の利用です。
- スケーラブルなアーキテクチャ
- サーバーレスアーキテクチャでは、RDS Proxy や AWS Lambda のスケーリング機能(プロビジョニングされた同時実行数、インスタンスのオートスケーリング)を活用して、トラフィックの急増に対応します。接続プールを管理し、動的にスケーリングすることで、システム全体のレイテンシーを最小化できます。
まとめ
- RDS Proxy と Secrets Manager を活用することで、Lambda 関数のデータベース接続の効率化が可能となり、トラフィックの急増に対応するための最適な方法になります。
以下は、プロビジョニングされた同時実行数と予約済み同時実行数の違いを簡潔に表形式でまとめたものです。
項目 | プロビジョニングされた同時実行数 | 予約済み同時実行数 |
目的 | 特定の数の Lambda インスタンスを常に稼働させ、即時にリクエストを処理できるようにする | 必要に応じて特定のインスタンス数を確保し、リソースを管理する |
スケーリング | トラフィック急増時にすぐに対応可能 | リソース確保のため、一定の同時実行数を予め予約する |
使用ケース | 高いスループットや低レイテンシーを求める場合に適している | 使用量が予測できるが、リソースの競合を避けたい場合に適している |
リソース管理 | 常に確保した同時実行数に対して課金される | 必要な時にだけリソースを確保し、コストを抑えることができる |
料金 | 固定料金が発生 (指定した同時実行数分) | 必要に応じて予約する料金が発生 (同時実行数に対する割引がある場合あり) |
まとめ:
- プロビジョニングされた同時実行数は、指定した数のインスタンスを常に稼働させ、即時に対応するためのもの。
- 予約済み同時実行数は、必要なインスタンス数を確保して、トラフィックに対応するためのリソースを管理する方法です。
実践
略
一問道場
質問 #489
ある企業は、AWS 上でサーバーレスの電子商取引アプリケーションを運営しています。アプリケーションは、Amazon API Gateway を使用して AWS Lambda Java 関数を呼び出します。Lambda 関数は、データを格納するために Amazon RDS for MySQL データベースに接続します。
最近のセールイベント中、急激なウェブトラフィックの増加により、API のパフォーマンス低下とデータベース接続の失敗が発生しました。企業は、Lambda 関数のレイテンシーを最小限に抑え、トラフィックの急増に対応するソリューションを実装する必要があります。
最小限の変更でこれらの要件を満たすソリューションはどれですか?
A. Lambda 関数のコードを更新して、Lambda 関数が関数ハンドラーの外でデータベース接続を開くようにします。Lambda 関数のプロビジョニングされた同時実行数を増加させます。
B. データベース用に RDS Proxy エンドポイントを作成します。データベースのシークレットを AWS Secrets Manager に格納します。必要な IAM 権限を設定します。Lambda 関数を更新して、RDS Proxy エンドポイントに接続します。Lambda 関数のプロビジョニングされた同時実行数を増加させます。
C. カスタムパラメーターグループを作成します。max_connections パラメーターの値を増加させます。カスタムパラメーターグループを RDS DB インスタンスに関連付け、再起動をスケジュールします。Lambda 関数の予約済み同時実行数を増加させます。
D. データベース用に RDS Proxy エンドポイントを作成します。データベースのシークレットを AWS Secrets Manager に格納します。必要な IAM 権限を設定します。Lambda 関数を更新して、RDS Proxy エンドポイントに接続します。Lambda 関数の予約済み同時実行数を増加させます。
解説
この問題は、Lambda 関数のレイテンシーの最小化と、急増するトラフィックに対応するためのソリューションを選択するものです。特に、データベース接続の問題を解決することが重要です。
各選択肢の解説
選択肢 A:
- Lambda 関数のコードを更新して、関数ハンドラーの外でデータベース接続を開く → これにより、接続の再利用はできますが、接続のスケーリング問題は解決できません。
- プロビジョニングされた同時実行数を増加させる → 同時実行数を増やすことで、より多くのリクエストに対応できますが、接続数の管理やスケーラビリティ問題は解決しません。
結論: このアプローチは接続の効率的な管理に関して不十分です。
選択肢 B:
- RDS Proxy エンドポイントを作成し、Secrets Manager でデータベースのシークレットを管理する → RDS Proxy はデータベース接続プールを提供し、Lambda 関数の接続数を効率的に管理できます。これにより、急増するトラフィックへの対応が可能になります。
- 必要な IAM 権限を設定し、Lambda 関数を RDS Proxy に接続 → これにより、セキュアに接続情報を管理できます。
- プロビジョニングされた同時実行数を増加させる → 高い同時実行数を確保することで、急増するリクエストに対してスケーラブルな対応が可能です。
結論: この方法は、接続の効率化とスケーラビリティの両方を解決し、最適な選択肢です。
選択肢 C:
- max_connections パラメーターを増加させる → これにより、RDS インスタンスが許可する接続数は増えますが、Lambda 関数が作成する接続数を管理する方法は提供されません。
- Lambda 関数の予約済み同時実行数を増加させる → 予約同時実行数を増加させることは Lambda のスケーラビリティを向上させますが、接続数の管理には役立ちません。
結論: 接続数の増加は一時的な対策であり、根本的な接続管理の問題は解決しません。
選択肢 D:
- RDS Proxy エンドポイントを作成し、Secrets Manager でデータベースのシークレットを管理する → これにより、データベース接続の管理が効率化されます。
- 予約済み同時実行数を増加させる → 予約済み同時実行数の増加はトラフィックに対応しますが、プロビジョニングされた同時実行数の方が急増するリクエストに柔軟に対応できます。
- 予約済み同時実行数を増加させることで、予測可能なトラフィックの増加に備えることができますが、急激な増加に対応するにはプロビジョニングされた同時実行数の方が効果的です。
結論: 予約済み同時実行数の増加では、トラフィックの急増に十分に対応できない可能性があります。
正解は B です:
- RDS Proxy による接続プール管理と、プロビジョニングされた同時実行数の増加を組み合わせることで、急増するトラフィックと接続管理の問題に効果的に対処できます。
- 作者:みなみ
- 链接:https://tangly1024.com/資格勉強/17dd7ae8-88e2-80ea-93c2-c911edb3dec4
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章