レイヤー/実行環境(Lambda拡張機能)難易度 標準無料
開発チームは、Lambda関数のログとメトリクスをサードパーティのオブザーバビリティSaaSへ転送したいが、既存の関数ハンドラーのビジネスロジックには一切手を入れたくない。また、関数の実行環境がシャットダウンされる直前にバッファ中のデータを確実にフラッシュしてから送信を完了させたい。この要件を満たす実装として最も適切なものを選べ。(単一選択)
- AサードパーティのオブザーバビリティエージェントをLambda拡張機能(外部拡張機能)としてレイヤー経由で関数にアタッチする。拡張機能はShutdownイベントを購読し、実行環境の終了直前にバッファをフラッシュしてから送信を完了する
- Bハンドラー関数のコードの最後に、サードパーティAPIへログ・メトリクスを同期的に送信する処理を追加する
- CCloudWatch Logsのサブスクリプションフィルタで別のLambda関数を起動し、そこから都度サードパーティAPIへログを転送する。この構成であればシャットダウン時のフラッシュ制御が可能である
- D関数のメモリを増やしてCPU性能を上げ、ハンドラー内でのログ転送処理を高速化することで、ビジネスロジックへの影響を最小化する
正解・解説・誤答理由・ひっかけを見る▼ open
✓ 正解:AAI作成・独立検証済
解説
Lambda拡張機能(Lambda extensions)は、関数の実行環境内でランタイムとは別プロセスとして動作し、 Lambda Extensions APIを通じてInit・Invoke・Shutdownの各ライフサイクルイベントを購読できる仕組みである。
- 外部拡張機能(external extension)として、サードパーティのオブザーバビリティエージェントをレイヤーとしてパッケージ・配布し、 関数にアタッチするだけでログ・メトリクス転送機能を追加できる。ハンドラーのビジネスロジックのコード変更は不要。
- 拡張機能はShutdownイベントを購読できるため、実行環境が破棄される直前の通知を受け取り、 バッファ中のデータを確実にフラッシュしてから終了する処理を実装できる。
- 関数コード側で毎回同期的にログ転送APIを呼ぶ実装(B)は、ハンドラーの実行時間・レイテンシに転送処理の待ち時間が上乗せされ、 かつビジネスロジックとの結合度が高くなる。
- B要件の「ビジネスロジックに手を入れない」に反する。また同期送信はハンドラーの実行時間・レイテンシに転送処理の待ち時間が上乗せされる。
- Cサブスクリプションフィルタ経由の転送自体は成立するが、元の関数の実行環境のShutdownイベントに連動したフラッシュ制御はできない。要件のタイミング制御を満たさない。
- Dハンドラー内にログ転送処理を実装している時点で要件の「ビジネスロジックに手を入れない」を満たしておらず、メモリ増強は根本的な解決にならない。
ひっかけ: 「サードパーティ連携なので必ずハンドラーコードの変更が要る(B・D)」という思い込みに注意。Lambda拡張機能はハンドラーコードを変更せずに
横断的関心事(ロギング、セキュリティエージェント、シークレット取得等)を追加できる仕組みであり、Shutdownイベントの購読によるグレースフルな終了処理もポイント。
AIが作成し、独立した検証を経た解説です(有資格者による監修は経ていません)