AWS Lambda SnapStart で Java の起動高速化できるって本当ですか? #javado
by
Kihara, Takuya
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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