【ITニュース解説】Serverless applications with Java and Aurora DSQL - Part 2 Using Aurora DSQL JDBC Connector
2025年09月25日に「Dev.to」が公開したITニュース「Serverless applications with Java and Aurora DSQL - Part 2 Using Aurora DSQL JDBC Connector」について初心者にもわかりやすく解説しています。
ITニュース概要
サーバーレスアプリでJavaからAurora DSQLへ接続する際、手動だった認証トークン管理が課題だった。新登場のJDBC Connectorは、このトークン生成を自動化し、接続コードを大幅に簡素化する。開発者の負担を減らし、より効率的なデータベース連携を実現する。
ITニュース解説
サーバーレスアプリケーションとデータベースを連携させる際、Amazon Aurora DSQLは非常に有用な選択肢となる。これは、スケーラビリティや高可用性といったクラウドネイティブな特性を持つデータベースサービスで、特にサーバーレス環境での利用に適している。また、PostgreSQL互換のインターフェースを提供するため、既存のPostgreSQLアプリケーションやツールを容易に移行できるという利点がある。
これまでのシリーズでは、Amazon Aurora DSQLの基本的な概念を学び、PostgreSQL互換のDSQLクラスターを構築する方法を紹介した。さらに、API GatewayとLambdaというサーバーレスのコンピューティングサービスを連携させ、Java 21ランタイムを使ってデータベースに接続し、データの作成や取得を行うサンプルアプリケーションを開発した。このアプリケーションは、Webサービスからのリクエストを受けてLambda関数が実行され、Lambda関数がAurora DSQLにアクセスしてデータ操作を行うという、典型的なサーバーレス構成を採用していた。
しかし、この最初の段階では、Aurora DSQLへの接続方法に一つの課題があった。それは、データベース認証の仕組みに関連する。Aurora DSQLは、従来のデータベースユーザー名とパスワードによる認証だけでなく、AWSのIAM(Identity and Access Management)という認証・認可システムを利用して接続を安全に行う。IAMはAWSリソースへのアクセスをきめ細かく制御できる強力な機能だが、その認証プロセスは通常のデータベース接続とは少し異なる。具体的には、データベースに接続するための認証トークンをAWSのSDK(Software Development Kit)を使ってプログラムで生成し、そのトークンを接続パスワードとして設定する必要があったのだ。
サンプルアプリケーションでは、DsqlUtilitiesというクラスのgenerateDbConnectAdminAuthToken()メソッドを呼び出して認証トークンを生成していた。この生成された認証トークンは一時的なものであり、セキュリティを確保するために一定時間で有効期限が切れる仕組みになっている。そのため、このトークンをDsqlDataSourceConfig.javaという設定ファイルの中で、二つの場所で設定する必要があった。一つは、データベース接続を効率的に管理するための「接続プール」であるHikariDataSourceを初期化する際だ。ここで初期のパスワードとして認証トークンを設定した。もう一つは、実際にSQL文を実行するために接続プールからデータベース接続を取り出すたびだ。接続トークンが期限切れになる可能性があるため、その都度新しいトークンを生成し、HikariDataSourceのパスワードを更新してから接続を取得するという処理を行っていた。
この接続方法は、セキュリティ面では優れているものの、開発者にとってはいくつかの不便さがあった。まず、認証トークンを生成するためのDsqlUtilitiesクラスへの依存が必要であり、そのためのライブラリをプロジェクトに追加しなければならなかった。次に、トークン生成とパスワード設定のコードが複数の場所に分散し、繰り返し出現していたため、コードの可読性が低下し、メンテナンスが複雑になるという問題があった。また、トークンの有効期限を考慮して毎回パスワードを更新する処理は、定型的な作業でありながら手動で実装する必要があり、開発体験が良いとは言えなかった。このような繰り返しの処理は、ヒューマンエラーの原因にもなり得る。
このような課題を解決し、Aurora DSQLのIAM認証をより簡単に利用できるようにするために、AWSは「Aurora DSQL JDBC Connector」をリリースした。このコネクタの主要な目的は、既存のPostgreSQL JDBCドライバーの上に認証レイヤーを追加することだ。これにより、開発者は既存のJDBC(Java Database Connectivity)ワークフロー、つまりJavaアプリケーションがデータベースと通信するための標準的な方法をほとんど変更することなく、Aurora DSQLのIAM認証を利用できるようになる。
従来のPostgreSQLドライバーは、Aurora DSQLが要求するIAM認証の仕組みを直接はサポートしていない。しかし、この新しいAurora DSQL JDBC Connectorを使うことで、PostgreSQL互換のインターフェースを持つAurora DSQLに、IAM認証を通じてシームレスに接続することが可能となる。コネクタは以下のような重要な機能を提供する。
まず、「IAMトークンの自動生成」だ。開発者が明示的に認証トークンを生成するコードを書く必要がなく、AWSの認証情報(例えば、環境変数やAWS設定ファイルに保存されたアクセスキーなど)を使って、必要なIAMトークンをコネクタが自動的に生成してくれる。これにより、開発者は認証の詳細に気を取られることなく、ビジネスロジックの実装に集中できる。
次に、「シームレスな統合」である。既存のJDBC接続パターン、つまりDriverManager.getConnection()や接続プーリングライブラリを使った接続コードにほとんど変更を加えることなく、コネクタを導入できる。これは、既存のアプリケーションをAurora DSQLに移行する際の労力を大幅に削減できることを意味する。
さらに、「多様なAWSクレデンシャルプロバイダーのサポート」も強みだ。デフォルトの認証情報プロバイダーチェーン、プロファイルベースの認証情報など、さまざまな方法でAWSの認証情報を取得できるため、多様なデプロイ環境に対応できる。
そして、「接続プーリングライブラリとの連携」も重要なポイントだ。HikariCPのような一般的な接続プーリングライブラリは、アプリケーションのパフォーマンスを向上させるためにデータベース接続を再利用する。Aurora DSQL JDBC Connectorは、接続プールが新しい接続を確立する際にIAMトークンの生成を自動的に処理してくれるため、接続プールが正常に機能し続ける。これにより、開発者は接続プールの設定を変更することなく、セキュリティとパフォーマンスの両方を享受できる。
実際にAurora DSQL JDBC Connectorを導入すると、コードはどのように変わるのだろうか。具体的な変更点を見てみよう。
まず、プロジェクトのビルド設定ファイルであるpom.xmlに、Aurora DSQL JDBC Connectorの依存関係を追加する。これにより、アプリケーションがコネクタの機能を利用できるようになる。具体的には、software.amazon.dsql:aurora-dsql-jdbc-connectorというライブラリを追加する。
次に、データベース接続URLの形式が変更される。これまではPostgreSQLの標準的なJDBC URL形式を使用していたが、コネクタを使用する場合はjdbc:aws-dsql:postgresql://という特別なプレフィックスが付いたURL形式を使用する。このプレフィックスが、Aurora DSQL JDBC ConnectorがJDBCドライバーとして動作することを示す。URLにはデータベースのエンドポイントやポート番号、データベース名、そしてSSL接続のための設定が含まれる。さらに、token-duration-secs=900というURLパラメータを追加することで、自動生成されるIAM認証トークンの有効期間を秒単位で指定できるようになった。この例では900秒(15分)に設定されている。
そして最も大きな変化は、認証トークンを生成し、パスワードとして設定するコードが一切不要になることだ。以前のコードでは、DsqlUtilities.generateDbConnectAdminAuthToken()を呼び出し、その結果をconfig.setPassword()やhds.setPassword()に渡していた。しかし、コネクタを導入すると、これらのコードはすべて削除できる。HikariDataSourceの初期化コードは、ユーザー名とJDBC URL、接続プールの設定のみに簡素化される。また、接続プールからデータベース接続を取得するメソッドも、単にhds.getConnection()を呼び出すだけとなり、認証トークンの更新処理が完全に不要となる。
この変更により、DsqlUtilitiesクラスへのコンパイル時依存も不要となる。アプリケーションのコードは、まるで純粋なJDBC実装のように見える。つまり、Aurora DSQLの認証に関する複雑な処理を意識することなく、一般的なJDBCプログラミングのパターンでデータベースに接続できるようになる。もちろん、実行時にはjdbc:aws-dsql:postgresqlというURL形式が指定されているため、Aurora DSQL JDBC ConnectorがJDBCドライバーとして機能し、裏側でIAM認証の処理を担ってくれる。
結論として、Aurora DSQL JDBC Connectorの導入は、開発者にとって大きなメリットをもたらす。コードは大幅に簡素化され、認証トークンの手動管理や更新といった煩雑な作業から解放される。これにより、開発体験が向上し、より生産的にアプリケーション開発に取り組むことができるようになる。Aurora DSQLを利用するサーバーレスアプリケーション開発において、このコネクタはデファクトスタンダードとなるだろう。