おはようございます。
最近、SpringBootでwebアプリを作っていて、いい感じになりました。
というわけで、どこか無料のサーバーを借りて公開したいという気持ちになりまして。
いろいろ調べてみたところ、WebサーバもDBも、まとめてAWSにデプロイできたので、この場を借りて紹介したいと思います。
まずは、今回作ったwebアプリを軽く説明します。
その名は「キメラ召喚バトル」
入力した文字列から、脳内メーカーの要領でキメラを生み出し、戦わせるという内容。
ユーザー情報や、生まれたキメラの情報はDBに保存しています。
バージョン等は下記の通りです。
- SpringBoot 3.3.2
- Java 17
- MySQL 8
次にAWSについて、荒く短く説明します。
AWS(Amazon Web Service)とは?
(多すぎて説明できないので、以下に今回使うものだけ解説します)
- EC2(Elastic Compute Cloud):サーバを借りられるサービス。今回はWebサーバとして利用。
- RDS(Relational Database Service):DBを借りられるサービス。今回はMySQLにします。
- Elastic Beanstalk:簡単にデプロイできるサービス。EC2とRDSの連携を自動的にやってくれる。
(→私は間違えたので料金請求されました。詳しくは後ほど)
目標設定
「無料で簡単にとりあえずデプロイすること」
前提条件
事前準備
Spring側の application.propertiesの設定を変更します。
DBを使っている場合、おそらく下記のようになっていると思います。
(Dockerなどでローカルに建てたDBにアクセスしている想定)
それを下記のように追記します。
意味としては、後に設定するRDSの環境変数を確認し、あればそっちの値を参照するというようなものです。
(ローカル動作の場合には、環境変数が存在しないのでコロン以下のこれまでの定数値を参照できます)
この変更を加えたら、Spring側はjarファイルをビルドしておきます。
AWSの準備
(画像右下)
- 信頼されたエンティティタイプ:AWSのサービス
- サービスまたはユースケース:EC2
- ユースケース:EC2
- AWSElasticBeanstalkMulticontainerDocker
- AWSElasticBeanstalkWebTier
- AWSElasticBeanstalkWorkerTier
ElasticBeanstalk環境作成
Step1
- アプリケーション情報
- 任意のアプリケーション名を入力
- プラットフォーム
- プラットフォーム:Java
- ブランチ:Corretto 17 (javaのバージョンに合わせる)
- アプリケーションコード
- コードをアップロードを選択
- ラベル名:任意のバージョン名を入力
- ローカルファイルを選択し、Springのjarファイルをアップロード。
Step2
- サービスアクセス
- サービスロール:新しいサービスロールを作成して利用
- 名前は「aws-elasticbeanstalk-service-role」のままでOK
- EC2インスタンスプロファイル
- 作成した「aws-elasticbeanstalk-ec2-role」を選択
Step3
- データべース
- データベースを有効化:true
- インスタンスクラス (要注意ポイント!!)
- 「db.t3.micro」に変更。
- ユーザー名
- 任意で入力
- パスワード
- 任意で入力
インスタンスクラスのデフォルトが「db.t3.small」になっていますが、これには無料枠がありません。無料で済ませたい場合は「db.t3.micro」に必ず変更してください。
ユーザー名・パスワードは、環境変数を通じてSpring側に共有されるので、好きに決めて問題ありません。
Step4
- 容量
- インスタンスタイプ:t3.microを残して、t3.smallを削除
Step5
- プラットフォームソフトウェア
- 環境プロパティ
- PORT:8080を追加
spring側のポートは8080がデフォルト、nginxは5000がデフォルトのため、
spring側がデフォルトの場合は、「環境プロパティを追加」を押して、
「名前:PORT、値:8080」を設定します。
Step6
Step6は確認なので、問題なければ「送信」をクリック。
環境の構築と立ち上げに少し時間がかかります。
終わり次第、ドメインと表記されたURLからデプロイされたWebアプリにアクセスできます。
DBのテーブル作成などは、Spring側で「spring.jpa.hibernate.ddl-auto」を設定しておけば、自動作成してくれます。事前にローカルで検証してください。
DBを手動で操作する場合は、EC2のインスタンスに接続し、そこを足掛かりにしてRDSのエンドポイントに接続する形になります。(詳細は省きます)
無料枠の落とし穴
Elastic BeanstalkではデフォルトでONになってしまってしまうようなので、RDSのインスタンスを直接編集して手動でOFFにしてください。
アプリをデプロイするまでに、ここには書かれていない様々なトライ&エラーがあったわけですが、改めてそれを1つ1つ検証して、必要なものとそうでないものに分けていくという過程を経ることで、AWSへの理解が倍くらいに深まったと思います。
- Lv0 なにもできない
- Lv1 よくわからんけどできた
- Lv2 どうすればできるか分かった(今ココ!)
0 件のコメント:
コメントを投稿