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
36
Javaユーザーグループ北海道(JavaDo)の紹介 / BEACON#01 JavaDo
gishi_yama
0
40
Beyond Coding: Empowering the Next Generation through Community-Supported Programming Education / CIF26
gishi_yama
0
69
1password で 開発環境の環境変数を安全に管理したい / mild-web-sap #31
gishi_yama
0
62
新しいJavaを学んで・使っていこう! / osd26do
gishi_yama
0
270
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
Kotlinize Is Not Just Converting to Kotlin
chigichan24
1
200
golang-bob.pdf
iwatsukayura
0
140
Inertia Rails: The One-Person Framework with React & Friends
skryukov
0
170
AI主導のプログラミング学習アプリを作ってみた
econanringo
0
190
Railsバージョンを4倍にした話
optim
0
800
クラウドエージェントは、 何がそんなに便利なのか / what makes cloud agents so useful
rkaga
3
600
TanStack Vue Query と Pinia Colada から学ぶ非同期状態の型設計
aoshi
0
340
【加筆修正版】Laravel のアプリケーションをどこにデプロイするか #phpcon_ehime
akase244
0
160
Vue Fes Japan の “作る側”に関わってみて
naokihaba
1
200
PumaからFalconに移行したRailsアプリケーションでの実践
falcon8823
0
260
No More NoSuchMethodError
exoego
1
120
自サークルのIdPからログアウトできるようになるまで
taiseiue
1
150
Featured
See All Featured
Unsuck your backbone
ammeep
672
58k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
2
370
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
2
2.2k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
530
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.6k
Statistics for Hackers
jakevdp
799
230k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
20k
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
330
How to Think Like a Performance Engineer
csswizardry
28
2.9k
A Modern Web Designer's Workflow
chriscoyier
699
190k
Building Better People: How to give real-time feedback that sticks.
wjessup
371
20k
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