AWS初心者なのでまずはWordPressを入れてみる ② ～ RDSとの連携、セキュリティグループ設定

# お題

**MySQLインスタンスを別途作成し、連携したWordPressを構築する。**
前回建てたEC2インスタンスは破棄。

今回はこちらのサイトを参考にさせていただきました。
[WordPress - Linux入門 - Webkaru](https://webkaru.net/linux/cat/setting/wordpress/)

# 概要

- RDSでMySQLを建てる
- EC2にApache、PHPを入れてWordPressをインストール
- WordPressの初期設定で、DBにRDS MySQLを指定
- WordPressの動作を確認、RDS MySQLにデータが入っていることを確認

SSHで接続さえできてしまえばインストール自体は引っかかるところはありませんでした。

# 引っかかったところ：RDS側のセキュリティ設定

### セキュリティグループ（ファイアウォール）で：
EC2のIPアドレス決め打ちでポート3306（MySQLのデフォルト）を開放したのですが、つながりませんでした。
全開放したら繋がりました。

このとき指定した「EC2のIPアドレス」は、パブリックとプライベートの2つのうちのパブリックIPアドレスです。
同じVPC内であればプライベートIPでの接続となるので、プライベートIPアドレスを指定すれば3306のみの開放でいけます。

なお、
RDSのパブリックアクセシビリティ：デフォルトの「はい」
VPC：RDS、EC2ともにいじらなかったため、デフォルトのはず（要は同じVPC内にいたはず）

# 気になる点：構成について

### 今回やった構成：

パブリックなRDSを作成し、ポート3306を開放。
インターネット経由でEC2インスタンスからは勿論、自分の端末からも直接DBに接続できるようにする。

### こっちのほうが理想的な構成？：

同じVPC内にRDSとEC2インスタンスを作成し、RDSにはVPC内からだけ接続できるようにし、インターネットから隠す。

折角VPCという機能があるんですし、実際[こういう構成のガイド](https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/USER_VPC.Scenarios.html#USER_VPC.Scenario1)もあって、よりセキュアといえるような気がします。
DB内のデータを直接見たければ、ちょうどWordPressにもPHPが必要なわけで、EC2の方にWordPressと一緒にPHPMyAdmin入れてしまってもいいですし。

# まとめ：課題

- RDSをパブリック開放せず、VPC内でだけアクセスできる構成を試す
- RDSのセキュリティグループ設定でも、EC2のプライベートIPアドレスのみ許可することで接続できるかを試す

というわけで後ほどもう一回作ります。

# おまけ：ログ

最適な構成じゃない気もしますが、一応今回の作業ログ。
ところどころ*でマスクしてます。

### EC2にSSHログイン、yumでPHPなどのパッケージをインストール

```shell-session
****@****-PC MINGW64 ~/.ssh
$ ssh -i MyKeyPair.pem  ec2-user@18.218.100.114
The authenticity of host '18.218.100.114 (18.218.100.114)' can't be established.
ECDSA key fingerprint is SHA256:NkYp2OZCdQJ7gMSTotsB8TmpRgK27RiCaYyN4WI2cqo.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '18.218.100.114' (ECDSA) to the list of known hosts.

       __|  __|_  )
       _|  (     /   Amazon Linux AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-ami/2018.03-release-notes/
14 package(s) needed for security, out of 30 available
Run "sudo yum update" to apply all updates.
[ec2-user@ip-172-31-24-172 ~]$
[ec2-user@ip-172-31-24-172 ~]$
[ec2-user@ip-172-31-24-172 ~]$ sudo yum -y install httpd php php-mysql mysql wget
Loaded plugins: priorities, update-motd, upgrade-helper
amzn-main                                                | 2.1 kB     00:00
amzn-updates                                             | 2.5 kB     00:00
Package wget-1.18-4.29.amzn1.x86_64 already installed and latest version
Resolving Dependencies
--> Running transaction check
---> Package httpd.x86_64 0:2.2.34-1.16.amzn1 will be installed
（中略）
  php-common.x86_64 0:5.3.29-1.8.amzn1
  php-pdo.x86_64 0:5.3.29-1.8.amzn1

Complete!
[ec2-user@ip-172-31-24-172 ~]$
[ec2-user@ip-172-31-24-172 ~]$ sudo service httpd start
Starting httpd:                                            [  OK  ]
[ec2-user@ip-172-31-24-172 ~]$

```

ここでhttps\://18.218.100.114/にブラウザアクセス ⇒ Apacheの画面表示OK
どうせすぐ潰すので、chkconfig設定はサボりました。
今思い出したんですがそういえばポート80を開放する操作を別にしなくても繋がりました。どこかで自動でやってた？

※mysqlをインストールしていますが、このEC2インスタンスからCLIでRDSに接続できるかを先に試したかったからです。以下の通り。

### EC2からRDSのMySQLにログインできるかを試す

```shell-session
[ec2-user@ip-172-31-24-172 ~]$ mysql -uroot -p******** -h mysqlinstance1.cad4fws8y5kc.us-east-2.rds.amazonaws.com wpdb

# かなり待つ

ERROR 2003 (HY000): Can't connect to MySQL server on 'mysqlinstance1.cad4fws8y5kc.us-east-2.rds.amazonaws.com' (110)
[ec2-user@ip-172-31-24-172 ~]$
[ec2-user@ip-172-31-24-172 ~]$ mysql -uroot -p******** -h mysqlinstance1.cad4fws8y5kc.us-east-2.rds.amazonaws.com -P 3306 wpdb

# 無駄とは思いつつポート指定オプションを追加
# やっぱりかなり待つ

ERROR 2003 (HY000): Can't connect to MySQL server on 'mysqlinstance1.cad4fws8y5kc.us-east-2.rds.amazonaws.com' (110)
[ec2-user@ip-172-31-24-172 ~]$

```

※「wpdb」はRDS作成時につくったDBの名前

あれ？ということで、RDSのセキュリティグループを変更、3306を全解放。

```shell-session

[ec2-user@ip-172-31-24-172 ~]$ mysql -uroot -p******** -h mysqlinstance1.cad4fws8y5kc.us-east-2.rds.amazonaws.com -P 3306 wpdb
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.6.41 Source distribution

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

```

つながりました。
というわけで安心してアプリ側の設定に入ります。

### PHPの設定、確認

```shell-session
[ec2-user@ip-172-31-24-172 ~]$ sudo vi /etc/php.ini

# タイムゾーン"Asia/Tokyo"を設定

[ec2-user@ip-172-31-24-172 ~]$ sudo vi /var/www/html/phpinfo.php

# phpinfo()を書く

[ec2-user@ip-172-31-24-172 ~]$ sudo service httpd restart
Stopping httpd:                                            [  OK  ]
Starting httpd:                                            [  OK  ]
[ec2-user@ip-172-31-24-172 ~]$

```

ここでhttps\://18.218.100.114/phpinfo.phpにブラウザアクセス ⇒ PHPの画面表示OK

### WordPressのインストール、httpdのドキュメントルートに設定

```shell-session

[ec2-user@ip-172-31-24-172 ~]$
[ec2-user@ip-172-31-24-172 ~]$ cd /tmp/
[ec2-user@ip-172-31-24-172 tmp]$
[ec2-user@ip-172-31-24-172 tmp]$ wget https://ja.wordpress.org/wordpress-4.9.8-ja.tar.gz
--2018-11-12 21:18:12--  https://ja.wordpress.org/wordpress-4.9.8-ja.tar.gz
Resolving ja.wordpress.org (ja.wordpress.org)... 198.143.164.252
Connecting to ja.wordpress.org (ja.wordpress.org)|198.143.164.252|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 9292403 (8.9M) [application/octet-stream]
Saving to: ‘wordpress-4.9.8-ja.tar.gz’

wordpress-4.9.8-ja. 100%[===================>]   8.86M  50.9MB/s    in 0.2s

2018-11-12 21:18:12 (50.9 MB/s) - ‘wordpress-4.9.8-ja.tar.gz’ saved [9292403/9292403]

[ec2-user@ip-172-31-24-172 tmp]$
[ec2-user@ip-172-31-24-172 tmp]$
[ec2-user@ip-172-31-24-172 tmp]$ tar zxf wordpress-4.9.8-ja.tar.gz
[ec2-user@ip-172-31-24-172 tmp]$ cp -r wordpress /var/www/
cp: cannot create directory ‘/var/www/wordpress’: Permission denied
[ec2-user@ip-172-31-24-172 tmp]$ sudo cp -r wordpress /var/www/
[ec2-user@ip-172-31-24-172 tmp]$ sudo chown -R apache.apache /var/www/wordpress
[ec2-user@ip-172-31-24-172 tmp]$
[ec2-user@ip-172-31-24-172 tmp]$ cd
[ec2-user@ip-172-31-24-172 ~]$ 
[ec2-user@ip-172-31-24-172 ~]$ sudo vi /etc/httpd/conf/httpd.conf

# DocumentRootを"/var/www/wordpress"に、
# Directoryタグを "/var/www/wordpress"に、
# 同タグ内のAllowOverrideをAllにそれぞれ編集

[ec2-user@ip-172-31-24-172 ~]$ sudo service httpd restart
Stopping httpd:                                            [  OK  ]
Starting httpd:                                            [  OK  ]
[ec2-user@ip-172-31-24-172 ~]$
```

これまたすぐ潰すし…ということで設定ファイルのバックアップを取っていません。本番環境ではちゃんとやりましょう。

ここでhttps\://18.218.100.114/にブラウザアクセス ⇒ WordPressの初期画面表示OK

あとはWeb画面から設定。DBの情報にRDSのエンドポイント他を入力、無事完了。
![RDB-Wordpressできた.png](https://qiita-image-store.s3.amazonaws.com/0/309727/c17b2d1e-f3e7-7d50-372e-f712bfc3eb13.png)

記事の投稿もOK。

### RDSのMySQLにデータが入っているか確認

したいのですが、ここでEC2に繋いでいるSSHがとても重くなる。
コンソールが返って来ない。繋ぎ直そうとするとSSHログインにえらく待たされ、いつまで経ってもEC2に入れない。

仕方ないので自端末からA5 Mk-2で接続。
![RDBの中身.png](https://qiita-image-store.s3.amazonaws.com/0/309727/12515a04-774f-7f2c-794e-1d3a83006219.png)
![RDBの中身2.png](https://qiita-image-store.s3.amazonaws.com/0/309727/1a97b794-5a9a-64c5-d32a-4dbda594514a.png)
ちゃんと入っていることが確認できました。

以降EC2がえらく重くなってしまったのは、microにWordPressを積んだせいなのか。Web画面も繋がらなくなってしまいました。
最初のログインや記事の投稿自体はサクサクいってたんですが。
ここもまた次回様子を見たいと思います。