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
AWS Serverless Java Container, Spring Bootで試して...
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Hiroto YAMAKAWA
January 28, 2023
Programming
6
990
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
カンファレンスのCFPを 試しに書いてみよう! / JavaDo32
gishi_yama
0
120
開発環境構築の共通要素:必要なものを手元に持ってきて使えるようにする/JavaDo28
gishi_yama
0
170
ドメイン層×日本語プログラミング/seb_sapporo_04
gishi_yama
1
190
Javaへの新たなHello, World / yuruchitose-04
gishi_yama
0
100
JSR381、知っていますか?Javaの画像認識APIのはなし / SC4Y23-05
gishi_yama
0
310
jPeekでのクラスの凝集度計測の試行 / mild-web-sapporo#24
gishi_yama
0
460
Github CopilotとChatGPTを使って感じた使い分けの糸口 / JavaDo #22
gishi_yama
1
1.8k
子ども向けプログラミング体験教室でのHololens2利用事例 / IoTLT#97
gishi_yama
0
150
Hololens2と 小中高プログラミング教育の利用にむけた試行 / XRMTG 2023-1-18
gishi_yama
0
390
Other Decks in Programming
See All in Programming
CSC307 Lecture 15
javiergs
PRO
0
260
Swift ConcurrencyでよりSwiftyに
yuukiw00w
0
270
Linux Kernelの1文字のミスで 権限昇格ができた話
rqda
0
1.5k
脱 雰囲気実装!AgentCoreを良い感じにWEBアプリケーションに組み込むために
takuyay0ne
2
280
SourceGeneratorのマーカー属性問題について
htkym
0
200
RubyとGoでゼロから作る証券システム: 高信頼性が求められるシステムのコードの外側にある設計と運用のリアル
free_world21
0
300
API Platformを活用したPHPによる本格的なWeb API開発 / api-platform-book-intro
ttskch
1
140
Vuetify 3 → 4 何が変わった?差分と移行ポイント10分まとめ
koukimiura
0
150
Everything Claude Code OSS詳細 — 5層構造の中身と導入方法
targe
0
130
Claude Codeログ基盤の構築
giginet
PRO
7
3.4k
PostgreSQL を使った快適な go test 環境を求めて
otakakot
0
560
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
680
Featured
See All Featured
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.9k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
290
Building an army of robots
kneath
306
46k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.7k
Rebuilding a faster, lazier Slack
samanthasiow
85
9.4k
SEO for Brand Visibility & Recognition
aleyda
0
4.4k
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
67
37k
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
0
180
GraphQLとの向き合い方2022年版
quramy
50
14k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
790
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
210
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
5.4k
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