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 ピアリング方法は次のドキュメントを参照ください。

How tos Set up Amazon VPC peering to work with AWS resources outside of Amazon Lightsail | Amazon Lightsail How tos

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 と通信できます。

参考