Amazon Aurora DSQL が PrivateLink に対応してプライベートネットワークからアクセス可能になりました(まだ DSQL 自体はプレビュー)
ウィスキー、シガー、パイプをこよなく愛する大栗です。
AWS re:Invent 2024 で発表された、プレビュー中の Aurora DSQL が先日 PrivateLink に対応したのでレポートします。
Managing and connecting to Amazon Aurora DSQL clusters using AWS PrivateLink
Aurora DSQL とは?
Aurora DSQL は AWS re:Invent 2024 で発表された、事実上無制限のスケールするサーバーレスな分散 SQL データベースです。3個の AZ にまたがる Active/Active の単一クラスタを提供しつつ、マルチリージョン構成の可能で各リージョンのエンドポイントで単一の論理的なデータベースを提供して強いデータ一貫性を備えた読み取りと書き込みをサポートします。なお、Aurora DSQL は楽観的同時実行制御を採用しているので注意してください。
詳しくは、Aurora DSQL 発表時のブログを御覧ください。
Aurora DSQL の PrivateLink 対応
元々 Aurora DSQL はパブリックエンドポイントしか存在しなかったため、使用するためにはインターネットへの接続性が必要でした。PrivateLink に対応したため VPC の中からアクセスするときにインターネットゲートウェイへのルーティングがないサブネットからでもアクセスできるようになります。Aurora DSQL ではインターフェイス VPC エンドポイントをプロビジョニングできます。
今まではパブリックサブネットのインスタンスか NAT 経由で Aurora DSQL へアクセスする必要がありましたが、PrivateLink に対応したためプライベートサブネットから VPC エンドポイント経由でアクセスできるようになりました。
やってみる
ここでは Aurora DSQL のマルチリージョン構成ですすめます。シングルリージョン構成でも PrivateLink の設定は可能です。
Aurora DSQL の準備
まずは Aurora DSQL を起動します。Aurora DSQL は発表時のブログの手順を確認して下さい。としようと思ったのですが、コンソール上のマルチリージョン構成のセットアップ方法が当時と変わっていたので、改めて書きます。元々は特定リージョンで1画面で設定できたのですが、現在はリージョンごとにクラスタを作成してリンクする手順を別々に実施する必要があります。
当初マルチリージョン構成を行うときには、クラスターはバージニア北部とオハイオで、監視を行うウィットネスはオレゴンとリージョンが決まっていました。5月16日現在では、クラスターはバージニア北部、オハイオで、オレゴンのうちの2リージョンを自由に選択できます。残りの1リージョンをウィットネスに設定します。
最初のクラスターの作成
Aurora DSQL のコンソールで [クラスターを作成] - [Multi-Region] をクリックします。ここではバージニア北部で実行します。
Cluster settings で必要に応じて [削除保護をオンにする](Enable deletion protection) をチェックします。Multi-Region settings で Witness Region を選択 (ここではオハイオ) します。すでにリモートリージョンにクラスタを作成済みの場合には [Remote Region cluster ARN] を指定しますが、ここではリモートリージョンのクラスタを作成していないため空欄のままです。Tag には任意の内容を設定して、[Create cluster] をクリックします。
[Complete multi-Region cluster setup] をクリックします。
2番目のクラスターの作成
別リージョンのクラスタを新規に作成するので [Create cluster in another region] を選択して、リージョンでオハイオを選択して [Create cluster in us-west-2 (Oregon)] をクリックします。
Cluster settings で必要に応じて [削除保護をオンにする](Enable deletion protection) をチェックします。Tag には任意の内容を設定して、[Create cluster] をクリックします。
クラスターが作成されます。
クラスターのピアを接続
作成されたクラスターの詳細画面で [Peer in us-east-1 (N. Virginia)] をクリックします。
接続するクラスターを確認して [Peer] をクリックします。
少し待つとクラスター同士がピアで接続されます。
サービス名の確認
作成したマルチリージョンクラスタについて、VPC エンドポイントのサービス名を確認します。サービス名は AWS CLI で確認できます。
aws dsql get-vpc-endpoint-service-name --region <Region> --identifier <Cluster ID>
- バージニア北部の場合
$ aws dsql get-vpc-endpoint-service-name --region us-east-1 --identifier abcdefghijklmnopqrstuvwxyz
{
"serviceName": "com.amazonaws.us-east-1.dsql-fnh4"
}
- オレゴンの場合
$ aws dsql get-vpc-endpoint-service-name --region us-west-2 --identifier abcdefghijklmnopqrstuvwxyz
{
"serviceName": "com.amazonaws.us-west-2.dsql-7cwu"
}
VPC エンドポイントの作成
Aurora DSQL のサービス名が分かったので、VPC エンドポイントを作成します。
aws ec2 create-vpc-endpoint
コマンドで作成します。
aws ec2 create-vpc-endpoint \
--region <Region> \
--service-name <DSQL's Service Name> \
--vpc-id <VPC ID> \
--subnet-ids <Subnet ID> \
--vpc-endpoint-type Interface \
--security-group-ids <Security Group>
コマンドを実行すると以下のような出力がされます。
$ aws ec2 create-vpc-endpoint \
> --region us-east-1 \
> --service-name com.amazonaws.us-east-1.dsql-fnh4 \
> --vpc-id vpc-abcd12efgh34ijklm \
> --subnet-ids subnet-1234abcd5678efgh9 \
> --vpc-endpoint-type Interface \
> --security-group-ids sg-ijkl1234mnop5678q
{
{
"VpcEndpoint": {
"VpcEndpointId": "vpce-0qrst1234uvwx5678",
"VpcEndpointType": "Interface",
"VpcId": "vpc-abcd12efgh34ijklm",
"ServiceName": "com.amazonaws.us-east-1.dsql-fnh4",
"State": "pending",
"RouteTableIds": [],
"SubnetIds": [
"subnet-1234abcd5678efgh9"
],
"Groups": [
{
"GroupId": "sg-ijkl1234mnop5678q",
"GroupName": "dsql-client"
}
],
"IpAddressType": "ipv4",
"DnsOptions": {
"DnsRecordIpType": "ipv4"
},
"PrivateDnsEnabled": true,
"RequesterManaged": false,
"NetworkInterfaceIds": [
"eni-01ab23cd45ef67gh8"
],
"DnsEntries": [
{
"DnsName": "vpce-0qrst1234uvwx5678-1a2b3c4d.dsql-fnh4.us-east-1.vpce.amazonaws.com",
"HostedZoneId": "ABCDEFGHIJKLM"
},
{
"DnsName": "vpce-0qrst1234uvwx5678-1a2b3c4d-us-east-1b.dsql-fnh4.us-east-1.vpce.amazonaws.com",
"HostedZoneId": "ABCDEFGHIJKLM"
},
{
"DnsName": "dsql-fnh4.us-east-1.on.aws",
"HostedZoneId": "ZONEIDPENDING"
},
{
"DnsName": "*.dsql-fnh4.us-east-1.on.aws",
"HostedZoneId": "ZONEIDPENDING"
}
],
"CreationTimestamp": "2025-05-15T09:57:05.809000+00:00",
"OwnerId": "123456789012",
"ServiceRegion": "us-east-1"
}
}
接続確認
VPC エンドポイント経由で Aurora DSQL へアクセスする場合には、パブリックエンドポイントと異なり、以下の形式になります。
<DSQL Cluster ID>.<Service Identifier>.<Region>.on.aws
VPC エンドポイントを作成したサブネット上の EC2 から psql コマンドでアクセスしてみます。
ホスト名を設定します。
$ export CLUSTERID=abcdefghijklmnopqrstuvwxyz # Aurora DSQL のクラスターID
$ export REGION=us-east-1 # リージョン
$ export SERVICE_IDENTIFIER=dsql-fnh4 # 対象リージョンの Aurora DSQL のサービス名
$ export HOSTNAME="$CLUSTERID.$SERVICE_IDENTIFIER.$REGION.on.aws"
$ echo $HOSTNAME
abcdefghijklmnopqrstuvwxyz.dsql-fnh4.us-east-1.on.aws
Aurora DSQL の接続トークンを発行します。
$ export PGPASSWORD=$(aws dsql --region $REGION generate-db-connect-admin-auth-token --hostname $HOSTNAME)
Aurora DSQL に接続します。
$ psql -d postgres -h $HOSTNAME -U admin
psql (16.8)
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_128_GCM_SHA256, compression: off)
Type "help" for help.
postgres=> \l
List of databases
Name | Owner | Encoding | Locale Provider | Collate | Ctype | ICU Locale | ICU Rules | Access privileges
----------+---------+----------+-----------------+---------+-------+------------+-----------+---------------------
postgres | dbowner | UTF8 | libc | C | C | | | =Tc/dbowner +
| | | | | | | | dbowner=CTc/dbowner+
| | | | | | | | admin=CTc/dbowner
(1 row)
さいごに
Aurora DSQL はパブリックエンドポイントしかない状態でしたが、PrivateLink に対応したので内部接続でアクセスできるようになりました。まだプレビューですがアップデートされているので一般提供も遠くなさそうです。ロックが無かったり、楽観的同時実行制御を採用していたりアプリケーションの実装には注意が必要なデータベースですが、サーバーレスでマルチリージョンで Active/Active ということで注目度が高いので、今後もアップデートを追っていきたいと思います。