EC2+RDS+SpringBootアプリケーションでwebページを公開する。


概要

EC2、RDS、MYSQL、SpringBootを使ったwebページ公開の方法がネットに転がってなかったので、自分がやってできた方法をメモ代わりに書いておきます。

本記事のゴール

SpringBootで作ったデータベースを使うアプリケーションをwebに公開できるようにします。

本記事は以下の環境や知識がある前提で進めます

  • AWSアカウント
  • eclipse2019 4.14
  • maven
  • JDK1.8
  • Java8
  • spring boot 2.1.1
  • すでにデータベースを使うアプリケーションを作成済み
  • EC2インスタンスを作成済み
  • RDSインスタンスを作成済み
  • RDSインスタンスにデータベース作成済み
  • teratermでEC2にSSH接続済み

1.eclipseにAWS Toolkit for Eclipseをインストール

eclipseからRDSに接続するためにAWS Toolkit for Eclipseをインストールします。
(これをしないとアプリケーションをjarファイルにするときにエラーが起きます。)

①ヘルプ(H)」>「Eclipse マーケットプレイス(M)...」を選択。

②「AWS Toolkit for Eclipse 2.0」の「インストール」をクリック。

③インストールするツールを選択する画面が表示されるので、すべてにチェックが付いていることを確認し、「確認(C)>」をクリック。

④「使用条件の条項に同意します(A)」にチェックを付け、「完了(F)」。

⑤インストールが完了すると、再起動を促されるので、「はい(Y)」を選択。

⑥「AWS Toolkit for Eclipse」のアイコンが追加されます。

2.eclipseとEC2を接続する

①AWS toolkit for Eclipseのアイコンの横の▼をクリックし、「Open AWS Management Perspective」を選択。

「AWS Management」という「パースペクティブ」に切り替わります。

②「AWS Exploer」の「AWS Account not Configured」を選択した状態で右クリックし、「Configure AWS Accounts」を選択。

「アクセス・キーID(A):」「秘密アクセス・キー(S):」を入力します。

「アクセス・キーID(A):」「秘密アクセス・キー(S):」は、AWS側のコンソールの「すべてのサービス」>「IAM」を選択し、「ユーザー」でユーザーを選んだあとに、「認証情報」タブに切り替えて、

「アクセスキー」の項目の「アクセスキー ID」で「アクセス・キーID(A):」は確認できます。

アクセスキーがなければ「アクセスキーの作成」を押して作成しましょう。

「アクセス・キーID(A):」「秘密アクセス・キー(S):」を入力したらOKをおして接続完了となります。

3.Springアプリケーションの設定

①Pom.xmlを更新する
packingをjarにする(groupIdなどは各自で違います)

    <groupId>com.example</groupId>
    <artifactId>SpringSample</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

spring-boot-maven-pluginの下にtrueを加える

<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <executable>true</executable>
                </configuration>
            </plugin>
        </plugins>
    </build>

②application.propertiesの更新

spring.datasource.url=jdbc:mysql://RDSのエンドポイント:3306/RDSにあるデータベース名?serverTimezone=JST
spring.datasource.username=RDSのユーザー名
spring.datasource.password=RDSのパスワード
spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
spring.jpa.database=MYSQL
spring.datasource.initialize=true
spring.datasource.sql-script-encoding=utf-8
server.port=50000

RDSのエンドポイントなどは各自調べでお願いします。
server.port=50000はポート番号のルールに沿っていれば何番でも大丈夫です。
このポート番号がURLの一部になります。

4.アプリケーションをjarファイル化する

プロジェクトを右クリック > 実行 > install

プロジェクト内に「target」というフォルダが現れ、そこにビルドしたjarファイルがあるはずです.

5.jarファイルをEC2にデプロイする

jarファイルのデプロイはteratermのGUIで簡単にできます。

ファイル→SSH SCP...→Fromにデプロイしたいファイルを指定→Send

詳しくはこちら↓
https://qiita.com/go-to/items/409e32116213bdf4b1ce

6.jarファイル化したアプリケーションの起動

デプロイされたjarファイルは/home/ユーザー名のところに配置されているので
以下のコマンドで実行してみましょう。

java -jar /home/ユーザー名/jarファイル名

するとEC2ないでSpringアプリケーションが実行されるので試しにブラウザ上で表示してみましょう。

http://EC2で用意されているIPv4パブリックIP:設定したポート番号/表示したいHTMLファイル名

で表示できます。
例:http://32.890.424.24:50000/login

7.アプリケーションのサービス化

問題なくブラウザ上で表示ができたら今度はアプリケーションをEC2サーバーの中でサービス化しましょう。

今の状態だとSSHの接続を切るとアプリケーションの起動も止まってしまうので、
バックグラウンド上で常に起動状態にするために行うのがサービス化です。
(LinuxOSの場合デーモン化とも呼びます。)

①サービス登録
サービス登録するためにEC2サーバー上で「アプリケーション名.service」ファイルを作ります。

vi /etc/systemd/system/アプリケーション名.service


[Unit]
Description = ファイルの説明文
After=syslog.target

[Service]
ExecStart = jarファイルのパス(例:/home/ec2-user/SpringSample-0.0.1-SNAPSHOT.jar)
Restart = always
Type = simple
User = jarファイルのユーザー
Group = jarファイルのグループ
SuccessExitStatus = 143

[Install]
WantedBy = multi-user.target

jarファイルのユーザーとグループは以下のコマンドで調べられます。

ls -l jarファイルのパス

②反映
ファイルを作成したらリロードして反映させます。

# systemctl daemon-reload

③自動起動有効
サーバーが立ち上がったら自動的に起動するようにします。

# systemctl enable アプリケーション名.service

④サービスの権限変更

chmod 744 jarファイルのパス

⑤サービスを起動

systemctl start アプリケーション名.service 

⑥サービスの状態の確認

systemctl status アプリケーション名.service -l

以下のように表示れたらサービス化成功です。

● アプリケーション名.service - アプリケーション名
   Loaded: loaded (/etc/systemd/system/アプリケーション名.service; enabled; vendor preset: disabled)
   Active: active (running) since Wed 2020-07-08 11:07:05 UTC; 19h ago
 Main PID: 22142 (SpringSample-0.)
   CGroup: /system.slice/アプリケーション名.service
           tq22142 /bin/bash /home/ユーザー名/アプリケーション名
           mq22156 /usr/bin/java -Dsun.misc.URLClassPath.disableJarChecking=true -jar /home/ユーザー名/アプリケーション名

SSH接続を切ってもブラウザ上で表示できるようになっていると思います。