Upgrade to Pro — share decks privately, control downloads, hide ads and more …

AWS Lambda SnapStart で Java の起動高速化できるって本当ですか? #javado

AWS Lambda SnapStart で Java の起動高速化できるって本当ですか? #javado

JavaDoでしょう#21
https://javado.connpass.com/event/270973/

AWS Lambda SnapStart で Java の起動が高速化されるようになった、という話とデモ。

Kihara, Takuya

January 28, 2023
Tweet

More Decks by Kihara, Takuya

Other Decks in Technology

Transcript

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  8. 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

    View Slide

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

    View Slide

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

    View Slide

  11. 比較
    • 円周率を求める関数を使って、起動の重い処理を表現。
    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 軽い

    View Slide

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

    View Slide

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

    View Slide


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

    View Slide