背景
社内の RDS の一つに、一時的に特定の外部の固定IPからアクセスできるようにしたい。
そこで、特定の外部の固定IPからのみアクセス可能な EC2 に ProxySQL を設定し、そこ経由で RDS にアクセスしたい。
(今回は MySQL)
AWS マネジメントコンソール上での準備
VPC の用意
VPCを用意しておきます。
RDS の準備
RDS インスタンスを立ち上げる。
インバウンドには、後述する EC2 のセキュリティグループを設定。
port は 3306 を空けておく。
ここでは説明のため、↓のようなユーザ/パスを設定することにする。
user: app
password: pass
EC2 の準備
今回は Amazon Linux を想定。
インバウンドとして、接続してくる外部の固定IPを設定。
port は 22(SSH用)と 6033(proxy用) を空けておく。
EC2 上での操作
RDS インスタンスに接続してテーブルを作成
ユーザは AWS マネジメントコンソールで RDS インスタンスを作る時に作られている。
$ sudo yum -y install mysql mysql-devel
$ mysql -h [RDSのエンドポイント] -u [マスターユーザー名] -p
// RDSインスタンスへの接続
Enter password:
// テーブル作成
CREATE TABLE users(
id INT(11) AUTO_INCREMENT NOT NULL,
name VARCHAR(30) NOT NULL ,
PRIMARY KEY (id));
ProxySQL をインストール
↓ファイルを開いて
$ vi /etc/yum.repos.d/proxysql.repo
↓を書き込む
[proxysql_repo]
name= ProxySQL YUM repository
baseurl=https://repo.proxysql.com/ProxySQL/proxysql-2.0.x/centos/latest
gpgcheck=1
gpgkey=https://repo.proxysql.com/ProxySQL/repo_pub_key
インストール
$ yum install proxysql
ProxySQL 管理画面での操作
/etc/proxysql.cnf の設定
mysql_variables=
{
admin_credentials="admin:admin"
mysql_ifaces="127.0.0.1:6032;/tmp/proxysql_admin.sock"
threads=1
interfaces="0.0.0.0:6033;"
}
ProxySQL 起動
# 止めるときは stop
$ sudo service proxysql start
ProxySQL 管理画面から proxy 設定
$ mysql -u admin -padmin -h 127.0.0.1 -P6032 --prompt='Admin> '
# サーバ情報とユーザを作成
INSERT INTO mysql_servers(hostgroup_id, hostname, port) VALUES (0,[RDSのエンドポイント],3306);
INSERT INTO mysql_users (username,password) VALUES ('app','pass');
# RUNTIME へ適用
LOAD MYSQL SERVERS to RUNTIME;
LOAD MYSQL USERS TO RUNTIME;
# 永続化
SAVE MYSQL SERVERS TO DISK;
SAVE MYSQL USERS TO DISK;
固定IPを持つ外部からの操作
mysql -h [EC2のエンドポイント] -u app -ppass -P6033
これで接続できます。
先ほど作ったテーブルも確認できるはず。
参考ページ一覧
https://github.com/sysown/proxysql/wiki
https://confluence.sharuru07.jp/pages/viewpage.action?pageId=2883888