Upgrade to Pro — share decks privately, control downloads, hide ads and more …

TiDB Cloud APIとTerraform TiDB Cloud Providerの紹介

TiDB Cloud APIとTerraform TiDB Cloud Providerの紹介

ウェビナー開催日:2024年2月29日

本スライドでは、TiDB Cloud APIとTerraform TiDB Cloud Providerについて紹介します。TiDB Cloudはウェブブラウザ経由で利用するTiDB Cloudコンソールを用いて、簡単にTiDB Clusterの作成や管理を行うことができますが、TiDB Cloud APIやTerraform TiDB Cloud Providerを用いることで、利用するTiDB Cloudをコードとして管理することも可能です。また、TiDB Cloud APIで追加された請求書やマネージドサービスプロバイダー向けの新しいAPIも紹介いたします。

トピック
・TiDB Cloud APIが提供するAPIの紹介
・Terraform TiDB Cloud Providerの紹介
・Terraform TiDB Cloud Providerを用いたTiDB Dedicated、TiDB Serverlessクラスタの作成デモ

アーカイブ動画:
https://youtu.be/qMLaeOD80Qo

PingCAP-Japan

March 01, 2024
Tweet

More Decks by PingCAP-Japan

Other Decks in Technology

Transcript

  1. これまでのウェビナースケジュール https://pingcap.co.jp/event/ 
 
 2023年4月13日(木) 14:00 - 15:00 TiDBにおけるSQLチューニング SQL bindingのご紹介

    2023年5月18日(木) 14:00 - 15:00 TiDB 7.0 DMR新機能の紹介 2023年6月15日(木) 14:00 - 15:00 【TiDB Serverless GA直前】TiDB新章。Serverless + Data API + AIによる新 たな活用 2023年7月27日(木) 14:00-15:00 TiDB Cloud最新状況の紹介 2023年9月14日(木) 14:00-15:00 TiDBとMySQLの互換性改善アップデート 2023年11月1日(木) 14:00-15:00 TiDB Operatorの紹介 2023年12月21日(木) 14:00-15:00 TiDB 7.4:MySQL 8.0互換性対応の紹介 2024年1月25日(木) 14:00-15:00 TiDB 7.5 LTS新機能の紹介 2024年2月29日(木) 14:00 - 15:00 TiDB Cloud APIとTerraform TiDB Cloud Providerの紹介 ※過去開催アーカイブ:https://pingcap.co.jp/event-video/
  2. アジェンダ • TiDB Cloudのプロジェクト/クラスタの階層構造 • TiDB Cloud API/Terraform TiDB Cloud

    Providerが求められる背景 • TiDB Cloud APIとは • Terraform TiDB Cloud Providerとは • TiDB Cloud APIを使用したTiDBクラスタ管理例 • Terraform TiDB Cloud Providerを用いたTiDBクラスタ管理例 • Q&A, アンケートのお願い • お知らせ
  3. • TiDB Cloudのユーザー、クラスタは以下の階層構造で管理されています ◦ Organization (組織) ▪ 契約、支払いの単位 ▪ Organization単位のユーザー、ロールが存在します

    ◦ Project (プロジェクト) ▪ 1つのOrganizationに複数のProjectを作成可能です ▪ Project単位のユーザー、ロールが存在します ◦ Cluster (クラスタ) ▪ TiDBクラスタはいずれかの Projectに所属します • API操作は、Organizationの”Organization Owner”ロールを持つユーザーのみが可能な操作です • TiDB Cloudのユーザー、ロールは TiDB クラスタ(データベース)のユーザー管理とは独立しています • 詳細は https://docs.pingcap.com/tidbcloud/manage-user-access を参照ください プロジェクト/クラスタの階層構造(前提条件)
  4. • TiDB Cloudコンソールによる操作 ◦ 試行錯誤が容易 ◦ 手動操作が記録に残らない * ▪ *

    TiDB Cloudコンソール監査ログ機能もあります • https://docs.pingcap.com/tidbcloud/tidb-cloud-console-auditing ◦ 手動操作の再現性に乏しい • Infrastructure as Codeの考え方 ◦ インフラストラクチャーを手動ではなく、コードで定義する ◦ ソースコード管理でインフラストラクチャー履歴管理が可能になります ◦ TiDB Cloud API と Terraform TiDB Cloud Provider TiDB Cloud API の必要性
  5. API Keyによる認証 • TiDB Cloudコンソール ◦ ユーザー名(メールアドレス)とパスワードによる認証 • TiDB Cloud

    API / Terraform TiDB Cloud Provider ◦ API Keyによるダイジェスト認証 ▪ Public Key ▪ Private Key ◦ API Key自体はTiDB Cloudコンソールより手動操作で作成が必要 • Note: TiDB Cloud API用のAPI KeyとData Service用のData API Keyは異なるものです
  6. TiDB Cloud APIとは • TiDB Cloudコンソール操作用のREST API ◦ 手続き型 -

    GET, POSTメソッド • TiDB Cloud APIで可能な主な操作のカテゴリ ◦ Project (プロジェクト) ▪ プロジェクトの作成 ▪ 利用可能なプロジェクトの表示 ◦ Cluster ▪ 利用可能なクラウドプロバイダー、リージョン、 ▪ プロジェクト内の利用可能なクラスタの表示 ◦ Backup ▪ 手動バックアップの作成 ◦ Import ▪ データのimport ◦ Restore ▪ バックアップから新規クラスタへのリストア • なお、TiDB Cloud APIバージョンはベータ版(v1beta)となっており、予告なく変更される可能性があります
  7. TiDB Cloud APIとは • TiDB Cloud APIのリファレンスは下記で提供されています ◦ https://docs.pingcap.com/tidbcloud/api/v1beta •

    TiDB Cloud APIバージョンはベータ版 (v1beta)で、予告なく変更される可能性があります
  8. TiDB Cloud APIとは • MSP(Managed Service Provider)向けのAPIを追加しています ◦ MSPからPingCAPへの請求 ◦

    MSPからMSPのエンドユーザーへの請求 • https://docs.pingcap.com/tidbcloud/api/msp/v1beta1 ◦ Billing ▪ MSP単位での請求 ◦ Account ▪ MSPエンドユーザー
  9. TiDB Cloud Terraform Providerとは • Terraform ◦ HashiCorp社が提供するクラウドインフラストラクチャのプロビジョニングツール ◦ 宣言型

    - 「望ましい状態」を保とうとする • Terraform Provider ◦ プロバイダ(TiDB Cloud)とTerraformを接続するコンポーネント • TiDB Cloud Terraform Providerを構成する2つの要素 ◦ Resources (リソース) ▪ 管理対象 (例: TiDB Cloudのクラスタ、バックアップ ) ◦ Data Sources (データソース) ▪ 読み取り専用
  10. TiDB Cloud Terraform Providerとは • Resources (リソース) ◦ 管理対象 (例:

    TiDB Cloudのクラスタ、バックアップ ) ◦ TiDB Cloud APIのPOST/DELETEメソッドに相当(べき等性に関する差異あり ) ◦ tidbcloud_cluster ◦ tidbcloud_backup ◦ tidbcloud_restore ◦ tidbcloud_import • Data Sources (データソース) ◦ 読み取り専用で、現在の状況 (TiDB Cloud APIのGETメソッドに相当) ◦ tidbcloud_projects ◦ tidbcloud_cluster_specs ◦ tidbcloud_clusters ◦ tidbcloud_restores ◦ tidbcloud_backups
  11. API Keyの作成方法(続) • TiDB Cloudコンソール右上の Create API Key ボタンをクリックします •

    DescriptionにKeyの説明を追加し、Nextをクリックします • Public KeyとPrivate Keyの値を確認して Done をクリックします ◦ Public Keyの値は後から確認できます ◦ Private Keyの値は、Done をクリックした後は確認できません ◦ Private Keyを紛失した場合は、API Keyを削除して、再作成してください
  12. TiDB Cloud API • 必要なツール ◦ curl ▪ または任意のRESTクライアント ◦

    jq ▪ 戻り値のJSONフォーマットのため(任意) • TiDB Cloudアカウント ◦ Organization OwnerでAPI Keyを作成するために必要 • TiDB Cloud API Key ◦ Organization Ownerで発行されたAPI Key
  13. TiDB Cloud API - 環境変数の設定 • 環境変数の設定 % export TIDBCLOUD_PUBLIC_KEY

    ="******" % export TIDBCLOUD_PRIVATE_KEY ="*******************" ◦ TiDB Cloudコンソールで作成した Public, Private keyをそれぞれ設定します ◦ TiDB Cloud APIでの環境変数名は任意です ▪ TiDB Cloud Terraform Provider での命名規則と合わせています ◦ 値はダブルクォート(")で囲んでください
  14. TiDB Cloud API - レートリミット • TiDB Cloud APIにはレートリミットが設定されています ◦

    API Keyあたり100リクエスト/分 • 現在のレートリミット状況はレスポンスヘッダーに含まれます ◦ x-ratelimit-limit-minute: 分あたりのAPIリクエスト数上限 ◦ x-ratelimit-reset: 現在のレートリミットがリセットされるまでの残り秒数 ◦ x-ratelimit-remaining-minutes: 現在利用可能なAPIリクエスト数 • レートリミット確認方法 ◦ curlの--verbose または –head オプションでレスポンスヘッダーを確認できます % curl --head --silent --digest \ --user ${TIDBCLOUD_PUBLIC_KEY}:${TIDBCLOUD_PRIVATE_KEY} \ --request GET \ --url https://iam.tidbapi.com/v1beta1/apikeys … 中略 … x-ratelimit-limit-minute: 100 x-ratelimit-reset: 56 x-ratelimit-remaining-minute: 99
  15. TiDB Cloud API - プロジェクトの表示 • プロジェクトの表示 % curl --silent

    --digest \ --user ${TIDBCLOUD_PUBLIC_KEY}:${TIDBCLOUD_PRIVATE_KEY} \ --request GET \ --url https://api.tidbcloud.com/api/v1beta/projects | jq … 中略 … { "items": [ { "id": "*******************", "org_id": "*******************", "name": "default project", "cluster_count": 2, "user_count": 1, "create_timestamp": "1640070065", "aws_cmek_enabled": false } ], "total": 1 } • create_timeスタンプはUnix epoch(1970年1月1日 00:00:00 UTC空の秒数) % date -r 1640070065 Tue Dec 21 16:01:05 JST 2021
  16. TiDB Cloud API - プロジェクトの作成 • プロジェクトの作成 --header 、--data にプロジェクト名

    (“name”)を設定し、POSTリクエストを送信します % curl --silent --digest \ --user ${TIDBCLOUD_PUBLIC_KEY}:${TIDBCLOUD_PRIVATE_KEY} \ --request POST \ --url https://api.tidbcloud.com/api/v1beta/projects \ --header 'content-type: application/json' \ --data '{"name":"new project"}' • 戻り値はプロジェクト id(数値、ただし型は文字列 )です {"id":"*******************"} • TiDB Serverlessでfree trial中(クレジットカードを登録していない場合 )は、作成できるプロジェクト数は 1 つのため、新規プロジェクト追加ができません {"code":49900001, "message":" free trial users are only allowed to own one project", "details":[]}%
  17. TiDB Cloud API - プロジェクトの作成(続) • 新規に作成されたプロジェクトも一覧に取得されます % curl --silent

    --digest \ --user ${TIDBCLOUD_PUBLIC_KEY}:${TIDBCLOUD_PRIVATE_KEY} \ --request GET \ --url https://api.tidbcloud.com/api/v1beta/projects | jq { "items": [ { "id": "*******************", "org_id": "*******************”, "name": "new project", "cluster_count": 0, "user_count": 1, "create_timestamp": "1709011270", "aws_cmek_enabled": false }, …中略... ], "total": 2 } • Note: TiDB Cloudではプロジェクトを削除できないため、同様に TiDB Cloud APIにプロジェクトを削除する APIも存在しません
  18. TiDB Cloud API - プロジェクト内全クラスタの表示 • プロジェクトに含まれるクラスタ表示 ◦ TiDB Cloudでは、Organization

    > Project > Cluster(クラスタ)の階層構造となるため、クラスタの表 示にはクラスタが作成された Projectの指定が必須となります ◦ Projectは前述の「プロジェクトの表示」 APIの戻り値から"id"を数値で指定します % curl --silent --digest \ --user ${TIDBCLOUD_PUBLIC_KEY}:${TIDBCLOUD_PRIVATE_KEY} \ --request GET \ --url 'https://api.tidbcloud.com/api/v1beta/ projects/${project_id}/clusters ?page=1 &page_size=10' | jq
  19. TiDB Cloud API - プロジェクト内全クラスタの表示(続) • TiDB Cloud Serverless Tierの

    “cluster type”は “DEVELOPER” として表示されます • TiDB Serverless TierはAWSでのみ作成が可能です { "items": [ { "id": "*******************", "project_id": "*******************", "name": "Cluster0", "cluster_type": "DEVELOPER", "cloud_provider": "AWS", "region": "ap-northeast-1", "create_timestamp": "1709012272", "config": { "port": 4000, "components": { "tidb": { "node_size": "Shared0", "node_quantity": 1 }, …中略... } } },
  20. TiDB Cloud API - プロジェクト内全クラスタの表示(続) • TiDB Cloud Serverless で利用いただけるTiDB

    Cloudのバージョンは7.1.1です • “connection strings”から、ユーザー名(default_user)とエンドポイント(hostとport)が表示されます "status": { "tidb_version": "v7.1.1", "cluster_status": "AVAILABLE", …中略.. "connection_strings": { "default_user": "***.root", "standard": { "host": "***.aws.tidbcloud.com", "port": 4000 }, …中略... } } } } ], "total": 1 }
  21. TiDB Cloud API - クラスタの作成 • クラスタの作成 --header 、--data にクラスタ設定

    (“name”, “cluster_type”など)を設定し、POSTリクエストを送信します % curl --silent --digest \ --user ${TIDBCLOUD_PUBLIC_KEY}:${TIDBCLOUD_PRIVATE_KEY} \ --request POST \ --url https://api.tidbcloud.com/ api/v1beta/projects/${project_id}/clusters \ --header 'content-type: application/json' \ --data '{"name":"Cluster1","cluster_type":"DEVELOPER","cloud_provider":"AWS","region":"ap-northeast -1","config":{"root_password":"**********","ip_access_list":[{"cidr":"8.8.8.8/32","descripti on":"My IP Address"}]}}' | jq • 戻り値 “id”はクラスタIDとなります { "id": "******************** " }
  22. TiDB Cloud API - 個別クラスタの表示 • プロジェクトに含まれるクラスタ表示 ◦ TiDB Cloudでは、Organization

    > Project > Cluster(クラスタ)の階層構造となるため、個別クラスタ の表示にはクラスタが作成された ProjectとClusterの指定が必須となります ◦ clusterは前述の「クラスタの作成」 APIの戻り値から"id"を数値で指定します % curl --silent --digest \ --user ${TIDBCLOUD_PUBLIC_KEY}:${TIDBCLOUD_PRIVATE_KEY} \ --request GET \ --url https://api.tidbcloud.com/api/v1beta/projects/${project_id}/clusters/${clust er_id} | jq ◦ 戻り値は、「プロジェクト内全クラスタの表示」と類似しており、違いは “total” が表示されないことで す
  23. TiDB Cloud API - クラスタの削除 • クラスタの削除 ◦ 削除するクラスタをプロジェクトID,クラスタIDで指定します ◦

    DELETEメソッドを指定します % curl --silent --digest \ --user ${TIDBCLOUD_PUBLIC_KEY}:${TIDBCLOUD_PRIVATE_KEY} \ --request DELETE \ --url https://api.tidbcloud.com/api/v1beta/projects/${project_id}/clusters/${cluster_id } | jq • 戻り値は空のJSONとなります { }
  24. TiDB Cloud API - 請求情報 • 月あたりの請求情報 ◦ 月は YYYY-MM

    形式で指定します % curl --silent --digest \ --user ${TIDBCLOUD_PUBLIC_KEY}:${TIDBCLOUD_PRIVATE_KEY} \ --request GET \ --url https:// billing.tidbapi.com /v1beta1/bills/ 2024-01 | jq • 戻り値 ◦ 組織単位での請求情報全体、プロジェクト毎の内訳 ◦ サービス(TiDB Dedicated, Node Storage(TiKV/TiFlash), Node Compute(TiDB/TiKV/TiFlash)毎の内訳 • 検索対象は現在から6ヶ月前までです { "code": "InvalidInputError", "error": "Invalid Input Error: Param billedMonth is invalid. You can query a bill up to 6 months prior to the current month. ", "message": "Invalid Input Error: Param billedMonth is invalid. You can query a bill up to 6 months prior to the current month." }
  25. TiDB Cloud API - クラスタのバックアップ取得 • バックアップの取得 ◦ TiDB ServerlessではTiDB

    Cloud APIを利用したバックアップの作成はできません ◦ TiDB Dedicatedのみで可能な操作です ◦ 本APIを利用して作成されるバックアップはmanual backupです % curl --silent --digest \ --user ${TIDBCLOUD_PUBLIC_KEY}:${TIDBCLOUD_PRIVATE_KEY} \ --request POST \ --url https://api.tidbcloud.com/api/v1beta/projects/${project_id}/clusters/${cluster_id}/backups \ --header 'content-type: application/json' \ --data '{"name":"backup-1","description":"backup-1"}' | jq • バックアップがスケジュールされた時点(PENDING)でAPIが戻り値はバックアップidとなります { "id": "*******" } • Note: バックアップ実施中(Pending)の追加での手動バックアップはできません "message": " Another backup is running for cluster id **************, please try later",
  26. TiDB Cloud API - クラスタのバックアップ表示 • バックアップの表示 ◦ バックアップ作成で得られたidを使用します ◦

    TiDB ServerlessではTiDB Cloud APIを利用したバックアップの表示はできません ◦ TiDB Dedicatedのみで可能な操作です % curl --silent --digest \ --user ${TIDBCLOUD_PUBLIC_KEY}:${TIDBCLOUD_PRIVATE_KEY} \ --request GET \ --url https://api.tidbcloud.com/api/v1beta/projects/${project_id}/clusters/${cluster_id}/ backups/${backup_id} | jq • 戻り値はバックアップの状態となります { "id": "*******", "name": "backup-1", "description": "", "type": "MANUAL", "create_timestamp": "2024-02-28T05:41:14Z", "size": "423384", "status": "SUCCESS" } • バックアップがスケジュールされた時点でのstatusはPENDINGとなります "status": "PENDING"
  27. TiDB Cloud API - クラスタのリストア • クラスタのリストア ◦ TiDB ServerlessではTiDB

    Cloud APIを利用したクラスタのリストアはできません ◦ TiDB Dedicatedのみで可能な操作です ◦ リストアは新規TiDB Dedicatedクラスタに対して実施されます % curl --silent --digest \ --user ${TIDBCLOUD_PUBLIC_KEY}:${TIDBCLOUD_PRIVATE_KEY} \ --request POST \ --url https://api.tidbcloud.com/api/v1beta/projects/${project_id}/ restores \ --header 'content-type: application/json' \ --data '{"backup_id":"*******","name":"yahonda-Cluster1","config":{"root_password":"****","port":40 00,"components":{"tidb":{"node_size":"8C16G","node_quantity":2},"tikv":{"node_size":"8C32G", "storage_size_gib":500,"node_quantity":3}},"ip_access_list":[{"cidr":"8.8.8.8/32","descripti on":"My Current IP Address"}]}}' | jq • リストアがスケジュールされた時点(PENDING)でAPIが戻り値はリストアidとcluster idとなります { "id": "*******", "cluster_id": "*******************" }
  28. TiDB Cloud API - リストアの表示 • クラスタのリストアの表示 ◦ TiDB ServerlessではTiDB

    Cloud APIを利用したクラスタのリストアはできません ◦ TiDB Dedicatedのみで可能な操作です % curl --silent --digest \ --user ${TIDBCLOUD_PUBLIC_KEY}:${TIDBCLOUD_PRIVATE_KEY} \ --request GET \ --url 'https://api.tidbcloud.com/api/v1beta/projects/${project_id}/ restores?page=1&page_size=10' | jq • 戻り値 ◦ “cluster_id”はバックアップを取得したクラスタ ID ◦ “cluster” > “id”はリストアにより新規に作成されるクラスタ ID { "items": [ { "id": "*******", "create_timestamp": "2024-02-28T05:57:43Z", "backup_id": "*******", "cluster_id": "*******************", "status": "PENDING", "cluster": { "id": "*******************", "name": "yahonda-Cluster1", "status": "PREPARING" }, "error_message": "" } ], "total": 1 }
  29. TiDB Cloud Terraform Provider • TiDB Cloudアカウント ◦ Organization Owner

    • TiDB Cloud API Key • 必要なツール ◦ Terraform 1.0以上のインストール ▪ https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli ◦ Terraform Registry https://registry.terraform.io/ へのインターネットアクセス
  30. TiDB Cloud Terraform Provider - 環境変数の設定 • 環境変数の設定 % export

    TIDBCLOUD_PUBLIC_KEY ="******" % export TIDBCLOUD_PRIVATE_KEY ="*******************" ◦ TiDB Cloudコンソールで作成した Public, Private keyをそれぞれ設定します ◦ TiDB Cloud TerraTiDB Providerでの環境変数は上記である必要があります ▪ TiDB Cloud APIでは任意の環境変数名でした ◦ 値はダブルクォート(")で囲んでください • Public Private keyは.tfファイルに下記のように記入することも可能です provider "tidbcloud" { public_key = "******" private_key = "*******************" }
  31. TiDB Cloud Terraform Provider - 初期化 • main.tfファイルの作成 ◦ required_providersに

    TiDB Cloud Terraform Providerを記述します terraform { required_providers { tidbcloud = { source = "tidbcloud/tidbcloud" } } } • main.tfファイルの作成と初期化 ◦ TiDB Cloud Terraform Providerの最新バージョン (現時点では0.2.3)がインストールされます % terraform init Initializing the backend... Initializing provider plugins... - Finding latest version of tidbcloud/tidbcloud... - Installing tidbcloud/tidbcloud v0.2.3... - Installed tidbcloud/tidbcloud v0.2.3 (signed by a HashiCorp partner, key ID D0766C6E2278002F) … 中略... Terraform has been successfully initialized!
  32. TiDB Cloud Terraform Provider - プロジェクトの表示 • main.tf ファイルに下記を追記します ◦

    tidbcloud_projectsデータソース(読み取り専用)を利用します ◦ example_project という名称は任意です data "tidbcloud_projects " "example_project" { } output "projects" { value = data.tidbcloud_projects.example_project.items }
  33. TiDB Cloud Terraform Provider - プロジェクトの表示 • terraform apply –auto-approve

    ◦ outputに指定した内容が出力されます ◦ 内容は「TiDB Cloud API - プロジェクトの表示」と類似しています % terraform apply --auto-approve Apply complete! Resources: 0 added, 0 changed, 0 destroyed. Outputs: projects = tolist([ { "cluster_count" = 0 "create_timestamp" = "1709011270" "id" = "*******************" "name" = "new project" "org_id" = "*******************" "user_count" = 1 }, … 中略..., ]) • TiDB Cloud Terraform Providerではプロジェクトの作成はできません
  34. TiDB Cloud Terraform Provider - プロジェクト内全クラスタ の表示 • main.tf ファイルに下記を追記します

    ◦ tidbcloud_clustersデータソース(読み取り専用)を利用します ◦ example_cluster という名称は任意です data "tidbcloud_clusters" "example_cluster" { project_id = "*******************" } output "output" { value = data.tidbcloud_clusters.example_cluster.items }
  35. TiDB Cloud Terraform Provider - プロジェクト内全クラスタ の表示 • terraform apply

    –auto-approve ◦ 内容は「TiDB Cloud API - ププロジェクト内全クラスタの表示」と類似しています % terraform apply -auto-approve … Outputs: output = tolist([ { "cloud_provider" = "AWS" "cluster_type" = "DEVELOPER" "config" = { … 中略... } "create_timestamp" = "1709012272" "id" = "*******************" "name" = "Cluster0" "project_id" = "*******************" "region" = "ap-northeast-1" "status" = { "cluster_status" = "AVAILABLE" "connection_strings" = { "default_user" = "*****.root" "standard" = { "host" = "****.aws.tidbcloud.com" "port" = 4000 } … 中略... } "tidb_version" = "v7.1.1" } }, ])
  36. TiDB Cloud Terraform Provider - クラスタの作成 • main.tf ファイルに下記を追記します ◦

    TiDB Cloud Serverlessクラスタを作成します ◦ tidbcloud_clusterリソースを利用します (単数) ◦ serverless_tier_cluster という名称は任意です resource tidbcloud_cluster serverless_tier_cluster { project_id = ******************* name = "Cluster2" cluster_type = "DEVELOPER" cloud_provider = "AWS" region = "ap-northeast-1" config = { root_password = "****" } } ◦ project_id の指定は必須です ▪ tidbcloud_projectsデータソースから取得された idを指定します ◦ cluster_type は”DEVELOPER”を指定します ▪ TiDB Cloud APIと同様
  37. TiDB Cloud Terraform Provider - クラスタの作成 • terraform apply –auto-approve

    % terraform apply -auto-approve # tidbcloud_cluster.serverless_tier_cluster will be created + resource "tidbcloud_cluster" "serverless_tier_cluster" { + cloud_provider = "AWS" + cluster_type = "DEVELOPER" + config = { + components = (known after apply) + port = (known after apply) + root_password = "root_password" } + create_timestamp = (known after apply) + id = (known after apply) + name = "Cluster2" + project_id = "*******************" + region = "ap-northeast-1" + status = (known after apply) } Plan: 1 to add, 0 to change, 0 to destroy. tidbcloud_cluster.serverless_tier_cluster: Creating... tidbcloud_cluster.serverless_tier_cluster: Creation complete after 2s [id=*******************] Apply complete! Resources: 1 added, 0 changed, 0 destroyed. • クラスタが作成されます
  38. TiDB Cloud APIとTiDB Cloud Terraform Providerの差 • TiDB Cloud APIとTiDB

    Cloud Terraform Providerの違い ◦ TiDB Cloud API - 手続き型 ◦ TiDB Cloud Terraform Provider - 宣言型 • 例: 同じクラスタ作成を2回実行しようとした場合 ◦ TiDB Cloud API / Duplicate displayName(名称の重複)というエラーが返る { "code": 49900005, "message": "Duplicate displayName. The cluster display name must be unique in a project.", "details": [] } ◦ TiDB Cloud Terraform Provider / べき等性が保たれる % terraform apply -auto-approve tidbcloud_cluster.serverless_tier_cluster: Refreshing state... [id=*******************] No changes. Your infrastructure matches the configuration. Terraform has compared your real infrastructure against your configuration and found no differences, so no changes are needed. Apply complete! Resources: 0 added, 0 changed, 0 destroyed.
  39. Q&A