【技術検証】Amazon Aurora DSQLで遊んでみた

いつも記事を読んでいただきありがとうございます！
モブエンジニア（[@mob-engineer](https://qiita.com/mob_engineer))です！

AWS reinvent:2024のアップデートで注目を浴びた**Amazon Aurora DSQL**をまだ触っていなかったため、**何ができるのか**をキャッチアップするために触ってみました。

データベース初学者でもすっと読めるように、平易な表現で執筆しておりますので、お気軽に読んでいただければ幸いです。

:::note info
Amazon Aurora DSQLは現在プレビューサービスとなります
:::

# 目次
- 想定読者層
- Amazon Aurora DSQLとは
    - 概要
    - 楽観的同時実行制御
    - 利用可能リージョン
    - ユーザ向けドキュメント
- コンソールでの設定画面
- 所感
    - 良いところ
    - 改善したほうがいいところ
    - ビジネス視点での活用案

## 想定読者層

次のような興味関心を抱いている読者の方のお役に立てていただければ幸いです。

- Amazon Aurora DSQLについてザクっと知りたい方
- Amazon Aurora DSQLをコンソールで操作する方法を知りたい方
- ビジネス視点で何ができるのか知りたい方

## Amazon Aurora DSQLとは

### 概要

Amazonサービスをキャッチアップするポイントとして**公式ブログを読むこと**がありますので、公式から発表されているブログを読んでみましょう。

#### 公式ブログ

https://aws.amazon.com/jp/blogs/news/introducing-amazon-aurora-dsql/

>本日、私たちは常時利用可能なアプリケーションに最適な、最速のサーバーレス分散 SQL データベース「Amazon Aurora DSQL」をご紹介します。Aurora DSQL は、事実上無限のスケーラビリティ、最高の可用性、そしてインフラストラクチャ管理ゼロを提供します。ワークロードの需要に合わせて、データベースのシャーディングやインスタンスのアップグレードなしにスケーリングできます。革新的なアクティブ・アクティブの分散アーキテクチャにより、シングルリージョン構成で 99.99%、マルチリージョン構成で 99.999% の可用性を実現し、高可用性アプリケーションの構築に最適です。サーバーレスの設計により、パッチ適用、アップグレード、メンテナンスダウンタイムなどの運用負荷が不要になります。Aurora DSQL は PostgreSQL 互換であり、開発者は既知のリレーショナルデータベースの概念、ドライバー、ツール、フレームワークを使ってアプリケーションを迅速に構築・デプロイできます。

すごくざっくりいうと、**高可用性とスケーラビリティを最大まで追求したPostgreSQL対応のSQLデータベースサービス**かと思います。

>Aurora DSQL は、3 つの AZ にまたがるアクティブ/アクティブの単一リージョン クラスターを提供し、レプリケーション ラグと従来のデータベース フェイルオーバー操作を最小限に抑えます。ハードウェアまたはインフラストラクチャに障害が発生した場合、手動介入なしでリクエストを正常なインフラストラクチャに自動的にルーティングします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/4ac0ef45-feb5-ee16-fae8-78a7bc2718e6.png)

アーキテクチャ構成を見る限り、**3つのアベイラビリティゾーンに所属しているストレージ間でデータを分散管理している**ような構成のように見えますね。

マルチリージョン対応の場合の構成として以下のようなアーキテクチャ構成になるようです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/f4f76d1a-9083-11d6-9452-5ff8cead4ca8.png)

### 楽観的同時実行制御

そのうえで、Amazon Aurora DSQLを利用するうえで注意が必要な要素として**楽観的同時実行制御**があります。

楽観的同時実行制御に関して、公式ブログでも説明がなされていました。

#### 公式ブログ

https://aws.amazon.com/jp/blogs/news/concurrency-control-in-amazon-aurora-dsql/

>Aurora DSQL は楽観的同時実行制御を採用しています。これは、リレーショナルデータベースよりも非リレーショナルデータベースでよく使われる手法です。楽観的同時実行制御では、同じ行を更新しようとする他のトランザクションについてあまり考慮せずにトランザクションロジックを実行します。トランザクション完了時に、データベースへの変更をコミットしようとします。その際、Aurora DSQL は他の同時実行トランザクションからの書き込みが干渉していないかを確認します。干渉がなければトランザクションは正常にコミットされますが、干渉があった場合はデータベースがエラーを返します。このような場合、ユーザーは悲観的同時実行制御を使うデータベースと同様に、どのように処理を進めるかを決める必要があります。ほとんどのユースケースでは、トランザクションをリトライするのが最善のアプローチです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/df44ff25-326c-8efb-9a51-f88c60022e60.png)

