0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

TiDB CloudのServerless Driverを試してみる

Last updated at Posted at 2023-09-26

Serverless Driverとは

TiDB CloudのServerless Driverは、通常MySQLプロトコルで接続ができないEdge FunctionからHTTPSでTiDB Serverlessに接続するためのドライバです。

9月19日にひっそりとBetaで公開されました。

従来はData proxyなどを経由したり、APIを作ったりする必要があったかと思いますが、これで直接利用できることになり、開発がサクサク進むことが期待されます。

公式ドキュメント、リポジトリなど

デモではよくある分析ダッシュボードのバックエンドをVercel, Cloudflare, Netlifyのそれぞれで動かし、TiDB Serverlessに直接接続しています。実際の利用例はこちらを参照すると良いと思います。

自動車販売ダッシュボード

最小セットで試す

公式ドキュメントにある、こちらのソースコードと同等のものをローカル環境でさっくり試してみることにします。

import { connect } from '@tidbcloud/serverless'

const conn = connect({url: 'mysql://username:password@host/database'})
const results = await conn.execute('select * from test where id = ?',[1])
console.log(results)

1. TiDB Serverlessで適当なクラスタを立ち上げて接続文字列を取得

TiDB CloudのコンソールからServerlessクラスタを起動し、connectボタンを押してパスワードを設定します。接続文字列はSQL Alchemyの形式なので、connect withメニューでSQL Alchemyを選択すると簡単です。デフォルトでTLS接続をするようなので ?ssl_ca= から先は不要です。

スクリーンショット 2023-09-26 8.14.53.png

この例だとtestというデータベースに接続しています。クラスタを作成すると自動で作られているはずです。

2. 適当なテーブルを作成

適当なtestテーブルを作成します。TiDB CloudのChat2QueryメニューからSQLエディタでDDLを流します。

USE test;
CREATE TABLE test (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(20) NOT NULL
);
INSERT INTO test (name) VALUES ('Taro Yamada'),('Hanako Suzuki'),('Jiro Tanaka');

3. サンプルソースを準備

適当なディレクトリを作成して、下記を実行します。
その後、公式のサンプルコードの接続文字列を変更して serverless.ts という名前で保存しています。

% npm init
% npm install typescript
% npm install "@tidbcloud/serverless"
% ls 
node_modules		package-lock.json	package.json		serverless.ts

4. トランスパイルと実行(注意)

ここでちょっとハマったのですが、TiDB Serverless DriverはES moduleなので、nodejsで実行する際に type: module の指定が必要でした。 package.json を書き換えます。

{
+ "type":"module",
  "dependencies": {
    "@tidbcloud/serverless": "^0.0.5",
    "typescript": "^5.2.2"
  }
}

あとは、tscでトランスパイルして、実行するだけです。tscを使う際のオプションもES Module対応にする必要があります。この辺はNext.jsやパッケージマネージャーはよろしくやってくれるようですね。

% tsc -t es2020 -m esnext --moduleResolution node serverless.ts
% node serverless.js

5. 実行結果

%  node serverless.js
[ { id: 1, name: 'Taro Yamada' } ]

無事、出力されました。

型安全なSQL

ただこのままだとSQLを直書きしないといけないです。せっかくtypescriptを使っているので型安全にSQLを作りたい... という人はKyselyアダプタを作っているようなので是非試して見ると良いと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?