Amazon Aurora DSQL を使ってみる

最近は Webフロント、モバイルから python バックエンドまで幅広く携われるプロジェクトで日々楽しく開発しています。sekkyです。
Amazon Aurora DSQL とは
Aurora DSQL は AWS上で サーバレスに 分散SQLデータベースを利用できるサービス です。
2025/2 現在はプレビュー中のサービスであるため無料で利用可能となっています。
サービスの概要は以下のとおりです。
Amazon Aurora DSQLは、事実上無制限のスケール、高可用性、ゼロインフラ管理を実現するサーバーレス分散SQLデータベースです。 Aurora DSQLは、99.99%のシングルリージョンと99.999%のマルチリージョンの可用性を実現するアクティブ-アクティブ高可用性を提供します。
Aurora DSQL を使用すると、システム インフラストラクチャを自動的に管理し、ワークロードのニーズに基づいてデータベースを拡張することができます。 Aurora DSQL を使用すれば、プロビジョニング、パッチ適用、インフラストラクチャのアップグレードに関連するメンテナンスのダウンタイムを心配する必要はありません。
Aurora DSQL は、ACID トランザクションとリレーショナルデータモデルから恩恵を受けるトランザクションワークロード向けに最適化されています。 サーバーレスでトランザクションワークロードに最適化されているため、Aurora DSQLはマイクロサービス、サーバーレス、イベントドリブンアーキテクチャのアプリケーションパターンに最適です。 Aurora DSQLはPostgreSQLと互換性があるため、使い慣れたドライバ、オブジェクトリレーショナルマッピング(ORM)、フレームワーク、SQL機能を使用できます。
Aurora DSQLは、コンピュート、I/O、ストレージを自動的にスケールするので、ワークロードのニーズに効率的に適応できます。 アクティブアクティブサーバーレス設計により、障害回復が自動化されるため、従来のデータベースのフェイルオーバーを心配する必要はありません。 つまり、アプリケーションはMulti-AZおよびMulti-Regionの可用性の恩恵を受け、フェイルオーバーに関連する最終的な一貫性やデータの欠落を心配する必要がありません。 Aurora DSQL は、どのような規模でも常に利用可能なアプリケーションの構築と保守を支援します。
What is Amazon Aurora DSQL? - https://docs.aws.amazon.com/ja_jp/aurora-dsql/latest/userguide/what-is-aurora-dsql.html より
要約すると、PostgreSQL 互換の SQL データベースをインフラ管理不要のサーバレスで利用可能で、スケーリングや障害復旧も自動化されているサービスです。
個人的にはアプリ寄りの開発者なのでインフラに対する考慮を減らせるサーバレスは(楽できるので)大好きです。
制約
インフラに対する考慮ポイントが大きく削減される利点がある一方、いくつか制約があります。
- PostgreSQL の全ての機能がサポートされているわけではない
個人的に気になった点をご紹介すると以下のような制約があります。
全文は 公式ドキュメント を参照してください。- データベースはクラスタあたり1つまで
- ビュー、一時テーブル、トリガー、一部のデータ型、表領域オブジェクト、ユーザー定義関数、シーケンスが利用できない
- 外部キー制約、排他制約が利用できない
- ALTER SYSTEM、TRUNCATE、VACUUM、SAVEPOINT 操作が利用できない
- PL/pgSQL 等の拡張機能が利用できない
- 一部 SQL が利用できない
- トランザクション分離レベルが固定されている
- トランザクションには DDL は1つまでしか含めることができない
- トランザクションに DML と DDL を混在させることができない
- トランザクションあたり更新は1万行まで
- クラスタ、データベースに制限がある
こちらも気になる点をご紹介します。全文は 公式ドキュメント をご参照ください。- コネクションは最大1時間
- トランザクションは最大5分
- テーブルのカラム数は最大255個まで
- 行の最大サイズは 2MB まで、カラムの最大サイズは 1KB まで
- (プレビュー中)バックアップが利用できない。
将来的には AWS Backup でのサポートが予定されているようですが、プレビュー時点では利用できません。(公式ドキュメント) - (プレビュー中)cloudformationを利用できない。
プレビュー中との記載であるため将来的には対応されると思われますが、こちらもプレビュー時点では利用できません。(公式ドキュメント)
例えば、Sequence が利用できないため serial 型もありませんが、サロゲートキーを使う設計の場合は UUID を使うなど、制約と付き合いつつ利用すれば概ね回避できそうです。なお、serial などのサポートされないデータ型を定義した DDL を実行すると、型が存在しない旨のエラーが表示されます。
多くの制約があるように見えますが、制約を理解していれば設計で回避可能なものであると感じました。
※ 他にもエンドポイントがパブリックしかないなど、気になるポイントはありますが、GAや今後のアップデートでの機能拡張をウォッチしつつ、非機能要件と照らし合わせて利用できるか検討するのが良さそうです。
作って使ってみる
AWS コンソールから「Amazon Aurora DSQL」を選びます。
2025/2現在はバージニア北部(us-east-1)とオハイオ(us-east-2)でのみ利用可能です。
Create cluster を押すとクラスタ作成画面が開きます。
設定画面は以下だけです。本当に最低限の設定しかありません。
数分ほどでクラスタが作成されました。
接続情報を取得するためには、クラスタを選択して Connect ボタンを押下します。
Aurora DSQL はパスワードの代わりにトークンを生成して接続します。(↑の画像の下の方のモザイク部にコンソールで生成したものが表示されています)
トークンは通常15分、最大1週間の有効期限があります。
もちろん、各言語の SDK でもトークンを生成することができます。
ここまでできれば以降は(制約があることを除けば) PostgreSQL データベースの使用感と大きな違いはありません。
TypeScript や Golang の SDK を利用して AWS Lambda から接続してみましたが、公式サイトの例 の通りに実装すれば簡単に接続することができました。
DynamoDB でテーブルを作るのと大差ないくらいの手間でクラスタが作成でき、アプリからも問題なく動作しました。
最後に
想像以上に簡単に Aurora DSQL クラスタを作成することができました。
VPC と RDS を作るのは意外と手間が掛かるので、簡単なアプリを作る際には RDS を避けて DynamoDB を使いがちですが、DSQL の登場で今後は SQLDB での構築もできそうです。
また、既存で PostgreSQL を利用するアプリを DSQL にマイグレーションし、AWS Lambda Web Adapter で Lambda 化すればワークロードによってはコスト最適化にも繋がりそうです。
(利用料金が気になるところですが、2025/2時点では公表されていません。)
AWS Lambda Web Adapter については過去の記事 も見てみてください。