Contents
Elastic BeanstalkでSpring Bootアプリをデプロイする方法:ステップバイステップガイド
Elastic Beanstalk(EB)は、AWS上でアプリケーションを簡単にデプロイ・管理できるサービスです。特にJava開発者は、Spring BootアプリケーションのEBデプロイに際して、手順が不明瞭なケースが多い傾向があります。本記事では、AWSコンソール中心のステップバイステップガイドとEB CLIによるオートメーションを解説し、読者が実環境で即座に活用できるようにします。
Elastic Beanstalkの環境構築手順
Elastic Beanstalkは、アプリケーションのデプロイを自動化するためのサービスです。まず、AWSコンソール経由でEB環境を作成します。
AWSコンソールでの環境作成フロー
- AWSコンソールにログインし、「Elastic Beanstalk」を選択。
- 「今すぐ始める」ボタンをクリックすると、アプリケーションの基本設定画面が表示されます。
- 「Java」を選択し、リージョン(例:ap-northeast-1)とIAMロールを設定します。
- 環境名を入力後、「環境を作成」をクリックして完了。
注意点: Spring Boot 2.x以降はEBで自動検出されるため、アプリケーションタイプ選択時に「Spring Boot」を選べば問題ありません。
環境設定の基本構成確認
作成した環境では、以下が自動的に設定されます:
| 項目 | 値 | 補足 |
|---|---|---|
| OS | Amazon Linux 2 | EBがサポートしている最新版 |
| ロードバランサー | Application Load Balancer | HTTPS通信を標準で有効化 |
| EC2インスタンス数 | 1(初期値) | 自動スケーリング設定可能 |
この構成は、基本的なセキュリティとスケーラビリティを確保しています。
Spring Bootアプリの準備とパッケージング
EBデプロイでは、Spring BootアプリをJAR形式でパッケージングする必要があります。
Maven/Gradleでの配布用構成
- Mavenの場合、
pom.xmlに以下を追加します:
|
1 2 3 4 5 6 7 8 9 |
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> |
- Gradleの場合、
build.gradleに以下を記述:
|
1 2 3 4 |
bootJar { mainClassName = 'com.example.Application' } |
JARファイルの出力確認
ビルドコマンドを実行し、生成されたJARファイルをテストします。
mvn clean package(Maven)または./gradlew bootJar(Gradle)でビルド- ローカル環境で
java -jar your-app.jarを実行し、正しく起動するか確認
.ebextensions設定ファイルの作成
EBでは、.ebextensionsディレクトリに配置されたYAML/JSONファイルで環境設定が可能です。
環境変数設定例
以下は .ebextensions/environment.config の例:
|
1 2 3 4 5 6 |
option_settings: aws:elasticbeanstalk:environment:process:default: PORT: "8080" aws:elasticbeanstalk:application:environment: SPRING_PROFILES_ACTIVE: "prod" |
PORT: アプリケーションがリッスンするポートを指定SPRING_PROFILES_ACTIVE: 環境ごとのプロファイルを切り替え
Javaバージョン指定方法
EBはデフォルトでJava 17を使用しますが、必要に応じて変更可能です。.ebextensions/java.configを作成:
|
1 2 3 4 |
option_settings: aws:elasticbeanstalk:environment:defaultprocess: JAVAAPI: "OpenJDK 17" |
補足: Javaバージョンは、EB コンソールで「環境設定」→「ソフトウェア」からも変更可能です。ただし、最新のEB仕様ではコンソールでの変更が制限されている可能性があるため、事前に公式ドキュメントを確認してください。
ロードバランサーとの連携確認
Elastic Beanstalkはロードバランサー(ELB)を自動的に組み込みますが、正しい設定かを確認します。
ELBの設定状況確認
- EBコンソール → 環境名を選択 → 「リソース」タブを開く
-
Application Load Balancerが表示され、以下の情報が含まれていることを確認:
-
リスニングポート:
80(HTTP)または443(HTTPS) - ターゲットグループの健康チェックパス:
/actuator/health(Spring Boot Actuator標準)
注意: Spring Boot Actuatorの
/actuator/healthエンドポイントを使用する際、アプリケーションにActuator依存関係が含まれているか確認してください。以下をpom.xmlまたはbuild.gradleに追加:
|
1 2 3 4 5 |
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> |
ヘルスチェック構成
- EBコンソール → 「環境設定」→「リスニングルール」
- 以下を設定:
- プロトコル:
HTTP - ポート:
80 - パス:
/actuator/health - 閾値: 2回連続成功で正常と判定
.ebextensions設定ファイルのデバッグ手順
YAML形式の設定ファイルに誤りがある場合、以下のようなエラーが発生します。
エラーメッセージ例
|
1 2 |
Error occurred during configuration update: Invalid YAML file format. |
デバッグ手順
-
.ebextensionsファイルをAWS CloudWatch Logsで確認:
bash
eb logs tail -f -
YAMLErrorの内容に注意し、インデントやキー名の誤りを修正。
eb deploy実行前にローカルでYAML構文チェック(例: yamllint)
自動スケーリングポリシーの設定
EBはEC2インスタンス数を自動で調整する機能を持っています。
CPU使用率ベースのスケールアウト
- EBコンソール → 環境名を選択 → 「監視」タブ → 「スケーリング」クリック
-
新しいポリシーを作成し、以下を設定:
-
起動条件:
CPU使用率 > 70%(例) - 停止条件:
CPU使用率 < 40% - スケールアウトのインスタンス数: +1
- スケールインのインスタンス数: -1
注意: 最大インスタンス数を設定しないと、無限に増加する可能性があります。
EB CLIによるデプロイオートメーション
EB CLIは、ローカルからコマンドでデプロイできるツールです。
ローカル環境でのCLIセットアップ
- AWS CLIをインストールし、認証情報を設定(
aws configureコマンド) -
EB CLIをインストール:
bash
pip install awsebcli注意:
pip使用時はPython環境のバージョンに注意してください。Python 3.xが推奨されます。 -
プロジェクトディレクトリに移動後、EB初期化:
bash
eb init -p java17 your-app-name
eb deployコマンド実行フロー
eb createで環境を作成(既存環境ならeb use ENV_NAME)eb deployを実行すると、自動的にローカルの変更がAWSに反映されます- デプロイステータスは
eb statusで確認可能
補足:
.ebextensionsファイルが存在する場合、デプロイ時に自動で適用されます。
まとめ
- EB環境の作成にはコンソール経由で簡単に行えます
- Spring BootアプリはJAR形式でパッケージングし、
.ebextensionsで柔軟な設定が可能です - ELBと連携することで、高可用性を実現
- 自動スケーリングの設定により、リソース最適化が可能
- EB CLIを使うことで、ローカルでのデプロイオートメーションが構築できます
自社開発アプリのEBデプロイを試してみる
https://console.aws.amazon.com/elasticbeanstalk/home