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

Aurora DSQLはサーバーレスアーキテクチャの常識を変えるのか

Avatar for TomoyaIwata TomoyaIwata
September 11, 2025

Aurora DSQLはサーバーレスアーキテクチャの常識を変えるのか

2025/9/3に開催されたDevelopersIO 2025の登壇資料です。
https://classmethod.connpass.com/event/361520/

発表時間の都合上当日は削った内容も追記したバージョンの資料をUPしています。

Avatar for TomoyaIwata

TomoyaIwata

September 11, 2025
Tweet

More Decks by TomoyaIwata

Other Decks in Technology

Transcript

  1. ⾃⼰紹介 3 • 2018年 ⼊社 ◦ サーバーレス開発部 ◦ Lambda × DynamoDB案件

    • 2019年 ◦ 初のVPC Lambda × RDS案件 • 2020年 ◦ Fargate × RDS案件など • 2025年 ◦ オフショア開発のアーキテクト • 部署 ◦ リテールアプリ共創部 • 名前 ◦ 岩⽥ 智哉 • 好きなAWSサービス ◦ Lambda
  2. Amazon DynamoDB 7 • サーバーレスにおけるファーストチョイス • VPC不要 • オンデマンドモードで⾃動スケール •

    クエリでできることが限定的 ◦ JOINできない、集計できない ◦ 必要に応じてCQRSなど検討
  3. Amazon Aurora × Data API 9 • DBドライバ無しでAWS SDKだけでクエリが可能 •

    トランザクションは⾃分で管理 ◦ BeginTransactionで発⾏されたトランザクションID を指定して後続処理を実⾏ • レスポンスは最⼤1,000⾏まで • ORMの互換性に難あり
  4. Amazon Aurora × RDS Proxy 10 • コスト増 • ピン留めへの考慮が必要

    ◦ 拡張クエリプロトコルがピン留め対象外となり、⼤き く改善された • LambdaとRDSの相性問題を「緩和」するが「解消」は しない
  5. Amazon Aurora PostgreSQL Limitless Database 12 • ⾃動シャーディングで書き込みがスケールする • ⼤規模環境向け

    ◦ 気軽に検証できる料⾦ではない https://dev.classmethod.jp/articles/calculateamazon-aurora-limitless-database-costs
  6. 制限事項の具体例(主に開発⽬線) 20 • PostgreSQLのExtension利⽤不可 • 外部キー利⽤不可 • シーケンス利⽤不可 • ロックを取得しない(楽観的同時実⾏制御)

    • トランザクションの上限 ◦ 最⼤5分 ◦ 変更可能なデータは最⼤3,000レコード、10MiB https://dev.classmethod.jp/articles/aurora-dsql-non-support/ https://docs.aws.amazon.com/ja_jp/aurora-dsql/latest/userguide/CHAP_quotas.html
  7. NG例 26 //...略 const client = new Client({ //...略 });

    await client.connect(); export const handler = async (event, context) => { // クエリを発行する処理 }; 60分後に接続が切れる
  8. パフォーマンス最適でない例 27 export const handler = async (event, context) =>

    { const token = await signer.getDbConnectAuthToken(); await client.connect(); await client.query("SELECT now()"); await client.end(); }; • スパイク耐性が低い • 毎回接続のオーバーヘッドが発⽣する
  9. オススメ 28 const getToken = async () => { return

    ...略 } const pool = new Pool({ password: getToken, maxLifetimeSeconds: 60 * 50, //略 }); export const handler = async (event, context) => { await pool.query("SELECT ...略"); }; • コネクションプールを活⽤ • 接続が切れたらor 切れる前に再接続
  10. トランザクション関連の制限事項 30 トランザクションブロックで変更できるテーブル行とイ ンデックス行の最大数 3,000 行/トランザクション 書き込みトランザクションで変更されたすべてのデー タの最大サイズ 10 MiB

    クエリオペレーションで使用できるメモリの基本最大 量 128 MiB 最大トランザクション時間 5分 https://docs.aws.amazon.com/ja_jp/aurora-dsql/latest/userguide/CHAP_quotas.html
  11. ロックが無い 31 ロックが使える通常のAuroraの場合 BEGIN; SELECT 在庫... FOR UPDATE; ...ロック待ち ...ロック待ち

    ...ロック待ち ...ロック待ち INSERT INTO 受注...; INSERT INTO 受注明細...; UPDATE 在庫...; COMMIT; BEGIN; SELECT 在庫... FOR UPDATE; INSERT INTO 受注...; INSERT INTO 受注明細...; UPDATE 在庫...; COMMIT;
  12. ロックが無い 32 DSQLの場合 BEGIN; SELECT 在庫... FOR UPDATE; INSERT INTO

    受注...; INSERT INTO 受注明細...; UPDATE 在庫...; COMMIT → エラー ERROR: change conflicts with another transaction, please retry: (OC000) BEGIN; SELECT 在庫... FOR UPDATE; INSERT INTO 受注...; INSERT INTO 受注明細...; UPDATE 在庫...; COMMIT;
  13. 後はコミットするだけ...でもエラー 33 BEGIN; INSERT INTO...; UPDATE ...; UPDATE ... SET

    外部API処理済み = 1; -- 外部API呼び出し COMMIT; ERROR: change conflicts with another transaction, please retry: (OC000)
  14. • DPU:$10.00/100万ユニット • ストレージ:$0.40/GB-⽉ ※DynamoDB Standardは$0.285/GB-⽉ • データ転送料⾦: EC2データ転送料⾦ • バックアップ:$0.12/GB-⽉

    or $0.036/GB-⽉ • リストア: $0.024/GB or $0.0036/GB DSQLの料⾦体系 36 ※東京リージョンの場合  ※バックアップ、リストアはWarm or Coldで料⾦が異なる
  15. CROSS JOINで100万レコード⽣成して最⼤値取得 41 10万レコードのクラスターインデックスから最⼤値を取得 SELECT MAX(aid) FROM (SELECT * FROM

    pgbench_accounts LIMIT 100) a CROSS JOIN (SELECT * FROM pgbench_accounts LIMIT 100) b CROSS JOIN (SELECT * FROM pgbench_accounts LIMIT 100) c
  16. pgbenchのテーブルリストア時のDPU消費 42 • pgbench_accounts 10万件 • pgbench_branches 1件 • pgbench_history

    0件 • pgbench_tellers 10件 ※COPYが使えないのでINSERT⽂を10万11回実⾏ 合計するとこちら