TiDB Cloud DedicatedとEC2をPrivateLinkで接続してみた

TiDB Cloud DedicatedとEC2をPrivateLinkで接続してみた

Clock Icon2025.05.12

ゲームソリューション部の えがわ です。

今回はTiDB Cloud DedicatedとAWSのEC2PrivateLinkで接続してみました。

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」をクリックします。

tidb_dedicated_privatelink_09.png

「Private Endpoint」を選択し、「Create Private Endpoint Connection」をクリックします。

tidb_dedicated_privatelink_01.png

接続したいVPC ID、サブネットIDを入力し「Generate Command」をクリックします。

tidb_dedicated_privatelink_10

AWS CLI用のVPCエンドポイント作成コマンドが表示されるので実行します。

tidb_dedicated_privatelink_03.png

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」をクリックします。

tidb_dedicated_privatelink_04.png

VPCエンドポイント(PrivateLink)に対して「Private DNS」を有効化するコマンドが表示されるので実行します。

tidb_dedicated_privatelink_05.png

実行例
egawa@HL01559:~$ aws ec2 modify-vpc-endpoint --vpc-endpoint-id vpce-xxxxx --region ap-northeast-1 --private-dns-enabled
{
    "Return": true
}

接続情報が表示されます。
「Set Root Password」をクリックしてユーザー情報を作成しておきます。

tidb_dedicated_privatelink_06.png

今回はEC2からMySQL CLIで接続するため、「Connect With」をMySQL CLIに設定し、コマンド例を取得します。

tidb_dedicated_privatelink_07.png

VPCエンドポイントのセキュリティグループを設定

作成したVPCエンドポイントに適用されているセキュリティグループを確認します。
EC2インスタンスからのポート4000へのインバウンドトラフィックを許可する設定を追加しておきましょう。
これを設定しないと、せっかくPrivateLinkを構築しても接続できません。

tidb_dedicated_privatelink_08.png

接続確認

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アドレス範囲を気にせず接続できるメリットが大きいと思います。
この記事がどなたかの参考になれば幸いです。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.