Slide 1

Slide 1 text

TiDB Cloud APIと Terraform TiDB Cloud Providerの紹介 本多康夫 Technical support engineer at PingCAP Japan

Slide 2

Slide 2 text

これまでのウェビナースケジュール 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/

Slide 3

Slide 3 text

次回以降のウェビナースケジュール https://pingcap.co.jp/event/ 
 
 2024年3月28日(木) 14:00 - 15:00 TiProxyの紹介

Slide 4

Slide 4 text

アジェンダ ● 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, アンケートのお願い ● お知らせ

Slide 5

Slide 5 text

TiDB Cloudの プロジェクト/クラスタの階層構造

Slide 6

Slide 6 text

● 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 を参照ください プロジェクト/クラスタの階層構造(前提条件)

Slide 7

Slide 7 text

TiDB Cloud API/Terraform TiDB Cloud Providerが求められる背景

Slide 8

Slide 8 text

● ユーザー名とパスワード、または Google, GitHub, MicrosoftアカウントによるSSO ● ウェブブラウザによる手動操作 TiDB Cloudコンソールの認証と操作

Slide 9

Slide 9 text

● 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 の必要性

Slide 10

Slide 10 text

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は異なるものです

Slide 11

Slide 11 text

TiDB Cloud APIとは

Slide 12

Slide 12 text

TiDB Cloud APIとは ● TiDB Cloudコンソール操作用のREST API ○ 手続き型 - GET, POSTメソッド ● TiDB Cloud APIで可能な主な操作のカテゴリ ○ Project (プロジェクト) ■ プロジェクトの作成 ■ 利用可能なプロジェクトの表示 ○ Cluster ■ 利用可能なクラウドプロバイダー、リージョン、 ■ プロジェクト内の利用可能なクラスタの表示 ○ Backup ■ 手動バックアップの作成 ○ Import ■ データのimport ○ Restore ■ バックアップから新規クラスタへのリストア ● なお、TiDB Cloud APIバージョンはベータ版(v1beta)となっており、予告なく変更される可能性があります

Slide 13

Slide 13 text

TiDB Cloud APIとは ● TiDB Cloud APIのリファレンスは下記で提供されています ○ https://docs.pingcap.com/tidbcloud/api/v1beta ● TiDB Cloud APIバージョンはベータ版 (v1beta)で、予告なく変更される可能性があります

Slide 14

Slide 14 text

TiDB Cloud APIとは ● MSP(Managed Service Provider)向けのAPIを追加しています ○ MSPからPingCAPへの請求 ○ MSPからMSPのエンドユーザーへの請求 ● https://docs.pingcap.com/tidbcloud/api/msp/v1beta1 ○ Billing ■ MSP単位での請求 ○ Account ■ MSPエンドユーザー

Slide 15

Slide 15 text

TiDB Cloud Terraform Providerとは

Slide 16

Slide 16 text

TiDB Cloud Terraform Providerとは ● Terraform ○ HashiCorp社が提供するクラウドインフラストラクチャのプロビジョニングツール ○ 宣言型 - 「望ましい状態」を保とうとする ● Terraform Provider ○ プロバイダ(TiDB Cloud)とTerraformを接続するコンポーネント ● TiDB Cloud Terraform Providerを構成する2つの要素 ○ Resources (リソース) ■ 管理対象 (例: TiDB Cloudのクラスタ、バックアップ ) ○ Data Sources (データソース) ■ 読み取り専用

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

TiDB Cloud Terraform Providerとは ● TiDB Cloud Terraform Providerのリファレンスは下記で提供されています ○ https://registry.terraform.io/providers/tidbcloud/tidbcloud/latest/docs

Slide 19

Slide 19 text

TiDB Cloud APIを使用した TiDBクラスタ管理例

Slide 20

Slide 20 text

API Keyの作成方法 ● TiDB Cloudコンソールに “Organization Owner” ロールを持つユーザーでサインインします ● 画面左下の Organization → Organization Settings → API Keysに遷移します Organization Account Project

Slide 21

Slide 21 text

API Keyの作成方法(続) ● TiDB Cloudコンソール右上の Create API Key ボタンをクリックします ● DescriptionにKeyの説明を追加し、Nextをクリックします ● Public KeyとPrivate Keyの値を確認して Done をクリックします ○ Public Keyの値は後から確認できます ○ Private Keyの値は、Done をクリックした後は確認できません ○ Private Keyを紛失した場合は、API Keyを削除して、再作成してください

Slide 22

Slide 22 text

TiDB Cloud API ● 必要なツール ○ curl ■ または任意のRESTクライアント ○ jq ■ 戻り値のJSONフォーマットのため(任意) ● TiDB Cloudアカウント ○ Organization OwnerでAPI Keyを作成するために必要 ● TiDB Cloud API Key ○ Organization Ownerで発行されたAPI Key

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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":[]}%

Slide 27

Slide 27 text

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も存在しません

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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 }, …中略... } } },

Slide 30

Slide 30 text

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 }

Slide 31

Slide 31 text

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": "******************** " }

Slide 32

Slide 32 text

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” が表示されないことで す

Slide 33

Slide 33 text

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となります { }

Slide 34

Slide 34 text

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." }

Slide 35

Slide 35 text

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",

Slide 36

Slide 36 text

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"

Slide 37

Slide 37 text

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": "*******************" }

Slide 38

Slide 38 text

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 }

Slide 39

Slide 39 text

Terraform TiDB Cloud Providerを用いたTiDB クラスタ管理例

Slide 40

Slide 40 text

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/ へのインターネットアクセス

Slide 41

Slide 41 text

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 = "*******************" }

Slide 42

Slide 42 text

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!

Slide 43

Slide 43 text

TiDB Cloud Terraform Provider - プロジェクトの表示 ● main.tf ファイルに下記を追記します ○ tidbcloud_projectsデータソース(読み取り専用)を利用します ○ example_project という名称は任意です data "tidbcloud_projects " "example_project" { } output "projects" { value = data.tidbcloud_projects.example_project.items }

Slide 44

Slide 44 text

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ではプロジェクトの作成はできません

Slide 45

Slide 45 text

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 }

Slide 46

Slide 46 text

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" } }, ])

Slide 47

Slide 47 text

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と同様

Slide 48

Slide 48 text

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. ● クラスタが作成されます

Slide 49

Slide 49 text

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.

Slide 50

Slide 50 text

Q&A

Slide 51

Slide 51 text

Thank You!
 https://www.pingcap.com/
 [email protected]