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
Hiroto YAMAKAWA
January 28, 2023
Programming
1
570
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
55
ドメイン層×日本語プログラミング/seb_sapporo_04
gishi_yama
1
71
Javaへの新たなHello, World / yuruchitose-04
gishi_yama
0
34
JSR381、知っていますか?Javaの画像認識APIのはなし / SC4Y23-05
gishi_yama
0
200
jPeekでのクラスの凝集度計測の試行 / mild-web-sapporo#24
gishi_yama
0
340
Github CopilotとChatGPTを使って感じた使い分けの糸口 / JavaDo #22
gishi_yama
1
1.4k
子ども向けプログラミング体験教室でのHololens2利用事例 / IoTLT#97
gishi_yama
0
93
Hololens2と 小中高プログラミング教育の利用にむけた試行 / XRMTG 2023-1-18
gishi_yama
0
300
小学生がmicro:bitを用いて行える課題解決を意識した自由研究事例 /SC4Y '22#4
gishi_yama
0
410
Other Decks in Programming
See All in Programming
サーバーゆる勉強会 DBMS の仕組み編
kj455
1
300
『改訂新版 良いコード/悪いコードで学ぶ設計入門』活用方法−爆速でスキルアップする!効果的な学習アプローチ / effective-learning-of-good-code
minodriven
28
4.1k
技術的負債と向き合うカイゼン活動を1年続けて分かった "持続可能" なプロダクト開発
yuichiro_serita
0
300
テストコード書いてみませんか?
onopon
2
340
ある日突然あなたが管理しているサーバーにDDoSが来たらどうなるでしょう?知ってるようで何も知らなかったDDoS攻撃と対策 #phpcon.2024
akase244
2
7.7k
PHPとAPI Platformで作る本格的なWeb APIアプリケーション(入門編) / phpcon 2024 Intro to API Platform
ttskch
0
390
AHC041解説
terryu16
0
380
watsonx.ai Dojo #6 継続的なAIアプリ開発と展開
oniak3ibm
PRO
0
170
テストコードのガイドライン 〜作成から運用まで〜
riku929hr
7
1.4k
PicoRubyと暮らす、シェアハウスハック
ryosk7
0
210
Beyond ORM
77web
11
1.6k
Azure AI Foundryのご紹介
qt_luigi
1
190
Featured
See All Featured
Learning to Love Humans: Emotional Interface Design
aarron
274
40k
Designing Experiences People Love
moore
139
23k
Typedesign – Prime Four
hannesfritz
40
2.5k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
127
18k
jQuery: Nuts, Bolts and Bling
dougneiner
62
7.6k
Scaling GitHub
holman
459
140k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
59k
4 Signs Your Business is Dying
shpigford
182
22k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
3
180
A Modern Web Designer's Workflow
chriscoyier
693
190k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.4k
Fashionably flexible responsive web design (full day workshop)
malarkey
406
66k
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