無限ノック › DVA 練習問題一覧 › 問題
DVAトラブルシューティングと最適化

開発者はElastiCache Redisを使用してセッション情報をキャッシュするLambda関数を実装しました。関数はハンドラー内でRedisへの接続を毎回確立・切断しており、CloudWatchのDurationメトリクスを確認すると実行時間の60%以上がRedis接続確立に費やされていることが判明しました。最小限のコード変更でこのレイテンシ問題を解決する最も適切な方法はどれですか?

A
ハンドラー関数の外側(グローバルスコープ)でRedisクライアントを初期化し、同一実行環境への後続呼び出しで接続を再利用する
✓ 正解
グローバルスコープでRedisクライアントを初期化すると、コールドスタート時のみ接続を確立し、同一実行環境への後続呼び出し(ウォームスタート)では既存の接続を再利用します。毎回の接続確立コストが排除され、実行時間の大幅削減が実現できます。
B
ElastiCacheクラスターにリードレプリカを追加して読み取り負荷を分散し、接続待ち時間を短縮する
リードレプリカの追加はクラスターの読み取りキャパシティを増やしますが、Lambdaハンドラー内で毎回接続を確立・切断しているコード設計の問題を解消しません。接続確立のオーバーヘッドはコード変更でなければ根本解決できません。
C
Lambda関数に割り当てるメモリを増やしてCPUパワーを向上させ、Redis接続確立処理を高速化する
Lambdaのメモリ増量はCPU割り当てを比例増加させますが、Redis接続確立の遅延はネットワーク往復時間(RTT)が主因です。CPUパワーを上げてもネットワーク遅延は短縮されないため、効果は限定的で根本解決にはなりません。
D
ElastiCache RedisをAmazon DAXに置き換えてDynamoDBのデータ取得を自動的にキャッシュする
Amazon DAXはDynamoDBに特化したインメモリキャッシュサービスであり、Redis互換のAPIをサポートしていません。セッション情報などを汎用的にキャッシュするElastiCache Redisの代替にはなれず、用途が根本的に異なります。

解説

LambdaのウォームインスタンスはExecution Environment(実行環境)を再利用するため、ハンドラー関数の外側(グローバルスコープ)で初期化したオブジェクトは次の呼び出しでも保持されます。Redis接続オブジェクトをグローバルスコープで確立することで、コールドスタート時のみ接続を確立し、同一実行環境への後続呼び出しでは既存の接続をそのまま再利用できます。これにより毎回の接続確立オーバーヘッドが排除され、Durationを大幅に削減できます。 選択肢BのElastiCacheリードレプリカ追加は読み取りスループット向上のための手段であり、毎回の接続確立というコード設計の問題は解消しません。 選択肢CのLambdaメモリ増加はCPU割り当てを比例増加させますが、接続確立レイテンシの主因はネットワーク往復遅延(RTT)であり効果は限定的です。 選択肢DのAmazon DAXはDynamoDB専用のインメモリキャッシュサービスであり、汎用のRedisセッションキャッシュの代替にはなりません。

ドメイン別正答率・予想スコアでリアルタイムに実力把握

無限ノックでDVAを徹底対策。全問AI生成のオリジナル問題。

無料で演習を始める →
← DVA の問題一覧に戻る