$30 off During Our Annual Pro Sale. View Details »
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
AWS Serverless Java Container, Spring Bootで試して...
Search
Hiroto YAMAKAWA
January 28, 2023
Programming
6
920
AWS Serverless Java Container, Spring Bootで試してみた / javado22
「ハイブリット開催!Javaもそれ以外も幅広く聞きたい・話したい!」にて登壇
https://javado.connpass.com/event/270973/
Hiroto YAMAKAWA
January 28, 2023
Tweet
Share
More Decks by Hiroto YAMAKAWA
See All by Hiroto YAMAKAWA
開発環境構築の共通要素:必要なものを手元に持ってきて使えるようにする/JavaDo28
gishi_yama
0
150
ドメイン層×日本語プログラミング/seb_sapporo_04
gishi_yama
1
180
Javaへの新たなHello, World / yuruchitose-04
gishi_yama
0
83
JSR381、知っていますか?Javaの画像認識APIのはなし / SC4Y23-05
gishi_yama
0
290
jPeekでのクラスの凝集度計測の試行 / mild-web-sapporo#24
gishi_yama
0
440
Github CopilotとChatGPTを使って感じた使い分けの糸口 / JavaDo #22
gishi_yama
1
1.8k
子ども向けプログラミング体験教室でのHololens2利用事例 / IoTLT#97
gishi_yama
0
140
Hololens2と 小中高プログラミング教育の利用にむけた試行 / XRMTG 2023-1-18
gishi_yama
0
370
小学生がmicro:bitを用いて行える課題解決を意識した自由研究事例 /SC4Y '22#4
gishi_yama
0
500
Other Decks in Programming
See All in Programming
LLM Çağında Backend Olmak: 10 Milyon Prompt'u Milisaniyede Sorgulamak
selcukusta
0
140
AIの誤りが許されない業務システムにおいて“信頼されるAI” を目指す / building-trusted-ai-systems
yuya4
6
4k
Tinkerbellから学ぶ、Podで DHCPをリッスンする手法
tomokon
0
140
バックエンドエンジニアによる Amebaブログ K8s 基盤への CronJobの導入・運用経験
sunabig
0
170
大規模Cloud Native環境におけるFalcoの運用
owlinux1000
0
200
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
360
AtCoder Conference 2025「LLM時代のAHC」
imjk
2
590
Java 25, Nuevas características
czelabueno
0
120
「コードは上から下へ読むのが一番」と思った時に、思い出してほしい話
panda728
PRO
39
26k
GISエンジニアから見たLINKSデータ
nokonoko1203
0
180
SwiftUIで本格音ゲー実装してみた
hypebeans
0
500
Python札幌 LT資料
t3tra
7
1.1k
Featured
See All Featured
Product Roadmaps are Hard
iamctodd
PRO
55
12k
How Software Deployment tools have changed in the past 20 years
geshan
0
30k
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
28
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
230
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
120
Digital Ethics as a Driver of Design Innovation
axbom
PRO
0
130
Build your cross-platform service in a week with App Engine
jlugia
234
18k
The Cost Of JavaScript in 2023
addyosmani
55
9.4k
Mobile First: as difficult as doing things right
swwweet
225
10k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
200
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
35
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