TiDB Cloud DedicatedとEC2をPrivateLinkで接続してみた
ゲームソリューション部の えがわ です。
今回はTiDB Cloud DedicatedとAWSのEC2をPrivateLinkで接続してみました。
PrivateLinkとVPC Peeringの比較
TiDBへのプライベート接続方法として、PrivateLinkとVPC Peeringの2つの選択肢があります。それぞれの特徴を比較してみます。
項目 | PrivateLink | VPC Peering |
---|---|---|
接続形態 | エンドポイントサービス経由 | VPC間の直接ピアリング |
IPアドレス管理 | IPアドレス範囲の重複可能 | IPアドレス範囲の重複不可 |
セキュリティ | サービス提供者が接続を承認可能 | VPC全体が接続される |
接続数の制限 | 多数のVPCから単一のサービスへの接続が容易 | VPCペア間の1対1接続 |
コスト | データ転送量+時間単位のエンドポイント料金 | データ転送量のみ |
やってみる
前提
- TiDB Cloud Dedicatedクラスタを作成済み
- 接続先VPC/サブネット/セキュリティグループの設定権限あり
- AWS CLIが使用可能
- EC2の起動など、細かい手順は省いています。
TiDB Cloud DedicatedでPrivate Endpointを作成
TiDB Cloudの管理画面からPrivate Endpointを作成していきます。
クラスタ詳細画面で「Connect」をクリックします。
「Private Endpoint」を選択し、「Create Private Endpoint Connection」をクリックします。
接続したいVPC ID、サブネットIDを入力し「Generate Command」をクリックします。
AWS CLI用のVPCエンドポイント作成コマンドが表示されるので実行します。
egawa@HL01559:~$ aws ec2 create-vpc-endpoint --vpc-id vpc-xxxxx --region ap-northeast-1 --service-name com.amazonaws.vpce.ap-northeast-1.vpce-svc-xxxxx --vpc-endpoint-type Interface --subnet-ids subnet-xxxxx
{
"VpcEndpoint": {
"VpcEndpointId": "vpce-xxxxx",
"VpcEndpointType": "Interface",
"VpcId": "vpc-xxxxx",
"ServiceName": "com.amazonaws.vpce.ap-northeast-1.vpce-svc-xxxxx",
"State": "pendingAcceptance",
"RouteTableIds": [],
"SubnetIds": [
"subnet-xxxxx"
],
"Groups": [
{
"GroupId": "sg-xxxxx",
"GroupName": "default"
}
],
"IpAddressType": "ipv4",
"DnsOptions": {
"DnsRecordIpType": "ipv4"
},
"PrivateDnsEnabled": false,
"RequesterManaged": false,
"NetworkInterfaceIds": [
"eni-06b1d70e5b791b9ac"
],
"DnsEntries": [
{
"DnsName": "vpce-xxxxx-xxxxx.vpce-svc-xxxxx.ap-northeast-1.vpce.amazonaws.com",
"HostedZoneId": "xxxxx"
},
{
"DnsName": "vpce-xxxxx-xxxxx-ap-northeast-1a.vpce-svc-xxxxx.ap-northeast-1.vpce.amazonaws.com",
"HostedZoneId": "xxxxx"
}
],
"CreationTimestamp": "2025-05-12T06:18:32.978000+00:00",
"OwnerId": "xxxxx"
}
}
表示されたVPC Endpoint IDを入力し「Create Private Endpoint Connection」をクリックします。
VPCエンドポイント(PrivateLink)に対して「Private DNS」を有効化するコマンドが表示されるので実行します。
egawa@HL01559:~$ aws ec2 modify-vpc-endpoint --vpc-endpoint-id vpce-xxxxx --region ap-northeast-1 --private-dns-enabled
{
"Return": true
}
接続情報が表示されます。
「Set Root Password」をクリックしてユーザー情報を作成しておきます。
今回はEC2からMySQL CLIで接続するため、「Connect With」をMySQL CLIに設定し、コマンド例を取得します。
VPCエンドポイントのセキュリティグループを設定
作成したVPCエンドポイントに適用されているセキュリティグループを確認します。
EC2インスタンスからのポート4000へのインバウンドトラフィックを許可する設定を追加しておきましょう。
これを設定しないと、せっかくPrivateLinkを構築しても接続できません。
接続確認
EC2からTiDB Cloudのエンドポイント(VPC Endpoint経由)に接続できるか確認します。
[ec2-user@ip-10-0-6-225 ~]$ mysql --comments -u 'root' -h privatelink-xxxxx.xxxxx.clusters.tidb-cloud.com -P 4000 -D 'test' -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2202063384
Server version: 8.0.11-TiDB-v8.1.2 TiDB Server (Apache License 2.0) Enterprise Edition, MySQL 8.0 compatible
Copyright (c) 2000, 2025, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
接続できました!
さいごに
PrivateLinkで接続することで、インターネットを経由せずにセキュアな通信が実現できます。
特にマルチアカウント環境や複雑なネットワーク構成を持つ企業では、IPアドレス範囲を気にせず接続できるメリットが大きいと思います。
この記事がどなたかの参考になれば幸いです。