AWS_WEB3層環境構築②

前回の記事
https://qiita.com/shinichi_yoshioka/items/7226b9ebaad06c569c80
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1032344/1109f6f6-094b-72ce-8383-db11df70543d.png)
前回の続きをやっていく。
APサーバとDBサーバはプライベートサブネットに構築する。
プライベートサブネット配置のEC2インスタンス作成にあたって、
"パブリックIP自動割り当てを無効"にしたが
TomcatやMySQLをインストールするのに一時的にインターネットに繋ぎたい。
そもそもプライベートサブネット配置のEC2インスタンスにssh接続できなくて詰んでいる。
対処法を調べたところ、3通りぐらい把握した。
①ElasticIP(EIP)を割り当て+サブネットのルートテーブルにInternet-GWへのルーティング追加
　→これは実質パブリックサブネットと変わらない。
②前回構築したWEBサーバを踏み台としてアクセスする。
　→SSH接続はできるが、TomcatやMySQLをインストールするのにWEBサーバから移動するのが面倒。
③NATゲートウェイをパブリックサブネットに配置する。
　→これが一番良いやり方。

ちなみにNATゲートウェイの料金は、東京リージョンで1hあたり0.062USDらしい。
https://aws.amazon.com/jp/vpc/pricing/
施行錯誤の環境構築で時間がかかると思ったので、今回は①を選んだ。
（2台目のDBサーバを構築する際は、NATゲートウェイを使おうと思う)
EIPはAWSアドレスプールから払い出される固定のパブリックIPのこと。
セキュリティグループも一時的に開けないとダメだ。
構築が落ち着いたら、封鎖するので許してほしい。

◆EIPの作成とアタッチ
サービス[VPC]のElasticIPから[Elastic IPアドレスの割り当て]から、
AmazonのIPv4アドレスプールから割り当てを行う。
![EIP1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1032344/288ddda4-95ae-e636-28ad-fb5356d15684.png)
割り当てられたアドレスをクリックすると、EC2インスタンスに関連付けできる。
![EIP2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1032344/876362f7-5d6e-9980-3c41-bf2ef3d96cd2.png)
ちなみにEIPはEC2インスタンスにアタッチ中は課金されないが、
EIPの払い出しだけしていてEC2にアタッチされていないと課金されるらしい。
![EIP3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1032344/c8647191-67c7-77ae-bc25-ffe93e13057d.png)
ここでは、APサーバとDBサーバそれぞれにEIPを割り当てる。
こんな感じ。
![EIP4.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1032344/a21592f0-08be-7cdf-7c63-a931f72302cd.png)
とりあえず、各EC2インスタンスにSSH接続できることは確認した。
AP/DBサーバの構築後処理は以下。
①ルートテーブルからインターネットゲートウェイを削除し、最低限に絞る
②セキュリティグループを必要なプロトコルのみに絞る

◆Nginxのインストール
対象：WEBサーバ

```
sudo su -
yum update -y
yum install nginx -y
```
ここでエラーが。
![nginx1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1032344/780bacbf-ce8c-af30-ac5d-878f9ab817f1.png)
どうやら、AmazonLinuxはインストール方法が違うらしい。
以下コマンドでインストールが開始されたことを確認した。

```
amazon-linux-extras install nginx1 -y
```
新しくサービスをインストールしたときの3点セット

```
systemctl enable nginx.service　・・・サービスの自動起動の有効化(再起動後もサービスを起動する)
systemctl start nginx.service　・・・サービスの起動
systemctl status nginx.service　・・・サービスのステータス確認
```
![nginx2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1032344/f0e4cd13-fc07-08b9-008a-f0706893e168.png)
ステータスがactive(running)になっていることを確認した。
![nginx3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1032344/97be7b0d-e623-55d0-723c-b3f6bd6970ab.png)
ブラウザに以下のように入力し、Nginxのテストページが表示されることを確認した。

```
http://WEBサーバのパブリックIPアドレス
```

