EC2+DockerでのJavaアプリケーション運用
2020/11/1 Takumi Fukaya
はじめに
この資料はEC2・Docker共に初心者の方向けに、EC2+Docker+TomcatによるJavaアプリケーション運用について説明した資料になります。
Javaでのアプリケーション開発方法については触れておりません。
自己紹介
名前:深谷 匠(ふかや たくみ)
技術大好き
所属:株式会社システム情報(SIC)
技術監理本部》技術統括部
技術主幹
経歴:・2013 - 2018 地方中小SIerにてSE業務
・2018 - 2020 SIC事業部門にてPM業務
・2020 - SIC技術部門にてR&D
活動:・事業部案件でのPM業務
・社内DevOps推進Pでの企画・運営
・MCS社内研修環境の構築
趣味:・温泉巡り(2020年はコロナの影響でまだ3箇所)
・サッカー観戦(コンサドーレ札幌サポ)
・アニメ鑑賞(今期イチオシは魔法科・ダンまち・魔女の旅旅)
EC2+DockerでJavaアプリケーションをデプロイするまで
Step1 環境を理解する
EC2とは?
Dockerとは?
コンテナとは?
Tomcatとは?
PostgreSQLとは?
Step2 アプリを用意する
Javaアプリ開発について
ビルドについて
Warファイルについて
ちなみに
Step3 デプロイする
Warを用意する
Tomcatにアクセスする
Managerを使ってデプロイする
アプリにアクセスする
EC2+DockerでJavaアプリケーションをデプロイするまで
Step1 環境を理解する
EC2とは?
Dockerとは?
コンテナとは?
Tomcatとは?
PostgreSQLとは?
Step2 アプリを用意する
Javaアプリ開発について
ビルドについて
Warファイルについて
ちなみに
Step3 デプロイする
Warを用意する
Tomcatにアクセスする
Managerを使ってデプロイする
アプリにアクセスする
Step1
環境を理解する
今回のシステム構成
Aアプリ
Bアプリ
Cアプリ
Aアプリ
Bアプリ
Cアプリ
アプリかインフラの片方だけでシステムを開発することはできません
アプリとインフラがそろって初めてシステムとしての価値があります
EC2とは?
EC2とは「Amazon Elastic Compute Cloud」の略称
AWSで利用できるシステムのひとつ
AWS上に仮想サーバーを構築して自由に利用できる
これまでDCで物理的なサーバーを構築した後に仮想サーバを構築していたのが、Web上から数クリックで仮想サーバーを構築することができる
ユーザーの必要に応じてスペック(CPU/RAM/DISK)を変更できる
これまで・・・
DCへNW機器・サーバ機器の搬入・設置
専門エンジニアによる一からの構築・設定作業
システム管理者による定常運用・定期メンテナンス
機器の故障・保守切れによるシステム更改
EC2(AWS)を使うと
必要なのはブラウザだけ
子供からお年寄りまで誰もが数クリックで仮想サーバ構築
基盤の運用・保守は全部AWSがやってくれる
機器の故障・保守切れは気にせず使い続けられる
つまり...
EC2(AWS)は誰もが簡単に仮想サーバを構築・運用できるサービス
ちなみにサーバ(EC2)以外にも、色んなものがAWSを使えばブラウザ1つで構築できる
今回のシステム構成
Aアプリ
Bアプリ
Cアプリ
Aアプリ
Bアプリ
Cアプリ
Dockerとは?
Dockerとはコンテナ型の仮想環境を作成、配布、実行するためのプラットフォーム
仮想サーバでは、ホストマシン上でハイパーバイザを利用しゲストOSを動かしその上でミドルウェアなどを動かす
コンテナはホストマシンのカーネルを利用し、プロセスやユーザなどを隔離することで、あたかも別のマシンが動いているかのように動かすことができる
軽量で高速に起動、停止などが可能
コンテナとは?
つまり...
今までミドルウェア毎にOSを用意していたのが、コンテナを使えば1つのOSでたくさんのミドルウェアを制御することができる
ただし、たくさんコンテナを動かすにはそれだけ高いスペックが必要になる。
今回のシステム構成
Aアプリ
Bアプリ
Cアプリ
Aアプリ
Bアプリ
Cアプリ
Tomcatとは?
Java Servletを動かすときに必要なソフト(サーブレットコンテナ)のひとつ
「Java Servlet(サーブレット、Servlet)」とは「Webサーバ上で動くJavaプログラム」のこと
Java Servletは単独は動けず、動かすにはサーブレットコンテナが必要
今回はサーブレットコンテナにTomcatを使う
PostgreSQLとは?
「データベースマネジメントシステム(DBMS)」、もしくは「リレーショナルデータベースマネジメントシステム(RDBMS)」と呼ばれるもの。いわゆるデータベース。
Tomcat上で動くアプリケーションが使用するデータを保存しておく場所
他のRDBMSとしてOracle,MySQL,SQLServer等が挙げられる
EC2+DockerでJavaアプリケーションをデプロイするまで
Step1 環境を理解する
EC2とは?
Dockerとは?
コンテナとは?
Tomcatとは?
PostgreSQLとは?
Step2 アプリを用意する
Javaアプリ開発について
ビルドについて
Warファイルについて
データの作成について
Step3 デプロイする
Warを用意する
Tomcatにアクセスする
Managerを使ってデプロイする
アプリにアクセスする
Step2
アプリを用意する
用意しないといけないのは...
Aアプリ
Bアプリ
Cアプリ
Aアプリ
Bアプリ
Cアプリ
<--これと
<--これ
Step1の段階でアプリケーションが稼働するための基盤はできている。
あとは実際に動くアプリケーションとデータを作成する必要がある。
ではJavaアプリケーションはどうやって開発したらいい?
データはどうやって用意したらいい?
そこは研修で学んでください
ここでは割愛します
参考までに....私の場合
コーディング
VSCode + 各種拡張機能(SSHFS等)
動作確認
Docker + Gradle + Chrome
参考までに....私の場合
コミット & ビルド & UnitTest & デプロイ
Gitlab + Gitlab CI/CD (全自動化)
画面試験
Chrome + Selenium
EC2+DockerでJavaアプリケーションをデプロイするまで
Step1 環境を理解する
EC2とは?
Dockerとは?
コンテナとは?
Tomcatとは?
PostgreSQLとは?
Step2 アプリを用意する
Javaアプリ開発について
ビルドについて
Warファイルについて
データの作成について
Step3 デプロイする
Warファイルとは?
どうやってつくる?
Tomcatにアクセスする
Step3
デプロイする
サーブレットコンテナ(Tomcat)に作成したアプリ(warファイル)をデプロイします。
warファイルとは?
WARファイルは、JavaベースのWebアプリケーションやコンポーネントを圧縮した形式で、Webサーバ上で動作するものです
WARファイルに含まれるものは以下のとおり
データベース接続や各サービスを行うサーバーサイドのクラス
HTMLやイメージファイル、音声ファイル
クライアントクラス
これらはApacheのTomcatのようなWebアプリケーションを導入したWebサーバ上で動作させることができる
warファイルはどうやって作る?
開発環境によって異なるので、こちらも研修の中で学んでください。
Eclipse等の統合開発エディタを使ってる場合はエディタの機能でwarファイルが作成できます
Gradle buildで作成する場合はbuild.gradleの中に「apply plugin: ‘war’」ブロックを定義してください。
研修用環境のTomcatにアクセスする
http://dockeronec2-public-alb-816863126.us-east-2.elb.amazonaws.com/manager/html
画面中央下部「配備」-->「WARファイルの配備」にある「ファイルを選択」をクリック
ファイル選択ダイアログ画面から作成したwarファイルを選択する
「配備」をクリック(warファイルアップロードに多少時間がかかります)
正常にデプロイできれば画面上部の「アプリケーション」一覧画面に対象のアプリが表示されるので、「パス」列に表示されているパスをクリックしてアプリにアクセス
以上
不明点はこちらまで
@bsfclout
[email protected]
https://github.com/ultimania