Dedicated Cluster に VPC Peering 接続 で Amazon EC2 からアクセスする
この記事はTiDB Adventcalender 2024 の14日の記事です。
先日Dedicated Cluster に対して AWS PrivateLink経由でプライベートな接続を行いました。
今日は別のオプションであるVPC Peeringを試します。
PrivateLinkはSecurityGroupをアタッチできるため、細かいネットワークの制御を5Tupleベースで行うことが可能です。一方有償でありかつSubnet単位で設定が必要となるため初期設定が煩雑となり費用もSubnet毎に増えていきます。
一方VPC PeeringはSecurity Groupをアタッチすることは行えない代わりに、無償で利用でき一つの設定でVPC全域からアクセス可能となり制御はルートテーブルで行う、という違いがあります。
小規模ネットワークではよりシンプルなVPC Peeringがはまるケースが多いかもしれません。
さっそくやってみる
TiDB Dedicated の設定
手順は公式ドキュメントとしてここに纏まっています。
Available
になれば起動完了です。
Clusterをクリックして左ペイン下部のNetworking
をクリックします。
Dedicated Cluster はデフォルトではドのネットワーク経路からもアクセスが出来ないようになっています。Public
,Private Endpoint(PrivateLink)
,VPC Peering
が選択肢として存在しています。
Create VPC Peering
をクリックします。
TiDB Dedicated Cluster が動作しているVPCのIDとCIDRをコピーしておきます。
VPC Peeringとは2つのVPCをプライベート接続します。今コピーしたこの情報はDedicated Cluster が動作しているVPCの情報です。
次に接続を行いたいクライアントEC2を起動させるVPCの情報を入力します。
この際接続されたVPC同士はIPアドレスブロックを共有する形になるので入力するCIDR(指定したVPCが持っているCIDR)はTiDB側と被らないようにしてください。
Create
をクリックすると以下の様に承認待ちとなります。
この承認はリクエストを受け付ける側、つまりクライアントEC2を起動させるVPC側で行う必要があります。
AWS 側の設定
数分待つとAWS側で指定したVPCで承認待ちのPeering設定が表示されます。
選択肢してアクション
からリクエストを承諾
を選択します。以下のようにアクティブになります。
次にクライアントEC2を起動するVPC側のルートテーブルの設定変更を行います。
TiDB Dedicated側VPCを宛先とした通信が先ほど設定したVPC Peering IDを向くように指定します。
以下のようなルートを追加して保存します。
これにより172.30.88.0/21
あての通信がVPC Peeringを経由してTiDB Dedicated Cluster が存在しているVPCへルーティングされます。
接続テスト
EC2を起動してMySQLクライアントをインストールします。
sudo dnf -y localinstall https://dev.mysql.com/get/mysql80-community-release-el9-1.noarch.rpm
sudo dnf -y install mysql mysql-community-client
sudo dnf -y install mariadb105
TiDBコンソールのNetworking
ペイン、右上Conenct
ボタンをクリックします。
ドロップダウンからVPC Peering
を選択します。
初回接続時はまだパスワードが設定されていないため、Set Root Password
をクリックします。
その後ドロップダウンから表示されるMySQL CLIの接続文字列をコピーして、接続します。
mysql --comments -u 'root' -h private-tidb.grjchb1j5th9.clusters.tidb-cloud.com -P 4000 -D 'test' -p'<PASSWORD>'
接続先FQDNがVPC Peering専用のものになっています。
EC2から接続出来れば設定完了です。
mysql --comments -u 'root' -h private-tidb.grjchb1j5th9.clusters.tidb-cloud.com -P 4000 -D 'test' -p'xxxxxxx'
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 3984620772
Server version: 8.0.11-TiDB-v8.1.1 TiDB Server (Apache License 2.0) Enterprise Edition, MySQL 8.0 compatible
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 [test]> use test;
Database changed
Discussion