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
Javaのレガシーな Web アプリを ECS Fargate を使って段階的に作り直し/...
Search
hmatsu47
PRO
March 30, 2022
Technology
750
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Javaのレガシーな Web アプリを ECS Fargate を使って段階的に作り直し/マイグレーションする話
2022/3/30 JAWS-UG 名古屋
hmatsu47
PRO
March 30, 2022
More Decks by hmatsu47
See All by hmatsu47
中小企業に就職して転職せず30年。結果どうなった?
hmatsu47
PRO
0
93
JAWS ミート 2026 の「出し物」のゲームを Kiro と AI-DLC v2 で作った話
hmatsu47
PRO
0
27
ゲームで挑戦!VPC の気持ちになって IPv4/v6 パケットをルーティングしよう!
hmatsu47
PRO
0
31
続・名古屋城とデータセンター
hmatsu47
PRO
0
29
【再演】IPv6 VPC の実装パターンをいくつか
hmatsu47
PRO
0
34
名古屋城とデータセンター
hmatsu47
PRO
0
42
IPv6 に関する話
hmatsu47
PRO
0
32
さいきんの光ファイバーの話
hmatsu47
PRO
0
78
低いほうのレイヤを見てみる話
hmatsu47
PRO
0
36
Other Decks in Technology
See All in Technology
AI駆動開発、viviONの1年 ── うまくいったこと・いかなかったこと
vivion
0
260
3つのアプローチで目指す チームを強くするAI駆動開発
thkt
0
110
AI時代のAPI開発を加速する品質ガードレール / API Quality Guardrails in the AI Era
yokawasa
0
150
雪かき部 #7 もう怖くない!SELECT文!
foursue
0
280
Lambda MicroVMsが分からなすぎたので使い所を1から考えてみた
tsukuboshi
2
410
事業活動を AI Ready にする攻めと守りのデータエンジニアリング / data-engineering-for-ai-ready-business
pei0804
3
350
サーバーフルコンピューティング?AWS Lambda
iwatatomoya
1
260
Meet AgentCore Identity Consent Portal
hironobuiga
3
190
IR Today: Theory, Practice, and Agents
dtunkelang
0
350
購入ドメインでの課題と取り組み
ykagano
0
140
SDDの運用にめげずに向き合った話
sansantech
PRO
1
130
Datadog の学び方 - あるいは、オブザーバビリティを学ぶとは何か
mananyuki
1
490
Featured
See All Featured
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
400
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
570
Color Theory Basics | Prateek | Gurzu
gurzu
1
480
The Limits of Empathy - UXLibs8
cassininazir
1
700
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.6k
brightonSEO & MeasureFest 2025 - Winning Strategies for Black Friday CRO & PPC - Christian Goodrich
cargoodrich
3
860
Speed Design
sergeychernyshev
33
2.1k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
232
55k
Designing for Timeless Needs
cassininazir
1
520
Building Flexible Design Systems
yeseniaperezcruz
330
41k
How GitHub (no longer) Works
holman
316
150k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Transcript
Java のレガシーな Web アプリケーションを ECS Fargate を使って 段階的に作り直し/マイグレーションする話 JAWS-UG 名古屋
JAWS-UG 名古屋 コンテナを語ろう!! 2022/3/30 まつひさ(hmatsu47)
自己紹介 松久裕保(@hmatsu47) • https://qiita.com/hmatsu47 • 現在のステータス: ◦ 名古屋で Web インフラのお守り係をしています
◦ Aurora MySQL v1 → v3 絶賛移行準備中! ▪ https://zenn.dev/hmatsu47/articles/aurora-mysql3-001-top ほか 2
本日のネタ タイトルでほぼ説明してしまっていますが、 • EC2 に同居する複数の Java Web アプリケーションを • 「えいや」で全部マイグレーションするのではなく、
• 個々に作り直したり構造を変えたりしながら • 段階的な移行を進めるのに ECS Fargate を使っている 話です。 3
作り直し/マイグレーション前のアプリケーション • 全て Java 8 & Apache Tomcat 8.5 のアプリケーション
◦ プラットフォームとしての Java / Apache Tomcat は共通 ◦ 同じ構成の EC2(複数台)上に同居させて稼働 ▪ 以降、「作り直し/マイグレーション」を単に「移行」と表記 ▪ 同様に「Apache Tomcat」を「Tomcat」と表記 4
Java のバージョン事情 • 現在の最新は Java 18(2022/3/22 リリース) ◦ Java 9
以降、6 ヶ月サイクルでのリリースに • LTS 最新は Java 17(2021/9/14 リリース) ◦ LTS : 長期サポートバージョン ◦ Java 17 までは 3 年サイクルのリリース ▪ 今後は 2 年サイクルにしたい、と Oracle が提案(次は Java 21) ◦ Java 17 は Java 8 の 2 つ後の LTS(8 → 11 → 17) 5
Java のバージョン事情(LTS のみ) 6 出典 : https://www.oracle.com/jp/java/technologies/java-se-support-roadmap.html ※Oracle 以外の OpenJDK
ディストリビューター各社のサポート期間は異なる 例 : Amazon Corretto 8 の EoL は 2026/05、Corretto 11 の EoL は 2027/09 バージョン GA 日 プレミアサポート期限 延長サポート期限 8 2014/03 2022/03 2030/12(仮) 11 2018/09 2023/09 2026/09 17 2021/09 2026/09(仮) 2029/09(仮) 21 2023/09 2028/09 2031/09
Java の互換性問題 • Java の後方互換性は高い • ただし Java 8 →
9 には以前と比べて大きな壁がある ◦ モジュール・システム導入による内部クラスの隠蔽強化など ▪ ディープ・リフレクション禁止 ▪ Java 9 時点ではまだ設定で回避可能→後のバージョンで完全に廃止 • Java 8 に止まるシステムが多いのはこれが一因 ◦ 実際には Java 9 以降ですんなり動くこともよくある 7
Tomcat と Java EE / Jakarta EE の関係 • Tomcat
: Web(Servlet / JSP など)コンテナ ◦ 注 : コンテナといっても Docker などとは別の文脈 ◦ 完全準拠ではないが Java EE / Jakarta EE の一部がベース ◦ Tomcat 10.0 から Jakarta EE ベースに変わった • Tomcat 8.5 は Java EE 7 ベース ◦ Java EE ベースの最終版は Tomcat 9.0(Java EE 8 ベース) 8
Java EE と Jakarta EE の関係 • Java EE :
Java Platform, Enterprise Edition ◦ Servlet / JSP などは Java EE の一部 • 2017 年に開発が Oracle からコミュニティベースへ ◦ Apache Software Foundation に移管、Jakarta EE になった • 現在の最新は 2021/5 リリースの Jakarta EE 9.1 ◦ Jakarta EE 9 は 2020/12 リリース ◦ 次期バージョンの Jakarta EE 10 は 2022/5 リリース予定 9
Jakarta EE 時代の Tomcat はどうなる? • Tomcat コミッタの藤野圭一さんのブログ記事より ◦ https://future-architect.github.io/articles/20210630a/
10
Jakarta EE 時代の Tomcat はどうなる? • Tomcat コミッタの藤野圭一さんのブログ記事より ◦ https://future-architect.github.io/articles/20210630a/
11 EE 9 → 10 のリリース間隔から 考えると 2023Q4 あたり?
Java EE / Jakarta EE と Tomcat の互換性問題 • Java
EE → Jakarta EE では名前空間の変更あり ◦ 商標の関係で javax が使えなくなったので jakarta へ ▪ ツールはあるが変換作業はそれなりに大変 • Tomcat 9.0 以前→ 10.0 以降の移行でこれに引っ掛かる ◦ 当面は実行時に自動変換する機能が提供される ▪ 時限措置なのでいつかは廃止される 12
その他の事情 • 個々のアプリケーション開発時期はまちまち ◦ リアルにレガシーな(ものを増改築した)アプリケーション ◦ 使用技術だけがレガシーなアプリケーション • 対応方針はそれぞれ ◦
フレームワークを変えたいアプリケーション ◦ 一部を SPA 化したいアプリケーション ◦ マイグレーションだけ実施したいアプリケーション 13
まとめると • 色々な組み合わせの稼働環境が必要になった ◦ Java / Tomcat の複数のバージョンが混在 ▪ なんなら一部は
Java / Tomcat ですらない • すべて EC2 で同居 or 別居させるのはつらい ◦ Java も Tomcat もリリースサイクルが速くなる気配 ▪ EoL もすぐにやってくる(Java 8 や Tomcat 9.0 以前が異常に長いだけ) ▪ 「手I/手D」には限界→ CI/CD できる環境が必要 ◦ コンテナ化が自然な流れ 14
結果として • EC2 は移行前アプリケーション稼働環境用に残す ◦ 移行の進捗にあわせて台数を減らす(最後は廃止) • 移行後アプリケーション稼働環境に ECS Fargate
を用意 ◦ アプリケーション別に順次コンテナ化&移行 • あわせて CI/CD パイプラインを用意(テスト環境用) ◦ https://zenn.dev/hmatsu47/articles/73c624fb5730dd ◦ 本番環境へのデプロイにはテスト済みのイメージを使う 15
Before(本番環境のみ) • すべてのアプリケーション が EC2 上に同居 • 複数台の同一構成の EC2 で負荷分散
16
After(本番環境) • 移行対象アプリケーション の稼働環境を ECS Fargate で切り出し • テスト環境からレプリケー ションした
ECR 内にある イメージを使用 ◦ ecspresso でデプロイ (図では省略) 17
After(テスト環境) • モノレポの GHE に Push が発生すると、Webhook から API Gateway
経由で Lambda 関数を呼び出し • Lambda で対象を判別して CodePipelineを並列呼び出 し 18
テスト環境用の CodePipeline • GHE リポジトリにデプロイ用ブランチを設置 ◦ Push → Lambda で振り分け→対象となる
CodePipeline が走る • Dockerfile・builespec.yml は GHE リポジトリに配置 ◦ 一部の Tomcat 設定ファイルは S3 バケットに配置 • CodeBuild でビルド ◦ Maven でテストコード実行&ビルド、その後イメージビルド • CodeDeploy で ECS クラスタにデプロイ 19
ECS を選択した理由 • 書籍を参考にして短期間で完成させたかった ◦ AWS コンテナ設計・構築[本格]入門 ◦ https://www.sbcr.jp/product/4815607654/ •
EC2 で使っている ALB をシンプルに共用したかった ◦ 既存 ALB : Blue / Green デプロイに対応できない状態 ▪ ECS でこの ALB を共用 :(Blue / Green デプロイを諦めれば)簡単 ◦ LB の多段化などによる構成の複雑化を避けたかった 20
Fargate を選択した理由 • EC2 の管理台数を増やしたくなかった ◦ OS 層の面倒まで見たくない ◦ 移行の進捗がどうなるか不透明なのでサイジングも難しい
• 特権コンテナを作り(作らせ)たくなかった 21
出てきた問題 • Tomcat アプリケーションの起動が遅い ◦ デプロイ後にタイムアウト→再デプロイを繰り返す ▪ 「タイムアウト設定 5 分」に延ばさないといけないとかつらい
◦ メモリを増やして対処 ▪ コストが… ◦ Auto Scaling の閾値調整が難しい ▪ 必ずしも CPU バウンドじゃなさそうだし 22
その他の課題 • CI/CD パイプラインの課題 ◦ 主にアプリケーション構成の関係で処理が冗長な部分がある ▪ 処理に時間がかかる ▪ ¥
もかかる ◦ テストコードがまだ少ない 23
余談:App2Container • Java / ASP.NET アプリケーションコンテナ化ツール ◦ https://aws.amazon.com/jp/app2container/ ◦ 移行を試した話
▪ https://dev.classmethod.jp/articles/app2container-for-tomcat/ ◦ 割と fat なコンテナが出来上がる模様 ▪ 起動時間が心配 24
最後に • Java の世界も常に進化しています ◦ まだの方、そろそろ Java 8 → 9
の壁を超えましょう ◦ Java EE → Jakarta EE の壁も超えましょう • レガシー環境を放置せず、便利な仕組みを利用しながら マイグレーションを進めましょう 25