Amazon Aurora DSQL クラスターを AWS CDK で作成してみた

Amazon Aurora DSQL クラスターを AWS CDK で作成してみた

Clock Icon2025.05.30

こんにちは、製造ビジネステクノロジー部の若槻です。

このたび、昨年の AWS re:Invent 2024 で発表された Amazon Aurora DSQL が遂に GA になりました。

https://dev.classmethod.jp/articles/amazon-aurora-dsql-generally-available/#amazon-aurora-dsql

既存の Aurora Serverless V2 と比べて、Aurora DSQL はデータベースインスタンスの管理が不要であり、真のサーバーレス分散 SQL データベースとなっています。今までは AWS でのデータベースといえば DynamoDB vs RDS の実質二択だったところが、Aurora DSQL の登場で選択肢が増えたという形となります。

そしてこの Aurora DSQL クラスターは CloudFormation でも作成が可能となっているとのこと。現状は AWS::DSQL::Cluster リソースタイプのみのようです。
https://dev.classmethod.jp/articles/aurora-dsql-supports-cloudformation/

そして探してみると、AWS CDK でも aws-dsql モジュールが追加され、CDK からも Aurora DSQL クラスターを作成できるようになっていました。
https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_dsql.CfnCluster.html

CfnCluster クラスは CDK v2.196.0 で追加されたようです。
https://github.com/aws/aws-cdk/releases/tag/v2.196.0

実装プルリクエストはこちらですね。
https://github.com/aws/aws-cdk/pull/34425

というわけで今回は、AWS CDK を使って Aurora DSQL クラスターの作成を試してみました。

試してみた

クラスターの作成

CfnCluster クラスを使って Aurora DSQL クラスターを作成し、そのクラスター ID を出力する CDK コードです。

lib/main-stack.ts
import * as cdk from "aws-cdk-lib";
import * as dsql from "aws-cdk-lib/aws-dsql";
import { Construct } from "constructs";

export class MainStack extends cdk.Stack {
  constructor(scope: Construct, id: string, props: cdk.StackProps) {
    super(scope, id, props);

    // DSQL クラスター
    const myDsqlCluster = new dsql.CfnCluster(this, "MyDsqlCluster");

    // DSQL クラスターの ID の出力
    new cdk.CfnOutput(this, "DsqlClusterId", {
      value: myDsqlCluster.ref,
    });
  }
}

デプロイをするとものの2分で完了し、クラスターが作成されました。

$ npm run deploy

> cdk_sample_app@0.1.0 deploy
> cdk deploy --require-approval never --method=direct


✨  Synthesis time: 6.59s

Main: start: Building Main Template
Main: success: Built Main Template
Main: start: Publishing Main Template (current_account-current_region)
Main: success: Published Main Template (current_account-current_region)
Main: deploying... [1/1]
Main: updating stack...

 ✅  Main

✨  Deployment time: 94.99s

Outputs:
Main.DsqlClusterId = aaabudq3h2uewlcwsh6obsiazi
Stack ARN:
arn:aws:cloudformation:ap-northeast-1:300561038900:stack/Main/01ab87c0-03e8-11f0-9141-0ea4b6a23d7f

✨  Total time: 101.58s

CloudFormation のマネジメントコンソールのリソース一覧上でも作成されたクラスターが確認できます。

DSQL のマネジメントコンソールでも作成されたクラスターが確認できました。既定ではクラスター名は付かず、削除保護が有効になるようです。

取得したクラスター ID は <クラスターID>.dsql.ap-northeast-1.on.aws という形式でパブリックエンドポイントとしたり、arn:aws:dsql:ap-northeast-1:<アカウントID>:cluster/<クラスターID> という形式で ARN として利用できます。

これら情報は下記のブログにあるように DSQL クラスターに接続する Lambda 関数の環境変数や権限にクラスターエンドポイントや ARN を指定する際に利用できます。
https://dev.classmethod.jp/articles/try-lambda-to-aurora-dsql-with-role/

プロパティを指定して作成

続いて CfnClusterProps を使って、クラスターのプロパティを指定して作成してみます。

指定できるプロパティは以下の2つのみです。設定項目が少なすぎて驚きますね。それだけ DSQL はシンプルなサービスということです。

lib/main-stack.ts
import * as cdk from "aws-cdk-lib";
import * as dsql from "aws-cdk-lib/aws-dsql";
import { Construct } from "constructs";

export class MainStack extends cdk.Stack {
  constructor(scope: Construct, id: string, props: cdk.StackProps) {
    super(scope, id, props);

    // DSQL クラスター
    new dsql.CfnCluster(this, "MyDsqlCluster", {
      deletionProtectionEnabled: false, // 削除保護を無効化(デフォルトは有効)
      tags: [
        // クラスター名の指定
        {
          key: "Name",
          value: "MyDsqlCluster",
        },
      ],
    });
  }
}

CDK diff で差分を確認すると、クラスターの削除保護が無効化され、クラスター名が MyDsqlCluster となることが分かります。

$ cdk diff
start: Building Main Template
success: Built Main Template
start: Publishing Main Template (current_account-current_region)
success: Published Main Template (current_account-current_region)
Hold on while we create a read-only change set to get a diff with accurate replacement information (use --no-change-set to use a less accurate but faster template-only diff)
Stack Main
Resources
[~] AWS::DSQL::Cluster MyDsqlCluster MyDsqlCluster
 ├─ [+] DeletionProtectionEnabled
 │   └─ false
 └─ [+] Tags
     └─ [{"Key":"Name","Value":"MyDsqlCluster"}]


✨  Number of stacks with differences: 1

デプロイ後にマネジメントコンソールからクラスターの詳細を確認すると、削除保護が無効化され、クラスター名が MyDsqlCluster となっていることが確認できました。

おわりに

Amazon Aurora DSQL クラスターを AWS CDK を使って作成する方法を試してみました。

RDS Aurora というと今までは VPC やデータベースインスタンスが必要で、設定項目も多く、CDK での実装も複雑で時間が掛るものでした。私も試行錯誤をしながら繰り返しデプロイをした際にとても時間が掛かった記憶があります。それに比べて Aurora DSQL は、クラスターの作成が非常にシンプルで、CDK でも数行のコードで完了(必要最低限となると DynamoDB よりも少ない)し、また、デプロイも非常に高速で驚きました。

DSQL には他にもマルチリージョンクラスターやバックアップ機能があります。案件などで採用するとなると今後これらも CDK でサポートされると嬉しいですね。

以上

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.