Slide 1

Slide 1 text

AWS Lambda SnapStart で Java の起動高速化 できるって本当ですか? JavaDoでしょう#21 ハイブリット開催!Javaもそれ以 外も幅広く聞きたい・話したい! 2023/01/27 木原卓也 / @tacck 1 JavaDoでしょう#21 / #javado

Slide 2

Slide 2 text

JavaDoでしょう#21 / #javado 2 木原 卓也 Kihara, Takuya / tacck 生活協同組合コープさっぽろ ゆるWeb勉強会@札幌 AWS Community Builder デジタル推進本部システム部 主催 Amplify Japan User Group 運営メンバー Q2 2021, 2022 / Category: Front-end Web and Mobile 好きなフィギュアスケートの技 スプレッド・イーグル

Slide 3

Slide 3 text

AWS Lambda で Java を使いたい 3 JavaDoでしょう#21 / #javado

Slide 4

Slide 4 text

AWS Lambda で Java を使いたい でも、起動が遅いよね。。。 4 JavaDoでしょう#21 / #javado

Slide 5

Slide 5 text

そんな常識を打ち破る 新機能が追加されました!! 5 JavaDoでしょう#21 / #javado

Slide 6

Slide 6 text

AWS Lambda SnapStart • re:Invent 2022 で発表 (2022年11月29日) • Lambda のランタイムで Java 11 を選んだ場合に、 コールドスタートを劇的に早くする仕組み。 6 JavaDoでしょう#21 / #javado

Slide 7

Slide 7 text

AWS Lambda Lifecycle • ライフサイクルは三つの状態に大別 • INIT : 初期化関係 (マイクロコンテナ起動、ラインタイム起動、関数初期化) • INVOKE: 関数実行 • SHUTDOWN: マイクロコンテナの終了 7 JavaDoでしょう#21 / #javado https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtime-environment.html#runtimes-lifecycle

Slide 8

Slide 8 text

Lambda 起動における状態 • 関数の実行には二つの状態があり、実行されるライフサイクルの起点 が異なる。 • Cold Start • INIT から実行(コンテナが新規に作成される) • Warm Start • INVOKE から実行(起動済みコンテナの流用) 8 JavaDoでしょう#21 / #javado https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtime-environment.html#runtimes-lifecycle Warm Start Cold Start

Slide 9

Slide 9 text

なぜ Java の起動は遅いと言われるか • ライフサイクルは三つの状態に大別 • INIT : 初期化関係 (マイクロコンテナ起動、ラインタイム起動、関数初期化) • INVOKE: 関数実行 • SHUTDOWN: マイクロコンテナの終了 • 関数初期化時に “JVMの起動” が必要 →ここに一定の時間が必要 • INIT 処理後のスナップショットを撮って、 それを使えば早くなるんじゃね? → Lambda SnapStart 9 JavaDoでしょう#21 / #javado

Slide 10

Slide 10 text

デモ 10 JavaDoでしょう#21 / #javado

Slide 11

Slide 11 text

比較 • 円周率を求める関数を使って、起動の重い処理を表現。 11 JavaDoでしょう#21 / #javado Lambda の設定 円周率関数を呼ぶ場所 Lambda の状態 起動 従来の Lambda 起動 INVOKE Cold Start 重い Warm Start 重い INIT Cold Start 重い Warm Start 軽い SnapStart で Lambda 起動 INVOKE Cold Start 重い Warm Start 重い INIT Cold Start 軽い Warm Start 軽い

Slide 12

Slide 12 text

AWS Lambda SnapStart で Java の起動高速化 できるって本当ですか? 12 JavaDoでしょう#21 / #javado

Slide 13

Slide 13 text

本当です! • Cold Start が重いから Lambda で Java はちょっと、、、 となっていたが、今後は選択肢として十分に選べる。 • 利用できるランタイムは、 Java 11 のみ。 (Java 8 は対象外) • 利用料は無料!! • INIT処理がスナップショット化されるので、 例えば実行ごとにユニークIDを生成したい、という場合 ユニークID生成処理は INVOKE に入れましょう。 13 JavaDoでしょう#21 / #javado

Slide 14

Slide 14 text

終 14 JavaDoでしょう#21 / #javado