🐟

TiDB Cloud Data ServiceをAWSで使うことを想定して試してみた

2024/02/21に公開

TiDB Cloud Data Serviceとは

(SQLでビジネスロジックかけるなら)プログラム実装せずに、APIつくれちゃう!すごい!

と認識しました。ざっくり一言でまとめるならですが。
これを試しつつ、実際にアプリに組み込むとしたらどうすればよいかな?と考えてみました。

Data Serviceつくってみる

さっそく作っていきます。Create Data Appを押します。自分が作成したクラスターをLink Data Sourceに設定してCreateします。今回はためしませんでしたが、GitHubとの連携機能がついています。

できたNew AppをクリックするとBase URLが発行されています。これにメソッドを増やしていくことになります。

プラスボタンからAutogenarate Endpointを押しましょう。ある程度のメソッドをテーブルから作ってくれる便利機能です。空から作りたい場合は、Create Endpointを押しましょう。

自分のクラスター、データベース、テーブルを指定して自動作成したいメソッドを選択します。Auto-Deploy EndpointはONにしておくと作成と同時にデプロイが行われます。

4つのメソッドが自動生成されています。簡単・・・

お試し出来るUIがついています。すぐにGETが動作させることができました。
API GatewayやLambdaとにた感覚でSQLなど修正したらデプロイボタンで反映という具合になっています。

こちらはPOSTです。プライマリーキーを指定するように生成されていますが、テーブル作成時にデフォルトでUUIDをセットするようにCREATE TABLEしていたため、SQLから外すカスタマイズをするとBODYのパラメータが減りました。簡単ですね。また、右をみると必須チェックのバリデーションはついていますね。複雑なマッチングはみあたりませんが、いつか正規表現がついたりしたら嬉しいですね。

外部から実行する場合はAPIキーが必要です。Create API Keyを押して発行しましょう。

Late Limit(1-1000) や キーの期限などが指定できます。RoleはReadAndWriteにすることがポイントです。

Postmanから実行してみる

外部のAPI実行ツールから実行してみましょう。今回はPostmanを選択しました。
APIキーをダイジェスト認証で設定すると、動作することが確認できました。

Google Colaboratoryから実行してみる

Pythonのrequestsメソッドをつかってダイジェスト認証のAPIを実行することができました。
これは、「もしプログラムから呼ぶとするなら」の一例です。
例えばLambdaに組み込むと動くとイメージできたと思います。

import requests
from requests.auth import HTTPBasicAuth

headers = { ... }
data = { "name": "google" }

response = requests.post(
    "https://ap-northeast-1.data.tidbcloud.com/api/v1beta/app/xxxx",
    timeout=10,
    headers={"Content-Type": "application/json"},
    json=data,
    auth=HTTPBasicAuth("Public key", "Private key")
)
print(response.json())

フロントエンド(など)からどうやってAPI実行するか(案)

フロントエンドでは、認証認可の要件があるかもしれません。Auth0を使っていてJWTの検証があるかもしれませんし、ヘッダーでのキー認証をしたいかもしれません。また、WAFを拡張したり、独自ドメインでアクセスしたいかもしれません。
そのまま使うには少し不足があると思ったので以下の構成を考えてみました。
実際には試していませんが過去に似たものを作ったことがあるので動くと思います。

最後に

とにかく、とっても簡単でした。バリデーションが弱めなので実装でカバーが必要だったり、エラー系の戻り値など検討事項がありますが、ぜひ採用してみたいアーキテクチャです。
(2024/02/21時点でURLに記載されているBetaってのが気になりますが・・)

読んで頂きありがとうございました。

Discussion