すごくざっくりいえば、**データベースの変更確定（=コミット）時に競合が発生したら、エラーを返す仕様にしている**といったニュアンスかと思います。

開発業務でGitを利用している方であれば、**コミット時のコンフリクト**をイメージすればわかりやすいかと思います。

そのうえで、注意が必要なところとして、**競合が発生したらエラーが返されるため、エラー時の挙動を定義する必要がある**といったことがあります。

今までのデータベースであれば、**Aさん・Bさんが同じ行への更新を行おうとしたときに、ロック機能を利用することで、処理の待機時間がかかるが処理競合を防ぐことができる**といった考え方でデータ更新を行えます。

:::note info
#### データベースのロックに関しては以下ブログが分かりやすいです

https://zenn.dev/gibjapan/articles/1d8dfb7520dabc
:::

Amazon Aurora DSQLの場合は、**処理競合が発生したら、即座にエラーを返してしまい、ユーザ側でアクションを行わないといつまでたってもデータが反映されない**といった状況が発生します。

そのため、**Amazon Aurora DSQLを導入する場合、処理競合が発生した場合の処理方針（リトライ実行など）を考える必要がある**といったことを重視する必要があります。

### 利用可能リージョン

本サービスは、現在プレビュー期間のため以下リージョンでしか利用できません。

- **米国東部 (バージニア北部)**
- **米国東部 (オハイオ)**

### ユーザ向けドキュメント

ユーザ向けドキュメントに関してもある程度そろっているので、**何から始めればいいのかよくわからない**といった状況にはなりにくいかと思います。

#### スタートガイド

https://docs.aws.amazon.com/ja_jp/aurora-dsql/latest/userguide/getting-started.html

#### 開発者向けガイド

https://docs.aws.amazon.com/ja_jp/aurora-dsql/latest/userguide/what-is-aurora-dsql.html

#### APIリファレンス

https://docs.aws.amazon.com/ja_jp/aurora-dsql/latest/APIReference/Welcome.html

APIリファレンスがそろっているのでCDKでの構築も可能な印象を持ちました。

## コンソールでの設定画面

実際にコンソール上で触ってみないとわからないので触ってみたいと思います。

- 検索ボックスに**DSQL**と入力し、検索結果内の**Amazon Aurora DSQL**を押下

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/d36be654-c22b-0d92-dd99-712a6d17e0d0.png)

:::note warn
**米国東部 (バージニア北部)および米国東部 (オハイオ)以外のリージョン**の場合、利用不可画面が表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/5ced7e6b-a8c6-2b03-3547-231914d26c13.png)
:::

- クリック後、Amazon Aurora DSQLトップ画面が表示されるため**create Cluster**ボタンを押下

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/55990e2e-14f3-6f29-034a-dad3f48de700.png)

- クリック後、Amazon Aurora DSQL設定画面が表示されます
- マルチリージョン構成で設定する場合は、**Multi-Region**のチェックボックスを押下（今回はマルチリージョンを試してみるのでチェックを入れておく）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/29b54d2d-33fe-0249-693e-64fd9eff5960.png)

:::note info
Multi-Regionにチェックを入れた場合、**Linked cluster Region**（レプリケーション用リージョン）と**Witness Region**（書き込み用リージョン）**を設定することができます。
ただし、Linked cluster Regionは**Ohioのみ**、Witness Regionは**Oregon**しか選択できません。

**Linked cluster Region設定画面**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/0ad969dc-dbfe-d450-fd1f-e46a004d6fd4.png)

**Witness Region設定画面**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/0b132f99-e1db-723d-f2bd-05d50f7e63f4.png)
:::

- Tagに関してはデフォルトで値が入っているため、**Create Cluster**ボタンを押下

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/8df5364c-a34a-86d4-ecdf-0ab3b046bc1f.png)

:::note info
設定できるタグに関しては50個までのようですね。
:::

- 作成したDSQL用のクラスターが表示されています
- StatusがCreateなのでしばらく待機します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/f7f314fd-4e11-6b0f-9d02-43e7d9466ba9.png)

:::note info
補足ですが、クラスターに設定されたエンドポイント宛にpingを実行したら、ipv6アドレスが紐づいているようですね

