プログラミング

Spring Boot単体をEC2にデプロイする方法

この記事は約5分で読めます。

DBを省いたSpringBoot単体だけをEC2にデプロイする方法はあまり検索しても出なかったのでまとめます。

問題を切り分けしやすくして、学習をスムーズに行う狙いです。

学習記録も兼ねた記事一覧をこちらの記事にまとめています。

事前準備

Hello Worldを表示するSpring Bootプロジェクトは作成済みとします。

Spring BootをEC2にデプロイする全体像

jarファイルをEC2で実行させるだけです。

EC2インスタンスの作成

まず、EC2を作成します。

項目名意味
名前とタグ > 名前helloworld-springboot-server(任意)パソコンの名前
アプリケーションおよび OS イメージ (Amazon マシンイメージ) > Amazon マシンイメージ (AMI)Amazon Linux 2023 AMI(デフォルト)パソコンの種類
インスタンスタイプ > インスタンスタイプt2.microパソコンのスペック
キーペア (ログイン) > キーペア名helloworldインスタンスに接続するときの認証情報
Reactデプロイ時と同じもの
ネットワーク設定 > 右上編集ボタン > ファイアウォール(セキュリティグループ) > セキュリティグループを作成するhelloworld-springboot-sg(任意)
ネットワーク設定 > 右上編集ボタン > インバウンドセキュリティグループのルール > セキュリティグループルール 1タイプ:ssh
ソース:3.112.23.0/29
インスタンスを操作するための接続(ssh)をEC2 Instance Connectのみに制限(AWSコンソール上からのみ接続可)
ネットワーク設定 > 右上編集ボタン > インバウンドセキュリティグループのルール > セキュリティグループルール 2タイプ:カスタムTCP
ポート範囲:8080
ソースタイプ:0.0.0.0/0
Spring Bootの接続ポートである8080番ポートへのアクセスを解放
他の項目はデフォルトのままです。
Screenshot
Screenshot

インスタンスを起動します。

これで、EC2 Instance Connectからのssh接続と外部ユーザーからの8080番ポートへの接続ができるEC2インスタンスが作成されたはずです。

EC2インスタンスへのSSH接続

EC2 Instance Connectから接続します。

Spring Bootアプリの導入・実行

ローカル環境でjarファイルを生成

ローカル環境でjarファイルを生成します。

jarファイルは、デプロイに必要なファイルを1つにまとめて圧縮したものです。

作業ディレクトリで以下のコマンドを実行します。

Zsh
mvn package

mvn packageでmvnが見つからないと出たのでmavenをインストールします。

Zsh
brew install maven

以下のコマンドで確認します。

Zsh
mvn --version

ビルドに成功するとtargetディレクトリにjarファイル helloworld-0.0.2-SNAPSHOT.jar が作成されます。

インスタンスにjarファイルを転送・実行

scpコマンドでEC2に転送します。(一時的にインバウンドルールにマイIPを追加します。)

Zsh
# scp -i 秘密鍵のパス 送信するファイルのパス ユーザ名@EC2インスタンスのパブリックIPアドレス:ファイルを配置するパス
scp -i  xxx/helloworld.pem xxx/helloworld/target/helloworld-0.0.1-SNAPSHOT.jar ec2-user@xxx.xxx.xxx.xxx:/home/ec2-user

インスタンスに転送されました。

【scpが送れないとき】
私はインスタンスを作成した時とは異なる環境(異なるwifi)でscpコマンドを実行したため送れませんでした。
セキュリティグループの「マイIP」はその時の自分のIPアドレスなので、異なる環境から実行する場合は再度セキュリティグループを更新する必要があるようです。

それでは、以下のコマンドでjarファイルを実行します。

Zsh
java -jar ~/helloworld-0.0.1-SNAPSHOT.jar

javaが入っていなかったのでインストールします。

Zsh
sudo yum update -y
sudo yum search java # javaを探す

searchでインストール可能なjavaを探します。

Zsh
sudo yum install -y java-22-amazon-corretto-devel.x86_64

インストールしただけだとjavaコマンドは切り替わらないのでalternativesコマンドで切り替えます。
コマンドを実行すると代替候補が表示されるので、Java-22を選びます。

Zsh
sudo alternatives --config java

バージョンを確認します。

Zsh
java -version

実行できたらインスタンスのパブリック IP アドレス:8080にアクセスします。

Hello Worldが表示されました!

これで以下の状況になりました。 

まとめ

以上がSpring Bootのみ(DBなし)をEC2にデプロイする方法でした。

Reactと違ってインスタンスではjarファイルを実行するだけという違いがありますね。

次はローカル環境でReactとSpring Bootを繋げてみたいと思います。

参考文献

[SpringBoot] エクスポートしたjarファイルをEC2上で実行する | DevelopersIO
はじめに SpringBootでバッチ処理をするプロジェクトを作り、EC2上で動作させたいと思ったのですが、所々はまったので自分用にメモします。 環境 Spring Tool Suite 3.8.0 概要 今回やってみる …

コメント