Question#37(SAP-C02)
ある企業は、レイテンシーに敏感なアプリケーションを開発しています。アプリケーションの一部には、迅速に初期化する必要がある複数のAWS Lambda関数が含まれています。これらのLambda関数はJavaで記述されており、ライブラリの読み込み、クラスの初期化、ユニークIDの生成を行う初期化コードがハンドラーの外にあります。スタートアップパフォーマンスの要件を最もコスト効率よく満たすソリューションはどれですか?
正解:D
この問題は、Java で書かれた Lambda 関数の「初期化コード(ハンドラー外)」が重く、コールドスタートの遅延を招いている、という前提です。最もコスト効率よく起動性能を上げる解は Lambda SnapStart for Java を用いて、初期化済み状態のスナップショットから高速復元させることです。SnapStart は発行済みバージョンに対して有効化され、パブリッシュ時に初期化(ライブラリ読込、クラス初期化等)を一度だけ実行してスナップショットを作り、以後のコールドスタートはそのスナップショットから復元されるため、Java の初期化コストをほぼ解消できます。
ただし、スナップショットに固定化してはいけない「非決定的な初期化」(例:一意 ID の生成、時刻依存・乱数依存の値、資格情報や一時トークンなど)は、スナップショット前に実行してはならないという制約があります。解決策は二つあり、ひとつは本問のように一意 ID 生成をハンドラー内(呼び出し時)に移すこと、もうひとつは SnapStart のスナップショット・フック(BeforeCheckpoint / AfterRestore)を使って、スナップショット直前に状態をクリアしたり、復元後に再初期化したりすることです。選択肢 D はこのベストプラクティスに合致しており、さらに発行済みバージョンに対して SnapStart を有効化する正しい手順になっています。プロビジョンド同時実行を使わずにコールドスタートを大幅短縮できるため、最もコスト効率が高い解になります。
コメント