🎃

TiDB Cloud : Cloud API を使った クラスター操作

に公開

https://zenn.dev/kameoncloud/articles/1b27bc40db70a5
前回こちらの記事でTiDB Cloud の IAM APIを使ってクラスータの操作やデータエクスポート、インポートなどを行える API Key の発行を行いました。
今日はその続きとして実際に発行されたAPI Keyを用いてCloud APIを使ってみます。

TiDB Cloud API

https://docs.pingcap.com/tidbcloud/api/v1beta/#tag/Project
API諸元はこちらで定義されておりswaggerファイルが配布されています。
Starterクラスターだと以下の操作が可能なようです。
(前回の記事執筆時点から少し変更が入っています)

さっそくやってみる

1. IAM API を用いた API Key の発行

では前回の記事の内容に基づきIAM APIを用いてAPI Keyを発行します。
https://zenn.dev/kameoncloud/articles/1b27bc40db70a5
発行の際権限はorg:ownerとします。

curl -X POST --digest   -u "$TIDB_CLOUD_PUBLIC_KEY:$TIDB_CLOUD_PRIVATE_KEY"   -H "Content-Type: application/json"   "https://iam.tidbapi.com/v1beta1/apikeys"   -d '{
    "displayName": "demo-api-key-org-owner",
    "role": "org:owner"
  }' | jq
% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100   256  100   182  100    74     73     29  0:00:02  0:00:02 --:--:--   261
{
  "name": "orgs/1372813089209216952/apiKeys/563416",
  "accessKey": "S2L95J80",
  "secretKey": "xxxx603d-9cfe-49cd-8f55-703f8c420eyy",
  "displayName": "demo-api-key-org-owner",
  "role": "org:owner"
}

2.プロジェクト一覧の操作

まずは発行されたキーを環境変数にセットします。

export TIDB_CLOUD_PUBLIC_KEY="S2L95J80"
export TIDB_CLOUD_PRIVATE_KEY="xxxx603d-9cfe-49cd-8f55-703f8c420eyy"
export PROJECT_ID="1372813089454531804"

次に以下のコマンドを実行します。

 curl --digest \
  --user "$TIDB_CLOUD_PUBLIC_KEY:$TIDB_CLOUD_PRIVATE_KEY" \
  --request GET \
  --url "https://api.tidbcloud.com/api/v1beta/projects?page=1&page_size=10"

以下の様に現存しているプロジェクト情報が出力されます。

{
  "items": [
    {
      "id": "1372813089454531804",
      "orgId": "1372813089209216952",
      "name": "default project",
      "clusterCount": 3,
      "userCount": 1,
      "createTimestamp": "1703216244",
      "awsCmekEnabled": false
    }
  ],
  "total": 1
}

3.Clusterの起動

ではClusterを起動してみます。

curl --digest \
  --user "$TIDB_CLOUD_PUBLIC_KEY:$TIDB_CLOUD_PRIVATE_KEY" \
  --request POST \
  --url "https://api.tidbcloud.com/api/v1beta/projects/$PROJECT_ID/clusters" \
  --header "Content-Type: application/json" \
  --data '{
    "name": "starter-cluster-01",
    "cluster_type": "DEVELOPER",
    "cloud_provider": "AWS",
    "region": "us-west-2",
    "config": {
      "root_password": "StrongPassw0rd!",
      "ip_access_list": [
        {
          "cidr": "0.0.0.0/0",
          "description": "Allow access from anywhere"
        }
      ]
    }
  }'

無事Clusterが作成されました。

レスポンスとしてClusterのIDが戻っています。

{"id":"10659925523860644884"}

4.Clusterの削除

では最後にClusterの削除を行います。

curl --digest \
  --user "$TIDB_CLOUD_PUBLIC_KEY:$TIDB_CLOUD_PRIVATE_KEY" \
  --request DELETE \
  --url "https://api.tidbcloud.com/api/v1beta/projects/$PROJECT_ID/clusters/$CLUSTER_ID"

<$CLUSTER_ID>は先ほどレスポンスで出力されたCluster IDに置き換えてください。
コンソールから見ると先ほど作成されたClusterが消えています。

最後に

Starterですと機能が限定されていますが、先日操作可能となったEssentialであればバックアップやリストア、データインポートエクスポートなどがサポートされているようですのでまた試したいと思います。

Discussion