ブログ
これまでに経験してきたプロジェクトで気になる技術の情報を紹介していきます。
EC2のCentOS7に立てたMySQLに他のEC2サーバーから接続できるようにする
こんにちは。
今回は2台の EC2 間で MySQL/MariaDB の通信をしないといけない場合の、
インフラ側の設定の手順を書いていきます!
想定するプロジェクト環境としては、
- 1台目のサーバーには Asterisk と MySQL/MariaDB
- 2台目のサーバーには nginx と php
というような感じで、
具体的には、
「Laravel から Asterisk のアカウントを作ったり消したりする」
ような用途です。
「AWSなんだからRDSを使えよ」
といった声が聞こえてくる気がしますが、
どうも Asterisk は MySQL/MariaDB へのアクセスが遅いらしく、
このような構成を取らざるを得なくなったり、ならなかったりします。
知らんけど。
また、外部からといっても public にアクセスを許可するのではなく、
同じ private subnet からのみアクセスを許可するように設定していきます。
¶ 前提条件
# クラウドサービス
AWS EC2
# OS
CentOS7
# DB
mysql Ver 5.7 or mariadb
# DB server IPv4
10.0.0.77
# ローカルIPのサブネット
10.0.0.0/255.255.255.0
# or
10.0.0.0/24
¶ AWS security group に穴をあける
インバウンドルールに以下のようなルールを追加します。
3306 TCP 10.0.0.0/24
¶ CentOS の Firewall に穴をあける(iptables)
まず現在の設定を確認します。
$ sudo firewall-cmd --list-services --zone=public --permanent
結果はこんな感じです。
dhcpv6-client ssh
上記のように mysql が含まれない場合は追加します。
$ sudo firewall-cmd --add-service=mysql --zone=public --permanent
再度設定を確認します。
$ sudo firewall-cmd --list-services --zone=public --permanent
コマンドの結果。
dhcpv6-client mysql ssh
上記のように mysql が含まれるようになりました。
現在の設定を firewalld に読みこみなおさせます。
$ sudo firewall-cmd --reload
これでサーバーの外部から MySQL に接続できるようになりました。
次に MySQL 側で外部からログインできるユーザーを追加します。
¶ MySQL/MariaDB ユーザーを追加
10.0.0.0/24
の CIDR はここでは使えません。
DBスキーマが asterisk と laravel 等に分かれている場合、
必要な数だけ GRANT していきます。
GRANT ALL ON `asterisk`.* TO 'laravel'@'10.0.0.0/255.255.255.0' IDENTIFIED BY 'super_strong_secure_strings';
GRANT ALL ON `asterisk`.* TO 'laravel'@'localhost' IDENTIFIED BY 'super_strong_secure_strings';
GRANT ALL ON `laravel`.* TO 'laravel'@'10.0.0.0/255.255.255.0' IDENTIFIED BY 'super_strong_secure_strings';
GRANT ALL ON `laravel`.* TO 'laravel'@'localhost' IDENTIFIED BY 'super_strong_secure_strings';
FLUSH PRIVILEGES;
最後の FLUSH PRIVILEGES で読みこませなおすと、
アクセスできるようになります。
¶ 接続確認
2台目のサーバー( MySQL/MariaDB が立ってない方)に SSH でログインし、
1代目のサーバー( 10.0.0.77 )の MySQL に接続してみます。
$ mysql -h 10.0.0.77 -u laravel -p
以下のような画面が表示されると成功です。
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 81
Server version: 5.7.35 MySQL Community Server (GPL)
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MySQL [(none)]>
コメントはありません。