Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
al2023のカスタムランタイム使ってみた
Search
Sho
January 28, 2024
Programming
0
100
al2023のカスタムランタイム使ってみた
Lambdaのal2 ランタイムからal2023への移行とJava11からJava21への移行の実践話
Sho
January 28, 2024
Tweet
Share
More Decks by Sho
See All by Sho
Lambdaのこと
ririru0325
0
7
Other Decks in Programming
See All in Programming
Micro Frontends for Java Microservices - Utah JUG 2024
mraible
PRO
1
100
新宿ダンジョンを可視化してみた
satoshi7190
3
350
GitHub Copilotのススメ
marcy731
1
220
Build Apps for iOS, Android & Desktop in 100% Kotlin With Compose Multiplatform (mDevCamp 2024)
zsmb
0
420
はてなにおける CSS Modules、及び CSS Modules に足りないもの / CSS Modules in Hatena, and CSS Modules missing parts
mizdra
7
970
デフォルトにして至高、RubyMineの大好きな所
ruzia
0
660
Milestoner
bkuhlmann
1
410
冗長なエラーログを削減し、スタックトレースを手に入れる / Reducing Verbose Error Logs and Obtaining Stack Traces
upamune
0
970
Next.js App Router
quramy
11
1.6k
Behind VS Code Extensions for JavaScript / TypeScript Linnting and Formatting
unvalley
5
1.1k
Snowflakeで眠ったデータを起こそう!
estie
0
130
AWS CDKコントリビュートTIPS / aws-cdk-contribution-tips
gotok365
4
320
Featured
See All Featured
Automating Front-end Workflow
addyosmani
1357
200k
Fireside Chat
paigeccino
22
2.6k
Creatively Recalculating Your Daily Design Routine
revolveconf
211
11k
No one is an island. Learnings from fostering a developers community.
thoeni
16
2.1k
Facilitating Awesome Meetings
lara
43
5.6k
The Language of Interfaces
destraynor
151
23k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
34
8.9k
Building Better People: How to give real-time feedback that sticks.
wjessup
356
18k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
41
4.4k
Music & Morning Musume
bryan
41
5.6k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
358
22k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
242
1.2M
Transcript
al2023のカスタムランタイム使ってみた
目次 ・自己紹介 ・目的 ・前提 ・概要 ・本題 ・おまけ
自己紹介 • 名前: 桑名 翔(クワナ ショウ) • 年齢: 27歳 •
会社: エムオーテックス株式会社 • 趣味: スノーボード、ゲーム
目的 • 今日はやってみたことの共有と知ったことの共有 ◦ 間違ってることあったら教えてほしい
前提 • native-imageについて ◦ native-imageは、GraalVMの機能の1つで、Javaアプリケーションをネイティ ブイメージにコンパイルするためのツール ◦ ネイティブイメージは、実行にJVMを必要とせず、起動時間が短く、メモリ 使用量が少ないという利点がある •
al2023のカスタムランタイムについて ◦ 去年の11月に新しく出たal2023をベースイメージにしたlambdaのランタイム ◦ 自分でLambda Runtime Apiを呼び出してランタイム部分の実装もしないとい けない
前提 • native-imageについて ◦ native-imageは、GraalVMの機能の1つで、Javaアプリケーションをネイティ ブイメージにコンパイルするためのツール ◦ ネイティブイメージは、実行にJVMを必要とせず、起動時間が短く、メモリ 使用量が少ないという利点がある •
al2023のカスタムランタイムについて ◦ 去年の11月に新しく出たal2023をベースイメージにしたlambdaのランタイム ◦ 自分でLambda Runtime Apiを呼び出してランタイム部分の実装もしないとい けない
概要 • 以下の変更を試した ◦ before: ▪ GraalVM: vm-22.3.3(java11) ▪ ランタイム:
al2 ◦ after: ▪ GraalVM: jdk-21.0.2 ▪ ランタイム: al2023
ビルド時にやってること 1. sbt-assemblyを使ってjarを作成 2. al2のベースイメージのコンテナに必要なものをインストール 3. イメージのビルド
今回主に変更を加えた点 1. コード自体は特にjavaのバージョン違いによる互換性の問題はほぼなく、基 本的なライブラリだったり、scalaのバージョンのアップデートのみ実施 2. Dockerfile ◦ ベースイメージの変更 ◦ ネイティブイメージのビルドに使うGraalVmの変更
Dockerfile(before) Dockerfile(after)
al2 -> al2023への移行 1. ベースイメージをal2023に変更するだけで対応完了 ◦ 必要なものはyumでインストールしたり、curlで直接落としてきているので、そもそもほとん ど依存していなかった
GraalVMの移行 1. curlで取得するバージョンを変更 2. 以前のバージョンまではgu(GraalVM Updater)を利用してnative-imageのコン ポーネントをインストールする必要があったが、guが削除され、native-image が標準装備になったので、Dockerfileからこの手順を削除 3. ビルドコマンドは以前と同じものでビルドできた
嬉しいなと思った点 1. native-imageのコンポーネントをインストールする必要がなくなった ◦ シンプルに楽になって嬉しい 2. ほとんど変更なくビルドできた ◦ そもそも実装がシンプルなlambdaだったのもあるかもしれない 3.
–strict-image-heapオプション ◦ 新しく追加されたオプションで、今回はビルドコマンドの変更が不要だったので恩恵を受け ることはなかったが、今後新しくイメージをビルドする際にはうまく使いたい ◦ jdk22からデフォルトになるらしい
移行してみて • 意外としんどくなかった ◦ ランタイムについてはもしかしてほぼ修正いらないんじゃないかとは思っていたけど、Javaの 移行も意外と楽だった ◦ 今回移行したlambdaはそもそも処理が単純でライブラリもほとんど使ってないようなものだ ったからだと思うけど・・・ •
新しいオプションとか知れてよかった ◦ やらなきゃ調べないので、いい機会になった
おまけ: ランタイム毎の初回の実行速度の違い init duration total JVM11 618.69 ms 14202.69 ms
14821.38ms JVM21 461.43 ms 8371.08 ms 8832.5ms al2 327.13 ms 612.06 ms 939.19ms al2023 312.93 ms 640.32 ms 954 ms
参考情報 • GraalVM: ◦ https://www.oracle.com/jp/java/graalvm/what-is-graalvm/ • GraalVM JDK21: ◦ https://www.graalvm.org/release-notes/JDK_21/
• native-image: ◦ https://docs.oracle.com/cd/F44923_01/enterprise/21/docs/reference-manual/native-image/#native- image • Lambda カスタムランタイム: ◦ https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/runtimes-custom.html • al2023: ◦ https://docs.aws.amazon.com/linux/