ある開発チームは Lambda 関数から Secrets Manager のシークレットを取得するコードを実装しています。本番環境ではシークレット取得のたびに API コールが発生しパフォーマンスとコストに影響が出ています。コードの大幅な変更を避けつつ、Secrets Manager 呼び出しの頻度を最小化する最も推奨される方法はどれですか?
- A. DynamoDB にシークレット値を複製してキャッシュし、Lambda はまず DynamoDB を参照するよう実装する
- B. Lambda 関数の環境変数にシークレット値をキャッシュし、コールドスタート時のみ Secrets Manager を呼び出す
- C. シークレットの TTL を無効化して永続的なキャッシュとして Lambda のメモリに保持する
- D. AWS Secrets Manager の Lambda 拡張機能(AWS Parameters and Secrets Lambda Extension)を使用してローカルキャッシュを有効にする
解答と解説を見る
正解: D
AWS Parameters and Secrets Lambda Extension(AWS Lambda 拡張機能)は Lambda 関数の実行環境上でローカル HTTP サーバーとして動作し、Secrets Manager および Parameter Store の値をキャッシュします。Lambda コードはローカルエンドポイント(localhost:2773)に HTTP GET するだけでキャッシュ済みの値を取得できるため、Secrets Manager への実際の API コールを大幅に削減できます。コードの変更も最小限です。B の環境変数キャッシュはコールドスタート時にシークレットが取得されますが、ローテーション後の値が反映されないリスクがあり、セキュリティ上問題があります。A の DynamoDB 複製は管理が複雑でコストも増加し、シークレットの同期ロジックが別途必要です。C の永続キャッシュはローテーション後のシークレット更新が反映されず、セキュリティ上許容できません。
📚 関連サービスの解説: AWS Secrets Manager ・ AWS Lambda