TiDB CloudのクラスタをTerraformで構築してみた

2023.12.04

こんにちは、ゲームソリューション部のsoraです。
今回は、TiDB CloudのクラスタをTerraformで構築してみたことについて書いていきます。

はじめに

使用するために、TiDB CloudのAPIキーが必要になります。
APIキーの作成方法については以下記事の冒頭をご確認ください。

Terraformコード

TerraformでTiDB Cloudプロバイダーがあったため、こちらを参考にクラスタの構築を試していきます。
tidbcloud Provider

早速ですが、以下がDedicated TierとServerless Tierを両方構築する場合のコードです。

main.tf

terraform {
    required_providers {
        # TiDB Cloudプロバイダー
        tidbcloud = {
            source = "tidbcloud/tidbcloud"
            version = "~> 0.2.1"
        }
    }
}
# TiDB Cloud APIキー(事前にTiDB Cloudにて作成しておく)
provider tidbcloud {
    public_key  = "xxxxxxxx"
    private_key = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}

# Dedicated Tierクラスタの構築
resource tidbcloud_cluster dedicated_tier_cluster {
    project_id     = "xxxxxxxxxxxxxxxxxxxx"
    name           = "ClusterDedicated"
    # Dedicated Tierの指定
    cluster_type   = "DEDICATED"
    cloud_provider = "AWS"
    region         = "ap-northeast-1"
    config = {
        # クラスタを構成する要素の指定
        components = {
            tidb = {
                # 8vCPU、16GiB
                node_size : "8C16G"
                node_quantity : 2
            }
            tikv = {
                # 8vCPU、32GiB
                node_size : "8C32G"
                storage_size_gib : 500,
                node_quantity : 3
            }
            tiflash = {
                # 8vCPU、64GiB
                node_size : "8C64G"
                storage_size_gib : 2048,
                node_quantity : 2
            }
        }
        # IPアクセスリスト(リスト指定することに注意)
        ip_access_list = [
            {cidr = "10.0.0.0/16", description = "test-dedicated-1"},
            {cidr = "10.1.0.0/16", description = "test-dedicated-2"},
        ]
        # 接続用のTiDBポート
        port = 1024
        # クラスタのルートパスワード
        root_password = "root_password"
    }
}

# Serverless Tierクラスタの構築
resource tidbcloud_cluster serverless_tier_cluster {
    project_id     = "xxxxxxxxxxxxxxxxxxxx"
    name           = "ClusterServerless"
    # Serverless Tierの指定(ServerlessではなくDEVELOPER)
    cluster_type   = "DEVELOPER"
    cloud_provider = "AWS"
    region         = "ap-northeast-1"
    config = {
        root_password = "root_password"
    }
}

Dedicatedでは、構成要素のサイズや数を指定する必要があります。
TiDB CloudのGUIで構築する場合に指定できる項目が全て指定できます。
IPアクセスリストとクラスタのルートパスワードは、GUI上で構築時に設定できない項目のようです。(構築後にはGUI上でも設定可能です)

Serverlessでは、cluster_type = "SERVERLESS"ではなくcluster_type = "DEVELOPER"を指定することに注意が必要です。
TiDB CloudのGUIで構築する場合に指定できる項目の中で、Spending Limit(支出制限)とEnhanced Encryption at Rest(Beta)は指定できなさそうです。(構築後にGUI上で設定可能です)

構築してみた

Terraformを実行していきます。
Dedicatedは無料枠がないため、今回はServerlessのみ構築します。

$ terraform init
$ terraform plan
$ terraform apply

実行後に、TiDB CloudのGUI上で確認してみると、Serverlessクラスタが作成できていました。
Created byもapikey-xxxxになっています。


最後に

今回は、TiDB CloudのクラスタをTerraformで構築してみたことを記事にしました。
どなたかの参考になると幸いです。