お問い合わせ

ブログ

これまでに経験してきたプロジェクトで気になる技術の情報を紹介していきます。

EC2のCentOS7に立てたMySQLに他のEC2サーバーから接続できるようにする

NMC NMC 3 years

こんにちは。
今回は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)]> 
EC2のCentOS7に立てたMySQLに他のEC2サーバーから接続できるようにする 2021-10-08 12:26:21

コメントはありません。

4316

お気軽に
お問い合わせください。

お問い合わせ
gomibako@aska-ltd.jp