Aurora DSQLのVPCエンドポイント名を取得するカスタムリソースをCDKで作成する

Aurora DSQLのVPCエンドポイント名を取得するカスタムリソースをCDKで作成する

2025.09.28

はじめに

Amazon Aurora DSQL(以下、DSQL)はPrivateLinkに対応しており、アプリケーションからDSQLにプライベート接続が可能です。PrivateLinkのエンドポイントを作成する際には、クラスター固有のサービス名を取得する必要があります。本記事では、CDKのカスタムリソースを使用してサービス名を取得する方法を紹介します。

DSQLのエンドポイントサービス名

DSQLクラスターを作成すると、クラスターのページに以下のようにエンドポイントサービス名が表示されます。

20250928_d_01

しかしながら、CDKでリソースを作成する場合、デプロイする前にエンドポイントサービス名を知りたいケースがあります。

エンドポイントサービス名を取得するには、GetVpcEndpointServiceNameというAPIを使用します。このAPIを実行すると以下のようなレスポンスが返却されます。

			
			HTTP/1.1 200
Content-type: application/json

{
   "serviceName": "string"
}

		

公式ドキュメントはこちらです。

GetVpcEndpointServiceName - Amazon Aurora DSQL

カスタムリソースの作成

DSQLクラスターとそのサービス名を取得するカスタムリソースの例です。

			
			import * as cdk from 'aws-cdk-lib';
import * as dsql from "aws-cdk-lib/aws-dsql";
import { AwsCustomResource, AwsCustomResourcePolicy, PhysicalResourceId } from 'aws-cdk-lib/custom-resources';
import { Construct } from 'constructs';

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

    // DSQLクラスターの作成
    const dsqlCluster = new dsql.CfnCluster(this, "DsqlCluster");

    // 作成したDSQLクラスターのエンドポイントサービス名を取得するためのカスタムリソース
    const getServiceName = new AwsCustomResource(this, 'GetServiceName', {
      onCreate: {
        service: 'DSQL',
        action: 'getVpcEndpointServiceName',
        parameters: {
          identifier: dsqlCluster.ref,
        },
        physicalResourceId: PhysicalResourceId.of(`dsql-service-name-${dsqlCluster.ref}`),
      },
      onUpdate: {
        service: 'DSQL',
        action: 'getVpcEndpointServiceName',
        parameters: {
          identifier: dsqlCluster.ref,
        },
        physicalResourceId: PhysicalResourceId.of(`dsql-service-name-${dsqlCluster.ref}`),
      },
      policy: AwsCustomResourcePolicy.fromSdkCalls({
        resources: [dsqlCluster.attrResourceArn],
      }),
    });

    // カスタムリソースがDSQLクラスターの作成を待つようにする
    getServiceName.node.addDependency(dsqlCluster);

    // APIのレスポンスからserviceNameプロパティの値を取得
    const serviceName = getServiceName.getResponseField('serviceName');

    // サービス名を出力
    new cdk.CfnOutput(this, "DsqlEndpointServiceName", {
      value: serviceName,
    });
  }
}

		

カスタムリソースの作成にはAwsCustomResourceというクラスを使用します。このクラスを使用すると、AWSのAPI呼び出しを実行するためのカスタムリソースを、Lambda関数を書くことなく作成できます。アクションとして、エンドポイントサービス名を取得するためのAPIgetVpcEndpointServiceNameを指定しています。

class AwsCustomResource (construct) · AWS CDK

[AWS CDK] APIを呼び出すだけのカスタムリソースならLambda関数は不要な件 | DevelopersIO

公式ドキュメントに記載がある通り、パラメータとしてidentifierを設定する必要があります。identifierは作成したクラスターのrefプロパティから取得します。

20250928_d_02

確認

CDKをデプロイ後、CloudFormationのスタックのページを開きます。「出力」タブにDSQLクラスターのエンドポイントサービス名が出力されています。

20250928_d_03

おわりに

DSQLクラスターのエンドポイントサービス名を取得するカスタムリソースを作成しました。AwsCustomResourceクラスを使うことでLambda関数を作成することなく、簡単に取得できました。

この記事がどなたかの参考になれば幸いです。

この記事をシェアする

FacebookHatena blogX

関連記事

Aurora DSQLのVPCエンドポイント名を取得するカスタムリソースをCDKで作成する | DevelopersIO