Springで作成したアプリをAWSのRDSとElastic Beanstalkを用いてデプロイする方法②

#はじめに
この記事は「Springで作成したアプリをAWSとRDSとElastic Beanstalkを用いてデプロイする方法①」
の続きです。
前回までは、RDSからDBを作成しました。
今回はMySQLの設定とElasticBeanstalkの設定について執筆していきます。


#MySQLの設定
MySQLの設定は下記のような作業を行います。

##事前にRDSのDBのエンドポイントをコピーしておく。
理由は後程、MySQLに接続する際に利用するためです。
![スクリーンショット 2021-09-03 16.20.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1912583/ea49cea1-1d5f-224c-5b7b-1cef5b5dae2e.png)


##MySQLWorkbenchのインストール
公式サイトのダウンロードページよりインストールする。（２０２１年９月３日現在の最新バージョンは8.0.26）

https://dev.mysql.com/downloads/workbench/

###MySQLの接続設定
インストール後、MySQLWorkbenchを開くと下記のような画面が表示される。
赤枠をクリックする。
![スクリーンショット 2021-09-03 16.48.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1912583/56fb2696-b756-e627-7a5e-88455b30c57e.png)

赤枠をクリック後、下記のような画面が表示される。
「NEW」をクリックする。
![スクリーンショット 2021-09-03 16.55.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1912583/1105e1d9-e14e-8d65-dd46-0c491931a0f1.png)

下記の通り入力する。
Connection name:任意の名前
Hostname:RDSのDBのエンドポイントを入力
Username:RDSの作成時のユーザの名前
![スクリーンショット 2021-09-03 16.25.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1912583/70d943bf-fb0b-2410-04c6-f7ed7ce61d5c.png)

password:RDS作成時のパスワードを入力する。
![スクリーンショット 2021-09-03 16.47.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1912583/9a928a2c-0826-3bc2-6192-19b59b69c2be.png)

必要事項入力後、「Test Connection」をクリックし、赤枠のような画面が表示されればRDSのDBとの接続が完了！
![スクリーンショット 2021-09-03 16.22.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1912583/783f5d5f-1693-f6a0-940f-70b532f5eafb.png)



###MySQLへのデータの追加
MySQLのデータベース（Schema）の新規登録、テーブル作成、データの反映は下記の記事を参考に作成する。

https://qiita.com/hiesiea/items/01dde88d8062c3d16910


#Springの設定
Springの設定は下記のような作業を行います。

##Javaファイルの作成
STS（もしくはEclipse）を開いてスタータプロジェクトの新規作成を行う。
![スクリーンショット 2021-09-03 17.18.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1912583/20abc572-c308-a6b8-d313-a85db31f1a35.png)

下記の通り入力し、完了ボタンをクリックする。
名前：任意の名前
タイプ：Maven
パッケージング：War
Javaバージョン：11(お使いのjavaのバージョンに合わせてください)
言語：Java

![スクリーンショット 2021-08-30 9.54.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1912583/eb5d70a4-911e-8330-fafb-bed20be81429.png)

赤枠の通りのものを選択する。
（JDBCやThymeleafを使う前提で進めてます。）
![スクリーンショット 2021-08-30 9.58.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1912583/6b315bc7-f41d-b42a-73de-2f09841d6b83.png)

数分後、ファイルが作成されます。
その後は下記のサイト等を参考にしてコントローラーやサービスを作成していきます。

https://qiita.com/t-shin0hara/items/687085ec34ae78ca2260

##Javaファイルの作成後
コントローラーやサービス作成後に、ローカルで動かすことができるようになった後に下記のような設定を行います。

##application.propertiesにDB接続情報の記載

application.propertiesには下記のように追記する。

