Lightsailで構築したWordPressのMySQLにインスタンス外からアクセスする
Lightsail のブループリントから Bitnami の WordPress を起動すると、同じインスタンス内に、WordPress と MySQL が動作します。
この MySQL に
- VPC ピアリングした別 VPC 内の EC2
- インターネット
からアクセスする方法を紹介します。
MySQL の変更
Bitnami 外提供するブループリントでは、MySQL はローカルホストからの接続飲み受け付けています。 まず、ローカルホスト外からアクセスできるように設定変更します。
MySQL の接続ユーザー
Bitnami の提供するインスタンスでは、root ユーザーで MySQL にアクセスします。
パスワードは bitnami ユーザーのホームディレクトリ直下のファイル $HOME/bitnami_application_password
にあります。
$ mysql -u root -p Enter password:
で接続できることを確認してください。
設定ファイル
MySQL の設定ファイル /opt/bitnami/mysql/my.cnf で、 接続が 127.0.0.1 からにバインドされているため、該当設定をコメントアウトします。
$ diff -u my.cnf.orig my.cnf --- my.cnf.orig 2018-07-07 17:20:09.407090415 +0000 +++ my.cnf 2018-07-07 17:20:21.719317294 +0000 @@ -9,7 +9,7 @@ socket=/opt/bitnami/mysql/tmp/mysql.sock tmpdir=/opt/bitnami/mysql/tmp max_allowed_packet=32M -bind-address=127.0.0.1 #bind-address=127.0.0.1 skip-name-resolve=1
設定を変更したあとは、MySQL を再起動します。
$ sudo /opt/bitnami/ctlscript.sh restart mysql Unmonitored mysql /opt/bitnami/mysql/scripts/ctl.sh : mysql stopped /opt/bitnami/mysql/scripts/ctl.sh : mysql started at port 3306 Monitored mysql
ローカルホスト外から接続する MySQL ユーザーの追加
初期状態では、ローカルホストからアクセスするユーザーしか存在しません。
mysql> select User, Host from mysql.user; +---------------+-----------+ | User | Host | +---------------+-----------+ | bn_wordpress | 127.0.0.1 | | bn_wordpress | localhost | | mysql.session | localhost | | mysql.sys | localhost | | root | localhost | +---------------+-----------+ 5 rows in set (0.00 sec)
Host がローカルホスト外のユーザーを追加します。
$ /opt/bitnami/mysql/bin/mysql -u root -p -e \ "grant all privileges on *.* to 'root'@'%' identified by 'YOUR_PASSWORD' with grant option"; Enter password:
VPC ピアリングした別 VPC 内の EC2
Lightsail は同じリージョンのデフォルト VPC とピアリングできます。
一旦確立されると、ピアリングされた VPC の EC2 インスタンスは、プライベート IP アドレスを使用して、同じネットワーク上にあるかのように、ピアリング接続を介して互いに通信できます。
VPC ピアリング方法は次のドキュメントを参照ください。
VPC ピアリング後は、例えば Lightsail インスタンスにプライベート IP アドレスで SSH 接続できます。
$ ssh -i /path/to/lightsail.pem bitnami@LIGHTSAIL_PRIVATE_IP_ADDRESS
同様に Lightsail インスタンス内の MySQL にもプライベート IP アドレスで接続できます。
$ mysql -u root -p -h LIGHTSAIL_PRIVATE_IP_ADDRESS Enter password:
インターネットから
Lightsail インスタンスは、初期状態ではインターネットからの TCP 通信に対して
- HTTP:80
- HTTPS:443
- SSH:22
のポートしか許可していません。
MySQL(3306) へのアクセスも許可するように、Lightsail インスタンスの Networking → Firewall 画面で設定変更します。
それでは、接続してみましょう。
$ mysql -u root -p -h LIGHTSAIL_GLOBAL_IP_ADDRESS Enter password:
Lightsail の Firewall は VPC のセキュルティグループと異なり、通信元をしぼれない点にお気をつけください。 そのような通信要件がある場合
- Lightsail インスタンス内で iptables などで制限
- EC2 を利用
などをご検討ください。
まとめ
今回は Lightsail WordPress インスタンス内の MySQL と VPC内・外のサーバーから通信する方法を紹介しました。
MySQL をより本格的に活用したい場合、インスタンス内で稼働する MySQL を RDS に引っ越すことで、Lightsail インスタンスの負荷を軽減しつつ、データベースの運用負荷も大幅に下がります。 VPC Peering すれば、Lightsail インスタンス内から VPC 内に構築した RDS と通信できます。