Slide 1

Slide 1 text

Lambdaのコールドスタートのこと

Slide 2

Slide 2 text

目次 ・自己紹介 ・課題 ・色々調べてみた ・色々やってみた ・まとめ

Slide 3

Slide 3 text

自己紹介 ● 名前: 桑名 翔(クワナ ショウ) ● 年齢: 27歳 ● 会社: エムオーテックス株式会社 ● 趣味: スノーボード、ゲーム

Slide 4

Slide 4 text

課題 ● Lambdaのコールドスタートを何とかしたい ○ 自分が参画しているプロジェクトではAWS Lambdaがよく使われている ○ 言語はScalaなので、Java ランタイムで動かしている ○ Java ランタイムのLambdaは初回起動にとても時間がかかる

Slide 5

Slide 5 text

色々調べてみた ● Javaのこと ○ JITコンパイラについて ○ 階層型コンパイルについて ○ C1とC2とインタプリタについて ● Lambdaのこと ○ 環境変数にオプションを入れられること ○ SnapStartのこと ○ ProvisionedConcurrencyのこと

Slide 6

Slide 6 text

色々やってみた ● DynamoDbからgetItemしてprintするだけのコードをJarにしてデプロイ 1. とりあえずデフォルト実行で動作の時間チェック 2. 階層型コンパイル有効化 ○ 環境変数に以下をセット ”JAVA_TOOL_OPTIONS”: ”-XX:+TieredCompilation -XX:TieredStopAtLevel=1” 3. ProvisionedConcurrencyを有効化 ○ Lambdaの設定にある (https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/provisioned-concurrency.html) 4. SnapStartを有効化 ○ Lambdaの設定にある (https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/snapstart.html)

Slide 7

Slide 7 text

色々やってみた結果 1. とりあえずデフォルト実行で動作の時間チェック 2. 階層型コンパイルを有効化 3. ProvisionedConcurrencyを有効化 4. SnapStartを有効化 ○ 4a: ダミー実行なし ○ 4b: ダミー実行あり init duration sum 1. 3955 193 4148 2. 2260 142 2402 3. --- 590 590 4a. 784 15649 16433 4b. 1099 1880 2979 2 + 4b 877 987 1864

Slide 8

Slide 8 text

最後に 去年でたSnapStartやオプションをうまく活用すれば、簡単な処理であればJavaランタイム のLambdaでも、初回スタートを割と早くできた。 GraalVMのネイティブイメージを使ったカスタムランタイムでの実装は、中々制約が多く、 設定が難しいので、まだ実用レベルまで持っていけてないので、今後調査研究して使え るところでは使っていきたい。