SpringBootアプリケーションをAWSBeanstalkにデプロイする
1. 概要
このチュートリアルでは、 Bootstrap a Simple Application usingSpring BootチュートリアルからAWSElasticBeanstalkにアプリケーションをデプロイする方法を示します。
この一環として、次のことを行います。
- AWSCLIツールをインストールして構成します
- BeanstalkプロジェクトとMySQLデプロイメントを作成する
- AWSRDSでMySQLのアプリケーションを設定します
- アプリケーションのデプロイ、テスト、スケーリング
2. AWSElasticBeanstalkの構成
前提条件として、AWSに登録し、 ElasticBeanstalkでJava8環境を作成する必要があります。 また、AWS CLI をインストールする必要があります。これにより、環境に接続できるようになります。
したがって、それを前提として、ログインしてアプリケーションを初期化する必要があります。
cd .../spring-boot-bootstrap
eb init
>
Select a default region
1) us-east-1 : US East (N. Virginia)
2) us-west-1 : US West (N. California)
3) us-west-2 : US West (Oregon)
4) eu-west-1 : EU (Ireland)
5) eu-central-1 : EU (Frankfurt)
6) ap-south-1 : Asia Pacific (Mumbai)
7) ap-southeast-1 : Asia Pacific (Singapore)
8) ap-southeast-2 : Asia Pacific (Sydney)
9) ap-northeast-1 : Asia Pacific (Tokyo)
10) ap-northeast-2 : Asia Pacific (Seoul)
11) sa-east-1 : South America (Sao Paulo)
12) cn-north-1 : China (Beijing)
13) cn-northwest-1 : China (Ningxia)
14) us-east-2 : US East (Ohio)
15) ca-central-1 : Canada (Central)
16) eu-west-2 : EU (London)
17) eu-west-3 : EU (Paris)
18) eu-north-1 : EU (Stockholm)
(default is 3):
上記のように、リージョンを選択するように求められます。
最後に、アプリケーションを選択できます。
>
Select an application to use
1) baeldung-demo
2) [ Create new Application ]
(default is 2):
このとき、CLIは .elasticbeanstalk / config.yml。という名前のファイルを作成します。このファイルは、プロジェクトのデフォルトを保持します。
3. データベース
これで、AWS WebコンソールまたはCLIを使用して、以下を使用してデータベースを作成できます。
eb create --single --database
指示に従って、ユーザー名とパスワードを入力する必要があります。
データベースを作成したら、アプリケーションのRDSクレデンシャルを構成しましょう。 これを行うには、 beanstalk という名前のSpringプロファイルで、アプリケーションに src / main / resources /application-beanstalk.propertiesを作成します。
spring.datasource.url=jdbc:mysql://${rds.hostname}:${rds.port}/${rds.db.name}
spring.datasource.username=${rds.username}
spring.datasource.password=${rds.password}
Springは、rds.hostnameという名前のプロパティをRDS_HOSTNAMEという環境変数として検索します。 同じロジックが残りの部分にも適用されます。
4. 応用
次に、Beanstalk –固有のMavenプロファイルをpom.xmlに追加します。
<profile>
<id>beanstalk</id>
<build>
<finalName>${project.name}-eb</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<excludes>
<exclude>**/cloud/config/*.java</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</profile>
次に、アーティファクトをElasticBeanstalk構成ファイル.elasticbeanstalk /config.ymlに指定します。
deploy:
artifact: target/spring-boot-bootstrap-eb.jar
そして最後に、2つの環境変数をElasticBeanstalkに含めます。 最初のプロファイルはアクティブなSpringプロファイルを指定し、2番目のプロファイルはBeanstalkが期待するデフォルトのポート5000の使用を保証します。
eb setenv SPRING_PROFILES_ACTIVE=beanstalk,mysql
eb setenv SERVER_PORT=5000
5. 展開とテスト
これで、ビルドとデプロイの準備が整いました。
mvn clean package spring-boot:repackage
eb deploy
次に、ステータスを確認し、デプロイされたアプリケーションのDNS名を決定します。
eb status
そして、出力は次のようになります。
Environment details for: BaeldungDemo-env
Application name: baeldung-demo
Region: us-east-2
Deployed Version: app-181216_154233
Environment ID: e-42mypzuc2x
Platform: arn:aws:elasticbeanstalk:us-east-2::platform/Java 8 running on 64bit Amazon Linux/2.7.7
Tier: WebServer-Standard-1.0
CNAME: BaeldungDemo-env.uv3tr7qfy9.us-east-2.elasticbeanstalk.com
Updated: 2018-12-16 13:43:22.294000+00:00
Status: Ready
Health: Green
これで、アプリケーションをテストできます。URLを完成させるためにDNSとしてCNAMEフィールドが使用されていることに注意してください。
今すぐライブラリに本を追加しましょう。
http POST http://baeldungdemo-env.uv3tr7qfy9.us-east-2.elasticbeanstalk.com/api/books title="The Player of Games" author="Iain M. Banks"
そして、すべてがうまくいけば、次のようなものを取得する必要があります。
HTTP/1.1 201
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Connection: keep-alive
Content-Type: application/json;charset=UTF-8
Date: Wed, 19 Dec 2018 15:36:31 GMT
Expires: 0
Pragma: no-cache
Server: nginx/1.12.1
Transfer-Encoding: chunked
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
X-XSS-Protection: 1; mode=block
{
"author": "Iain M. Banks",
"id": 5,
"title": "The Player of Games"
}
6. アプリケーションのスケーリング
最後に、展開をスケーリングして2つのインスタンスを実行します。
eb scale 2
Beanstalkは、アプリケーションの2つのインスタンスを実行し、両方のインスタンス間でトラフィックを負荷分散します。
本番用の自動スケーリングはもう少し関与なので、別の日に残しておきます。
7. 結論
このチュートリアルでは、次のことを行います。
- AWS Beanstalk CLIをインストールして構成し、オンライン環境を構成しました
- MySQLサービスをデプロイし、データベース接続プロパティを構成しました
- 構成済みのSpringBootアプリケーションを構築してデプロイし、
- アプリケーションのテストとスケーリング
詳細については、BeanstalkJavaドキュメントをご覧ください。
いつものように、私たちの例の完全なソースコードはここにあります。GitHubにあります。