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

Aurora DSQLを使ってTodoアプリ作ってみた @#しむそくRadio 新春!冬休みの...

Aurora DSQLを使ってTodoアプリ作ってみた @#しむそくRadio 新春!冬休みの宿題LTスペシャル

Tomoki Hirai

January 07, 2025
Tweet

More Decks by Tomoki Hirai

Other Decks in Programming

Transcript

  1. 1 KDDI Agile Development Center Corporation 自己紹介 平井 友樹 (Tomoki

    Hirai) @AllJokin KDDIアジャイル開発センター株式会社(KAG) • Webアプリエンジニア/モバイルアプリエンジニア • AWS, React, Flutter, GCPなど
  2. 2 KDDI Agile Development Center Corporation Amazon Aurora DSQL 最近発表されたPostgreSQL互換の分散データベース(Preview)

    • サーバレス • PostgreSQL互換 • 事実上無限のスケーラビリティ • マルチリージョン対応 • Google Spannerに比べて4倍早い CEO Keynote with Matt Garman
  3. 3 KDDI Agile Development Center Corporation Aurora DSQLでアプリを作った目的 • Aurora

    DSQLを実際に使ってみて制約を理解する • 気になるライブラリを触ってみる ◦ Hono:日本製のWebアプリケーションフレームワーク ◦ Drizzle:Headless Typescript ORM AWS Cloud Amazon Aurora DSQL AWS Lambda
  4. 5 KDDI Agile Development Center Corporation LambdaからAurora DSQLへの接続 Drizzleクライアントでデータの取得を行う ①

    スキーマの定義 ② クライアントの作成 serialは非対応なのでUUIDを使う 外部キーが使えない ③ データ取得 Password 取得 Drizzleクライアント作成
  5. 6 KDDI Agile Development Center Corporation HonoでAPIの実装 hono/aws-lambda を使ってLambdaで実行 •

    app.getでGETメソッド、app.postでPOSTメソッドを実装 • app.useでMiddlewareを使用 ◦ c.setでコンテキストにclientをセット、各APIではc.var.clientでClientを使う (使い方合ってるかわからないけど…) Contextにクライアントをセット クライアントを呼び出し
  6. 7 KDDI Agile Development Center Corporation Drizzle x Aurora DSQLで困ったこと

    ① Migration(drizzle migrate)を実行できない 自動生成されるテーブルにserialを使われている 対応されるかも? [FEATURE]: Allow for non sequential primary key for id of migrationsTable ② 一部使えないAPIがある findFirst関数で別テーブルのデータを取得しようとすると Data type json not supported select "todoTable"."id", "todoTable"."title", "todoTable"."category_id", "todoTable_category"."data" as "category" from "todo" "todoTable" left join lateral (select json_build_array("todoTable_category"."id", "todoTable_category"."name") as "data" from (select * from "category" "todoTable_category" where "todoTable_category"."id" = "todoTable"."category_id" limit $1) "todoTable_category") "todoTable_category" on true limit $2 const todoFindFirstWithCategory = await client.query.todoTable.findFirst({ with: { category: true, }, }); 実際に発行されるSQL 実装 CREATE TABLE IF NOT EXISTS "drizzle"."__drizzle_migrations" ( "id" serial PRIMARY KEY, "hash" text NOT NULL, "created_at" bigint );
  7. 8 KDDI Agile Development Center Corporation まとめ • Aurora DSQLのいろいろな制約を考慮する必要がある。

    ◦ 外部キーが使えない、使えないデータ型がある等 • 現状はORMの機能をフルで使えないと思った方がよさそう • Honoはいい感じだった