TiDB Cloud Data ServiceをAWSで使うことを想定して試してみた
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