```
C:\>ping taabtygyqp4nfpj5r63ieo4z54.dsql.us-east-1.on.aws

taabtygyqp4nfpj5r63ieo4z54.dsql.us-east-1.on.aws [2600:1f18:692c:303:31c4:3b43:ed6d:d04d]に ping を送信しています 32 バイトのデータ:
要求がタイムアウトしました。
要求がタイムアウトしました。
要求がタイムアウトしました。
要求がタイムアウトしました。

2600:1f18:692c:303:31c4:3b43:ed6d:d04d の ping 統計:
    パケット数: 送信 = 4、受信 = 0、損失 = 4 (100% の損失)、

C:\>
```
:::

- 3分ほどでStatusが**Active**になったので**Cluster ID**のリンクを押下


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/666a445c-0e9b-c315-1417-6eed2fa8f194.png)

- クリック後、作成したクラスターの設定画面が表示されます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/b5bf8d26-46ad-a194-7101-41dbd7144f56.png)

![スクリーンショット 2025-01-12 153937.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/3115b69e-2e69-f9f1-0673-42481459ca52.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/13ecff2a-71e7-555e-dc92-7ae07cf64db0.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/fbce3863-9724-73db-e24a-4209b967d045.png)

- Connectボタンを押下すれば、Amazon Aurora DSQL接続用のコマンドが表示されます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/550f7217-56c5-8869-68d6-f24f5aae69f4.png)

- Amazon Aurora DSQLが立ち上がったのは確認できたので削除します
- 上部の**Delete**ボタンを押下します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/8a7b42af-c8db-df70-dd05-863252d99e04.png)

:::note info
**deletion protectionがOnになっていた場合**、変更するように依頼するポップアップが表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/aec64f61-5c24-1bf9-4509-47316755de10.png)

**Modifiボタン>deletion Protectionのチェックボックスを外す>Saveボタンを押下**することでdeletion Protectionが無効化されます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/909fa3d3-4ede-9645-c977-c8726cb2b6e9.png)
:::

- 削除ポップアップが表示されるため、入力ボックスに**confirm**を入力
- 入力後、**Delete**ボタンを押下

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/aeb9a9be-4680-3fcb-b068-61d33da199e7.png)

:::note info
マルチリージョン構成の場合、**Linked cluster Region**のdeletion Protectionも無効化させないと削除できません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/cf3b1f27-1e68-7bb9-e0ad-3649594061e7.png)

左側ペインの**Cluster>Linked Region**で青文字リンクで表示されている箇所をクリックすることで、Linked cluster Regionの設定画面を表示することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/92807d4d-3655-0cb4-1b48-27e2ff8fbb2e.png)
:::

- 押下後、Cluster画面へ遷移します
- Statusが**Deleting**になっているためしばらく待機します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/a927e267-39b7-8a0c-ad87-0ac31cc1bf87.png)

- 削除完了後、以下のような画面が表示されます
- ポップアップ内のus-east-2 (Ohio)を押下します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/805e9aad-c655-57aa-b657-e8fb8d2a70e0.png)

- 画面が遷移し**Resource was not found**が表示されています
- Linked Region Clusterに関しても消えていることが確認できました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/1bb79f47-0e73-6d41-aad3-10e7b0e62d0b.png)

上記作業で**Amazon Aurora DSQLの作成から削除**までを一通り実行しました。

## 所感

所感として**良いところ**、**改善したほうがいいところ**と**ビジネス視点での活用案**について簡単にまとめたいと思います。

### 良いところ
- 設定箇所が少ないため初学者でも操作しやすい
- 設定画面に関しても表示内容が少ないためすっきりしている
- 複数クラスタのデータベースを数分で展開可能

### 改善したほうがいいところ
- 設定項目が少ないがゆえにカスタマイズした設定ができない
- マルチリージョン構成の場合の削除がややめんどくさい
- 削除時のメッセージがイケていない（**confirm=削除**と認識しづらい）

### ビジネス視点での活用案

:::note warn
あくまで一個人として思った意見となります。
:::

- アメリカ本土に拠点を置いている企業内のデータベース環境（情シス向け）
- データ管理条件がそこまで厳しくない中小企業のデータ保管先
- アメリカ本土に拠点を置いているメディア系企業のユーザデータ環境

## 参考サイト

https://qiita.com/tenn25/items/6acf76fce783486989e7

https://qiita.com/har1101/items/3e23149e849a9fb1238a

https://dev.classmethod.jp/articles/aurora-dsql-non-support/

https://www.youtube.com/watch?v=9wx5qNUJdCE/

簡単ではございますが、**Amazon Aurora DSQLで遊んでみた感想**について記事にしてみました。触ってみることで**本サービスの奥深さ**を少し知ることができるかと思いますので、ぜひぜひ、触ってみてください。

最後まで、記事を読んでいただきありがとうございました。