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番ポートへのアクセスを解放 |
インスタンスを起動します。
これで、EC2 Instance Connectからのssh接続と外部ユーザーからの8080番ポートへの接続ができるEC2インスタンスが作成されたはずです。
EC2インスタンスへのSSH接続
EC2 Instance Connectから接続します。
Spring Bootアプリの導入・実行
ローカル環境でjarファイルを生成
ローカル環境でjarファイルを生成します。
jarファイルは、デプロイに必要なファイルを1つにまとめて圧縮したものです。
作業ディレクトリで以下のコマンドを実行します。
mvn package
mvn package
でmvnが見つからないと出たのでmavenをインストールします。
brew install maven
以下のコマンドで確認します。
mvn --version
ビルドに成功するとtargetディレクトリにjarファイル helloworld-0.0.2-SNAPSHOT.jar
が作成されます。
インスタンスにjarファイルを転送・実行
scpコマンドでEC2に転送します。(一時的にインバウンドルールにマイIPを追加します。)
# 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ファイルを実行します。
java -jar ~/helloworld-0.0.1-SNAPSHOT.jar
javaが入っていなかったのでインストールします。
sudo yum update -y
sudo yum search java # javaを探す
searchでインストール可能なjavaを探します。
sudo yum install -y java-22-amazon-corretto-devel.x86_64
インストールしただけだとjavaコマンドは切り替わらないのでalternatives
コマンドで切り替えます。
コマンドを実行すると代替候補が表示されるので、Java-22を選びます。
sudo alternatives --config java
バージョンを確認します。
java -version
実行できたらインスタンスのパブリック IP アドレス:8080
にアクセスします。
Hello Worldが表示されました!
これで以下の状況になりました。
まとめ
以上がSpring Bootのみ(DBなし)をEC2にデプロイする方法でした。
Reactと違ってインスタンスではjarファイルを実行するだけという違いがありますね。
次はローカル環境でReactとSpring Bootを繋げてみたいと思います。
コメント