pg の DeprecationWarning と AWS X-Ray SDK の互換性問題
CloudWatchに、以下のような警告が大量に出力されていました。
(node:9) DeprecationWarning: Client.activeQuery is deprecated and will be removed in pg@9.0
今回は、この警告の原因と対処方法、さらに今後 pg@9 へアップデートする際の注意点を整理します。
使用しているライブラリ
対象のアプリケーションでは、主に以下を使用しています。
- Node.js
- PostgreSQL
-
pg(node-postgres) aws-xray-sdk-postgres- AWS X-Ray
- AWS Lambda
aws-xray-sdk-postgres では、capturePostgres() を使って pg をパッチし、PostgreSQLへのクエリを X-Ray のサブセグメントとして記録しています。
const capturePostgres = require('aws-xray-sdk-postgres')
const pg = capturePostgres(require('pg'))
発生している警告
pg を新しいバージョンへ更新したところ、Lambda のログに以下が出るようになりました。
DeprecationWarning: Client.activeQuery is deprecated and will be removed in pg@9.0
同様に、環境によっては Client.queryQueue is deprecated という警告も発生します。
これらはクエリの失敗を示すエラーではなく、pg の内部プロパティが非推奨になったことを知らせる警告のようでした。
原因
原因は aws-xray-sdk-postgres が、pg の activeQuery や queryQueue を参照していることです。
X-Ray の PostgreSQL パッチャでは、クエリの開始・終了に合わせてサブセグメントを管理するため、実行中のクエリを取得しています。
内部では概ね次のような処理が行われています。
const result = this.__query.call(this, args)
query = this.activeQuery
if (this._queryable && !this._ending) {
if (this.queryQueue.length === 0) {
// ...
}
}
一方、pg は 8.17.0 以降、activeQuery へのアクセスを非推奨にしました。
現在の activeQuery は内部の _activeQuery を返す getter になっており、この getter を呼び出すと DeprecationWarning が発生します。
つまり今回の警告は、
アプリケーション
↓
aws-xray-sdk-postgres
↓
Client.activeQuery を参照
↓
pg が DeprecationWarning を出力
という流れで発生しています。
対応方法
今回の警告だけを回避するのであれば、aws-xray-sdk-postgres の capturePostgres() を使用しない方法があります。
const pg = require('pg')
ただし、この方法では PostgreSQL のクエリを X-Ray のサブセグメントとして取得できなくなります。
より長期的な対応としては、AWS X-Ray SDK から OpenTelemetry への移行を検討する必要があります。
AWSは現在、X-Ray SDK / X-Ray デーモンを 2026年2月25日からメンテナンスモードとしており、以降は新機能を追加せず、セキュリティ問題への対応に限定するとしています。また、アプリケーションの計装については OpenTelemetry への移行を推奨しています。
今回使用している aws-xray-sdk-postgres も X-Ray SDK の一部であるため、activeQuery の警告だけを個別に回避するより、将来的には OpenTelemetry へ置き換えるのが良さそうでした。
現在のAWS公式「X-Ray SDK とデーモンのサポートタイムライン」ではおそらく内容が変更されています。
というのも、Classmethodの記事を含む複数の資料では「2027年2月25日にX-Ray SDK / デーモンがサポート終了」と説明されていますが、
現在は以下の記載をしています。
一般提供
~ 2026-02-25
メンテナンスモード
2026-02-25 ~
終了日: 該当なし
そのため、「2027年2月25日までに必ず移行する必要がある」とは現時点では言えませんが、X-Ray SDK は今後積極的に機能追加されるSDKではないため、OpenTelemetryへの移行を進める
という方針を取るのが良さそうという結果になりました。