◆Tomcatのインストール
対象：APサーバ
同様にtomcatのインストールと起動をする。

```
sudo su -
yum update -y
yum install tomcat -y
systemctl enable tomcat.service
systemctl start tomcat.service
systemctl status tomcat.service
```
![tomcat1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1032344/9f0a76e4-07e4-1604-e8b0-ad01d5701145.png)
tomcatのサービスは正常に動いているが、Web App Containerとしての正常性確認のやり方が不明。
JDBCドライバーをインストール後に再度、正常性を確認することにした。
過去に自宅VirtualBoxにTomcatを入れて正常性確認をしたが、これはApache Tomcat(WEBサーバ)であって
上記のWeb App Containerとは違う認識。
![tomcat2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1032344/670335c1-b56f-a0e7-ed7d-277a37bdee9e.png)


◆MySQLのインストール
対象：DBサーバ
同様にMySQLをインストールする。

```
sudo su -
yum update -y
yum install mysql -y
```
![MySQL1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1032344/ae235401-3975-2cda-35bf-5dd1d0733322.png)
Mysqlをインストールしようとしたら、MariaDBが入ったのだが・・・。
他のEC2インスタンスを確認したところ、Amazon Linuxにはデフォルトでmariadb-libs-5.5.68-1.amzn2.x86_64が入っていて
MySQL互換のMariaDBをインストールしてしまった。
MySQLとMariaDBで競合をおこさないようにアンインストールしておく。

```
yum remove mariadb-libs -y
rpm -qa | grep -i maria
```
何も表示されないことを確認した。

次にMySQLをyumでインストールするため、MySQL公式のリポジトリを追加した。

```
yum localinstall http\://dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpm　-y
```
![MySQL2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1032344/c4040581-a958-26ea-8260-a84c0d313312.png)

```
yum info mysql-community-server　・・・MySQLのyumリポジトリ追加を確認
yum -y install mysql-community-server　・・・mysqldのインストール
mysqld --version
```

にてMySQLのインストールを確認。
![MySQL4.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1032344/90c8097a-6ae9-6f81-23f4-191430b8d468.png)

他のサービスと同様にmysqld.serviceが正常に動いていることを確認した。

```
systemctl enable mysqld.service
systemctl start mysqld.service
systemctl status mysqld.service
```
![MySQL5.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1032344/938b2f95-ec3a-da94-e9fd-24b19a455d93.png)
MySQLのrootユーザの初期パスワードは、/var/log/mysqld.logに記載されている。

```
cat /var/log/mysqld.log | grep temporary
```
一時的なパスワードなので、rootユーザにログイン後に任意のパスワードに変える。

```
mysql -u root -p
```
コロンの後ろの白塗り部分に一時パスワードが記載されているので、rootユーザにログイン。

```
set password for root@localhost=password('ここに新しいパスワード');
```
![MySQL6.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1032344/11637e09-d977-acb0-2923-6e4bc3141cf7.png)
Query OKと出れば変更完了だが、初期のパスワードポリシーが結構厳しめで
パスワードは大文字・小文字・数字・記号とかにしないとはじかれると思う。
パスワード変更後はいったんMySQLから抜けて、新パスワードでログインできることを確認した。
![MySQL7.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1032344/8e9a28f5-84f9-da6a-b71e-2643450a64c8.png)

長くなってしまったので、第2回はここまで。
久々に有意義な休日を過ごせたと思う。（いつもはゲームして、YouTube見て、見てるうちに寝ちゃって1日終わる)
次回は、APサーバにMySQLドライバーを入れて、WEBサーバとAPサーバとDBサーバを連携したい。
イメージでは、WEBサーバのnginx.confにリバースプロキシの設定を入れて、
Tomcatのserver.xmlにDBサーバのアドレスを記載すれば
連携できるのではないかと思っている。
正直ここから先は何もわかっていないので、次回の記事は結構先になりそうだ。

つづく
https://qiita.com/shinichi_yoshioka/items/5253fd442376c6f222b2