JavaDoでしょう#21 https://javado.connpass.com/event/270973/
AWS Lambda SnapStart で Java の起動が高速化されるようになった、という話とデモ。
AWS LambdaSnapStart でJava の起動高速化できるって本当ですか?JavaDoでしょう#21ハイブリット開催!Javaもそれ以外も幅広く聞きたい・話したい!2023/01/27木原卓也 / @tacck1JavaDoでしょう#21 / #javado
View Slide
JavaDoでしょう#21 / #javado 2木原 卓也Kihara, Takuya / tacck生活協同組合コープさっぽろゆるWeb勉強会@札幌AWS Community Builderデジタル推進本部システム部主催Amplify Japan User Group運営メンバーQ2 2021, 2022 / Category: Front-end Web and Mobile好きなフィギュアスケートの技スプレッド・イーグル
AWS Lambda でJava を使いたい3JavaDoでしょう#21 / #javado
AWS Lambda でJava を使いたいでも、起動が遅いよね。。。4JavaDoでしょう#21 / #javado
そんな常識を打ち破る新機能が追加されました!!5JavaDoでしょう#21 / #javado
AWS Lambda SnapStart• re:Invent 2022 で発表 (2022年11月29日)• Lambda のランタイムで Java 11 を選んだ場合に、コールドスタートを劇的に早くする仕組み。6JavaDoでしょう#21 / #javado
AWS Lambda Lifecycle• ライフサイクルは三つの状態に大別• INIT : 初期化関係 (マイクロコンテナ起動、ラインタイム起動、関数初期化)• INVOKE: 関数実行• SHUTDOWN: マイクロコンテナの終了7JavaDoでしょう#21 / #javadohttps://docs.aws.amazon.com/lambda/latest/dg/lambda-runtime-environment.html#runtimes-lifecycle
Lambda 起動における状態• 関数の実行には二つの状態があり、実行されるライフサイクルの起点が異なる。• Cold Start• INIT から実行(コンテナが新規に作成される)• Warm Start• INVOKE から実行(起動済みコンテナの流用)8JavaDoでしょう#21 / #javadohttps://docs.aws.amazon.com/lambda/latest/dg/lambda-runtime-environment.html#runtimes-lifecycleWarm StartCold Start
なぜ Java の起動は遅いと言われるか• ライフサイクルは三つの状態に大別• INIT : 初期化関係 (マイクロコンテナ起動、ラインタイム起動、関数初期化)• INVOKE: 関数実行• SHUTDOWN: マイクロコンテナの終了• 関数初期化時に “JVMの起動” が必要→ここに一定の時間が必要• INIT 処理後のスナップショットを撮って、それを使えば早くなるんじゃね? → Lambda SnapStart9JavaDoでしょう#21 / #javado
デモ10JavaDoでしょう#21 / #javado
比較• 円周率を求める関数を使って、起動の重い処理を表現。11JavaDoでしょう#21 / #javadoLambda の設定 円周率関数を呼ぶ場所 Lambda の状態 起動従来の Lambda 起動 INVOKE Cold Start 重いWarm Start 重いINIT Cold Start 重いWarm Start 軽いSnapStart で Lambda 起動 INVOKE Cold Start 重いWarm Start 重いINIT Cold Start 軽いWarm Start 軽い
AWS Lambda SnapStart でJava の起動高速化できるって本当ですか?12JavaDoでしょう#21 / #javado
本当です!• Cold Start が重いから Lambda で Java はちょっと、、、となっていたが、今後は選択肢として十分に選べる。• 利用できるランタイムは、 Java 11 のみ。 (Java 8 は対象外)• 利用料は無料!!• INIT処理がスナップショット化されるので、例えば実行ごとにユニークIDを生成したい、という場合ユニークID生成処理は INVOKE に入れましょう。13JavaDoでしょう#21 / #javado
終14JavaDoでしょう#21 / #javado