Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
AWS Serverless Java Container, Spring Bootで試して...
Search
Hiroto YAMAKAWA
January 28, 2023
Programming
1.1k
6
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
AWS Serverless Java Container, Spring Bootで試してみた / javado22
「ハイブリット開催!Javaもそれ以外も幅広く聞きたい・話したい!」にて登壇
https://javado.connpass.com/event/270973/
Hiroto YAMAKAWA
January 28, 2023
More Decks by Hiroto YAMAKAWA
See All by Hiroto YAMAKAWA
日本PostgreSQLユーザー会北海道支部(JPUG-Ezo)の紹介 / BEACON#01 JPUG-Ezo
gishi_yama
0
34
Javaユーザーグループ北海道(JavaDo)の紹介 / BEACON#01 JavaDo
gishi_yama
0
36
Beyond Coding: Empowering the Next Generation through Community-Supported Programming Education / CIF26
gishi_yama
0
65
1password で 開発環境の環境変数を安全に管理したい / mild-web-sap #31
gishi_yama
0
61
新しいJavaを学んで・使っていこう! / osd26do
gishi_yama
0
260
Hokkaido JUGのJCP Annual Awards授賞式 / JJUG CCC 2026 Spring LT
gishi_yama
0
110
カンファレンスのCFPを 試しに書いてみよう! / JavaDo32
gishi_yama
0
390
開発環境構築の共通要素:必要なものを手元に持ってきて使えるようにする/JavaDo28
gishi_yama
0
210
ドメイン層×日本語プログラミング/seb_sapporo_04
gishi_yama
1
240
Other Decks in Programming
See All in Programming
JRuby: Past, Present, and Future
headius
0
220
mrbgem 三角測量 開発
ogom
0
200
GemmaをJevのように使ってみる / Use Gemma like Jev
kishida
5
710
wkhtmltopdfの次どうするか問題2026
willnet
2
1.9k
C#の現在地 進化の歴史と、AI時代の.NET Everywhere
neuecc
5
4.9k
速く作れる。その次は、速く確かめられる開発へ 〜AIネイティブ開発を支える、Shift Down〜 / Can build fast. Next, moving to development where we can verify fast.
rkaga
8
5.5k
パーソナライズPodcastを作った話
repunit11
0
120
仕様駆動開発による爆速プロダクト開発 / Bakusoku Spec Driven Development
kobakei
0
200
Ghostty + Neovimで作る 透明でカッコ良い開発環境
j341nono
0
150
ジョジョの世界をXRで再現する
mofurune
0
130
setup-vp GitLab対応の裏側
naokihaba
0
150
iOS 27でニュースアプリはどう変わる!? 〜日経電子版の新機能対応と、開発事例から〜
lynnswap
7
13k
Featured
See All Featured
Raft: Consensus for Rubyists
vanstee
142
7.7k
Building a Scalable Design System with Sketch
lauravandoore
464
34k
A designer walks into a library…
pauljervisheath
211
25k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.6k
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
610
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.3k
How to Talk to Developers About Accessibility
jct
2
560
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.5k
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
260
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.5k
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
690
Facilitating Awesome Meetings
lara
57
7.2k
Transcript
#javado AWS Serverless Java Container, Spring Bootで試してみた 山川広人(@gishi_yama) 1
XRMTG 2 公立千歳科学技術大学 情報システム工学科 専任講師 R&D: Experimental Development of ICT
Services, Learning Technology, Computer in Education, Programming & Programmer's Education Hiroto YAMAKAWA 千歳市バスロケーションシステムの開発(2016-2022) 適応型学習支援システムの開発、活用 レポート内の話しことば診断システムの開発 大学・小学校・地域でのプログラミング教育の実践(最近は学生とドメイン駆動設計にモブワークで挑戦するのが楽しい)
#javado What is the "AWS Serverless Java container" 3
#javado https://github.com/awslabs/aws-serverless-java-container/wiki によると... Spring BootフレームワークのJavaアプリケーションを API Gateway (or
Application Load Balancer)と 連携する形でAWS Lambda で簡単に実行するライブラリ 他にもSpring単体, Jersey, Struts2注1, Sparkに対応している サーブレットコンテナの代わりにフレームワークを起動して、 クライアントからの要求(API Gateway プロキシイベント)は HttpServletRequest などに変換してフレームワークに渡す フレームワークからの返答(レスポンス)は API Gatewayが扱えるLamdaの戻り値相当に変換して返す AWS Serverless Java Container 4 注1 Struts2 !?と思ったけど、2018年時点でサイズやメモリ消費量はSpringBootよりもちょっといいぞ!という記事もある https://www.jgeppert.com/2018/05/serverless-aws-lambda-performance-of-apache-struts2-vs-spring-boot/ 注2 https://apiexplorer.wordpress.com/2016/03/11/creating-aws-lambda-using-java-and-spring-framework/ 注3 https://youtu.be/aiH8Z7MGGL0?t=1434 SpringとかLambdaで動かない の?という話題は2016年ぐらい からあった注2中で開発が始まり、 日本でもAWS Summit Tokyo 2017で紹介されていた注3 なので、もしかしたら AWSでバリバリJava使ってる勢にとっては 今更のネタなのかもしれない
#javado 事前にMaven(or Gradle)、AWS CLI、AWS SAM CLIが必要なのでインストールしておく 参考: https://github.com/awslabs/aws-serverless-java-container/wiki/Quick-start---Spring-Boot2 Quick Startを動かしてみる
5 ※後述の場所で SAM CLI は Gradle を優先して動作させるようなので、 Maven or Gradle によって、pom.xml or build.gradle の どちらかを残すように削除しておいた方がよい ビルドしたプロジェクトは AWS CloudFormation経由で配置されるので、 template.ymlがある
#javado 作成された my-service をIDE(IntelliJ IDEAなど)で読み込んで、ソースコードを見てみる pom.xml Quick Startを動かしてみる 6 今回話題の
AWS Serverless Java Container がライブラリとして読み込まれている (2022年12月現在、1.9.1が最新) 作成直後は 1.8 (Java 8) なので、 Lambdaが対応している 最新版のJDKとなる 11 (Java 11)に しておく
#javado 作成された my-service をIDE(IntelliJ IDEAなど)で読み込んで、ソースコードを見てみる Application.java Quick Startを動かしてみる 7 AWS
Lambdaのコールドスタートの 速度を向上させるために、@Import でインジェクションするクラスを 明示的に指定している パッケージごとインジェクションするなら @ComponentScan
#javado 作成された my-service をIDE(IntelliJ IDEAなど)で読み込んで、ソースコードを見てみる PingController.java Quick Startを動かしてみる 8 ノーマルな
@RestController デフォルトは Hello World なのでデモ用にちょっと変更 (テストコードのStreamLambdaHandlerTest:L52もコメントアウトする)
#javado 作成された my-service をIDE(IntelliJ IDEAなど)で読み込んで、ソースコードを見てみる StreamReaderHandler.java (コメントアウト割愛) Quick Startを動かしてみる 9
AWS Lambaの要求/返答と Spring Boot(Servlet)の 要求/返答をプロキシする ハンドラ このクラスを用意することで、 既存のプロジェクトも AWS Serverless Container で動作させることができる HTTP2を使ったり、 Lambdaの10秒起動ルールに 間に合わない場合は ビルダーを切り替える (この資料では割愛した部分)
#javado Quick Startを動かしてみる 10 AWS SAM CLI で build &
deploy .aws-sam の中に プロジェクトがビルドされる ※sam sync でもっと簡単にできますが、 この記事ではマニュアル準拠で 実行しています
#javado Quick Startを動かしてみる 11 AWS SAM CLI で build &
deploy 無事に配置された! ※sam sync でもっと簡単にできますが、 この記事ではマニュアル準拠で 実行しています
#javado Quick Startを動かしてみる 12 動作確認(jqコマンドが別途インストールされているとします) 無事にJSONが取れた! 廃棄するときは...
#javado AWS Lambdaでフレームワークが動いて何がうれしい? →フレームワークの機能やライブラリ等を使える Springの機能やライブラリもちゃんと使える 13 キャッシュした値を使えるようにしてみる(変更点のみ記載) 5秒ごとにキャッシュクリア 実行結果をキャッシュ
#javado Springの機能やライブラリもちゃんと使える 14 キャッシュした値を使えるようにしてみる(変更点のみ記載) キャッシュとそのクリアが 効いている
#javado AWS Serverless Java Container は、 AWS Lambda &
AWS API Gateway にJavaのフレームワークベースで作成したアプリを 簡単に配置できるライブラリ Spring Boot用のQuick Startを動かしてみることで、動作や内容を簡単に確認できる ⇒ 中身も非常にシンプルで、理解しやすい AWS Serverless Java Container を使うことで、 普段使い慣れたフレームワークの機能やライブラリを使って、AWS Lambda 関数を準備できる 既存のプロジェクトに組み込んでServerless Java Containerとして動かせるようにしたり、 Spring Bootの場合、Spring Security(ただし、Sessionはステートレスのみ)やWebFluxとの 連携などもできるようだが、まだ試せてない... まとめ 15