MENU

AWS上でSpringBootアプリを継続起動させる。

こんにちは、くまごろーです。
前回のブログで、AWSに構築した環境にSpringBootアプリをデプロイするところまでいきました。
ただ、SpringBootアプリに内蔵されたTomcatを使用しているので、現状ではアプリを起動させることはできても、コンソールを閉じてしまえばアプリが停止してしまいます。
当然24時間稼働させた状態にしたいので、今回はその設定についてまとめます。
 
 
 
1 一言でいうと
 
Amazon Linux2で、作成したアプリを「サービス化」してしまえばいいらしい。
httpd」とか「nginx」と同じように。そうすれば

#systemctl start アプリ名

とかのコマンドで起動・停止を管理することができるようになります。
 
 

2 手順
 
(1)アプリを「Fully Executable Jar」という形式のJarファイルにする
「Fully Executable Jar」って?

Spring Bootでは、作成したJARファイルをjava -jarで起動することができますが、UNIX環境でより簡単に起動することができる仕組みです。

 
Spring Bootのサービス稼働環境 - EatSmartシステム部ブログ

通常のJarと違い、サービスとして起動することができる。(らしい)
 
ビルドしたJarファイルをこの形式にするには、pom.xmlタグ内を以下の様に変更する。

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <executable>true</executable>  //ここがポイント
            </configuration>
        </plugin>
    </plugins>
</build>

 
(2).confファイルを作成して、環境変数を設定
上記のJarファイルを格納しているディレクトリに、Jarファイルと同名のconfファイルを作成。環境変数はそこに設定します。
私はRDS(MySQL)への接続設定を環境変数でやっているので、その記述をこちらのconfファイルに移しました。
 
(3)サービスとして登録する
Amazon Linux2では、/usr/lib/systemd/system/にサービスファイルを作成すればサービスとして登録されるみたい。

[Unit]
Description=springboot //サービスの説明
After=syslog.target

[Service]
User=root
ExecStart=/home/application/test.jar //Jarファイルのパス
SuccessExitStatus=143

[Install]
WantedBy=multi-user.target


この時点で、一応systemctlコマンドが使えるようになります。
が、私はこの後かなり苦戦しました。結局jarファイル&サービスファイルの権限・所有者の設定を変更していないのが原因でした(-_-;)
 
 
 
4 参考