お題
MySQLインスタンスを別途作成し、連携したWordPressを構築する。
前回建てたEC2インスタンスは破棄。
今回はこちらのサイトを参考にさせていただきました。
WordPress - Linux入門 - Webkaru
概要
- 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という機能があるんですし、実際こういう構成のガイドもあって、よりセキュアといえるような気がします。
DB内のデータを直接見たければ、ちょうどWordPressにもPHPが必要なわけで、EC2の方にWordPressと一緒にPHPMyAdmin入れてしまってもいいですし。
まとめ:課題
- RDSをパブリック開放せず、VPC内でだけアクセスできる構成を試す
- RDSのセキュリティグループ設定でも、EC2のプライベートIPアドレスのみ許可することで接続できるかを試す
というわけで後ほどもう一回作ります。
おまけ:ログ
最適な構成じゃない気もしますが、一応今回の作業ログ。
ところどころ*でマスクしてます。
EC2にSSHログイン、yumでPHPなどのパッケージをインストール
****@****-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にログインできるかを試す
[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を全解放。
[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の設定、確認
[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のドキュメントルートに設定
[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のエンドポイント他を入力、無事完了。
記事の投稿もOK。
RDSのMySQLにデータが入っているか確認
したいのですが、ここでEC2に繋いでいるSSHがとても重くなる。
コンソールが返って来ない。繋ぎ直そうとするとSSHログインにえらく待たされ、いつまで経ってもEC2に入れない。
仕方ないので自端末からA5 Mk-2で接続。
ちゃんと入っていることが確認できました。
以降EC2がえらく重くなってしまったのは、microにWordPressを積んだせいなのか。Web画面も繋がらなくなってしまいました。
最初のログインや記事の投稿自体はサクサクいってたんですが。
ここもまた次回様子を見たいと思います。