😊

Dedicated Cluster に VPC Peering 接続 で Amazon EC2 からアクセスする

2024/12/14に公開

この記事はTiDB Adventcalender 2024 の14日の記事です。
先日Dedicated Cluster に対して AWS PrivateLink経由でプライベートな接続を行いました。
https://zenn.dev/kameping/articles/62415761843938
今日は別のオプションであるVPC Peeringを試します。

PrivateLinkはSecurityGroupをアタッチできるため、細かいネットワークの制御を5Tupleベースで行うことが可能です。一方有償でありかつSubnet単位で設定が必要となるため初期設定が煩雑となり費用もSubnet毎に増えていきます。
一方VPC PeeringはSecurity Groupをアタッチすることは行えない代わりに、無償で利用でき一つの設定でVPC全域からアクセス可能となり制御はルートテーブルで行う、という違いがあります。

小規模ネットワークではよりシンプルなVPC Peeringがはまるケースが多いかもしれません。

さっそくやってみる

TiDB Dedicated の設定

手順は公式ドキュメントとしてここに纏まっています。
https://docs.pingcap.com/ja/tidbcloud/set-up-vpc-peering-connections
まずはDedicated Clusterを起動します。その手順は以下を参考にしてください。この記事では詳細は割愛します。
https://docs.pingcap.com/ja/tidb/stable/quick-start-with-tidb
注意点ですが、接続を行うクライアント(後ほど起動するEC2)と必ず同じリージョンにしておいてください。Dedicated Cluster は Serverless Cluster と異なりそれなりの時間がかかりますので待ちます。


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