はじめに
Spring Bootで作成したWebアプリケーションを、AWSのEC2を利用してインターネット上に公開する手順をまとめることにします。
なお、今回はパート4ですので、パート1のこちらの記事から読むのが望ましいです。
パート2は
- systemdで自動起動させる
- Webアプリの停止方法を学ぶ
をやります。
もくじ
- AWSアカウントを作る
- EC2を作る
- EC2にSSH接続する
- EC2にJavaをインストールする
- Spring BootアプリをJAR化する
- JARをEC2に送る
- Spring Bootを起動する
- AWSの通信設定をする
- ブラウザからアクセスする
-
systemdで自動起動させる
-
Webアプリの停止方法を学ぶ
10. systemdでSpring Bootを自動起動する
前回の方法では、
java -jar MySpringBoot-0.0.1-SNAPSHOT.jar
を手動で実行しています。
しかし、この方法ではSSH接続を切断したり、EC2を再起動したりすると問題があります。
そこでLinuxの起動処などを設定できるsystemdを利用します。
これができると
- SSHを切断してもSpring Bootが動く
- EC2を再起動してもSpring Bootが自動起動する
- systemctl start/stop/status コマンドで管理できる
といったメリットがあります。
10-1. 手動起動しているSpring Bootを停止
java -jarを実行しているターミナルで、
Ctrl + C
を押して停止します。
10-2. JARの場所を確認
EC2 のターミナルで
pwd
ls
を実行し、現在位置を確認します。
例えば、pwdを実行して
/home/ubuntu
が表示され、lsを実行するとjarがある場合、
/home/ubuntu/MySpringBoot-0.0.1-SNAPSHOT.jar
にJARがあることになります。
10-3. systemdのサービスファイルを作成
次のコマンドを実行します。
sudo nano /etc/systemd/system/myspringboot.service
編集画面が開くので、そこに以下を記述します。
[Unit]
Description=My Spring Boot Application
After=network.target
[Service]
User=ubuntu
WorkingDirectory=/home/ubuntu
ExecStart=/usr/bin/java -jar /home/ubuntu/MySpringBoot-0.0.1-SNAPSHOT.jar
Restart=always
[Install]
WantedBy=multi-user.target
ExecStartについて
特に重要なのが、
ExecStart=/usr/bin/java -jar /home/ubuntu/MySpringBoot-0.0.1-SNAPSHOT.jar
です。ここでは、
/usr/bin/java
がJavaの実行ファイル、
/home/ubuntu/MySpringBoot-0.0.1-SNAPSHOT.jar
がSpring BootのJARファイルです。
JARのファイル名や保存場所が違う場合は変更してください。
10-4. 保存する
Ctrl + O
で保存します。その後、
Enter
を押します。保存したら、
Ctrl + X
で終了します。
「Save file under DIFFERENT NAME?」と表示された場合
保存時に、
Save file under DIFFERENT NAME?
Y Yes
N No
と表示された場合は、ファイル名を変更する必要がなければ、
N
を選択します。
10-5. systemdに設定を読み込ませる
次を実行します。
sudo systemctl daemon-reload
10-6. Spring Bootを起動する
次を実行するとSpringBootが起動します。
sudo systemctl start myspringboot
10-7. 起動状態を確認
sudo systemctl status myspringboot
以下のようになれば成功です。
Active: active (running)
10-8. lines 1-21/21 (END) から抜ける
systemctl statusを実行すると、
lines 1-21/21 (END)
という表示になることがあります。
これは表示結果をlessで表示している状態です。
q
キーを押すと通常のターミナルへ戻れます。
10-9. EC2起動時に自動起動する
sudo systemctl enable myspringboot
を実行することで、EC2を再起動した際にもSpring Bootが自動起動するようになります。
11. Webアプリの停止方法を学ぶ
一時的にWebアプリを停止する場合は、
sudo systemctl stop myspringboot
です。状態を確認するには、
sudo systemctl status myspringboot
を実行します。
Active: inactive (dead)
となっていれば停止しています。
再び起動する場合は、
sudo systemctl start myspringboot
です。
まとめ
今回構築した環境は、以下のようになります。
Internet
│
│ :8080
▼
┌───────────────┐
│ AWS EC2 │
│ │
│ Ubuntu │
│ │ │
│ Java │
│ │ │
│ Spring Boot │
│ │ │
│ :8080 │
└───────────────┘
Spring Bootのプロセスはsystemdによって管理しています。
EC2起動
↓
systemd
↓
myspringboot.service
↓
java -jar
↓
Spring Boot
今回の構成の注意点
今回の構成は、AWSとSpring Bootのデプロイを学習するための構成です。
本番環境として利用する場合は、以下のような構成へ発展させることが望ましいです。
- HTTPS化
- ドメイン取得
- Nginx
- データベースの分離
- RDS
などを導入すると、より実践的な構成になります。
また、8080番ポートを0.0.0.0/0で直接公開する設定は、今回のような学習・動作確認では利用できますが、本番環境では8080を直接インターネットへ公開しない構成が望ましいです。