```properties:application.properties
spring.datasource.url=jdbc:mysql://"RDSのDBのエンドポイント":3306/"DBのスキーマ名"
spring.datasource.username="DB作成時のユーザ名"
spring.datasource.password="DB作成時のパスワード"
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
```
筆者は下記の通りになりました。
![スクリーンショット 2021-09-04 10.57.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1912583/30de828b-f970-db05-6afe-07f885280fb1.png)


##pom.xmlの書き換え
下記内容を追記します。
packagingとtomcatについての内容です。
筆者の場合は元々記載があったため、確認のみしました。

```xml:pom.xml
//省略
<packaging>war</packaging>
//省略
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
//省略
```

##"ファイル名"Application.javaの書き換え
筆者でいうと、下記のようなInquirySystemApplication.javaを書き換えます。

![スクリーンショット 2021-09-04 11.12.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1912583/6676641e-5aa3-f42d-539e-7d994c7151af.png)

SpringBootServletInitializerを継承させ、
SpringApplicationBuilderを追記します。

```java:"ファイル名"Application.java
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;

@SpringBootApplication
public class "ファイル名"Application extends SpringBootServletInitializer {

	@Override
	protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
		return application.sources("ファイル名"Application.class);
	}
	
	public static void main(String[] args) {
		SpringApplication.run("ファイル名"Application.class, args);
	}

}
```

##maven installを実行してwarファイルの作成
Maven installを実行します。
![スクリーンショット 2021-09-03 20.06.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1912583/9b93a753-7486-94e7-ddbb-1c85f6487805.png)

数分後、コンソールに下記の表示が出た場合成功です。
![スクリーンショット 2021-09-03 20.06.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1912583/9cfede75-95f2-c524-837a-e5e2f5fc9647.png)

作成したwarファイルはtargetフォルダ配下に格納されます。
![スクリーンショット 2021-09-03 20.07.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1912583/5fd1b362-d9c7-0a8f-91eb-b6e0e8091ce5.png)

#ElasticBeanstalkの設定
AWSへログイン後、ElasticBeanstalkの画面へ遷移し。Create Applicationをクリックする。
![スクリーンショット 2021-09-04 11.24.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1912583/68f30df8-104f-78b3-a375-5129257af164.png)

アプリケーション名には任意の名前を入力する。
タグは特に必要ないため、記載なしでも良い。
![スクリーンショット 2021-09-04 11.29.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1912583/dc9d0e39-021f-ed6d-4601-3586331c39d6.png)

プラットフォームはtomcatを指定します。
![スクリーンショット 2021-09-04 11.29.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1912583/c72ea618-8a24-9171-f841-dd994b33fd0e.png)

ソースコード元はローカルファイルを選択します。
ファイルを選択をクリックして、taeget配下のwarファイルを選択します。
![スクリーンショット 2021-09-04 11.29.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1912583/f7f06639-5208-5f41-5a04-e8d619b23c8a.png)

ファイルのアップロードが完了後、環境の作成をクリックします。
![スクリーンショット 2021-09-04 11.30.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1912583/53506093-7a50-f113-0b0a-5fdea7b1c854.png)

数分後、下記のようなページ遷移します。
赤枠で囲われたURLをクリックすると、アプリケーションを使うことができるようになります。
![スクリーンショット 2021-09-04 11.35.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1912583/d4b39421-29ce-6054-f2c5-08ea7f92f8ea.png)

#終わりに
以上でSpringで作成したアプリをAWSとRDSとElasticBeanstalkを用いてデプロイする方法は完結です。

Springの設定について書かれた日本語記事があまりなかったため苦戦していましたが、英語の記事（公式ドキュメント等）を読むことや英語版のUdemyを受講してようやくデプロイができました。そのため、これからエラーが出ても英語だからと言って逃げずに読むようにしたいです。

#参考
https://www.udemy.com/course/aws-and-infra/

https://www.udemy.com/course/deploy-java-spring-apps-online/

https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#application-properties.transaction.spring.jta.atomikos.connectionfactory.borrow-connection-timeout