[アップデート] Babelfish を有効化した Aurora PostgreSQL でもメジャーバージョンアップが出来るようになりました

2023.02.08

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

いわさです。

Aurora PostgreSQL には Babelfish という Microsoft SQL Server 向けに作成されたアプリケーションを Aurora でも動作させるためのオプション機能があります。

実は、これまでは Babelfish 機能を有効化した Aurora クラスターはメジャーバージョンアップグレードが出来なくなるという制限がありまして、以下の記事でアップグレードが出来ないことを以前確認していました。

そして先日 Aurora のアップデートで PostgreSQL 14.6 がサポートされまして、Babelfish も最新の 2.3.0 が利用出来るようになりました。

その Babelfish 2.3.0 の新機能でなんと Aurora PostgreSQL 13.6 以降から 14.6 へのメジャーバージョンアップグレードがサポートされました。

New features
Supports major version upgrade from Babelfish for Aurora PostgreSQL DB cluster 13.6 and later to Aurora PostgreSQL 14.6.

ということで本日は Babelfish を有効化した Aurora PostgreSQL のメジャーバージョンアップグレードを試してみました。

13.6 から 14.6 へ

クラスターパラメータグループをあわせる必要がある

13.6 のBabelfish 有効化クラスターを作成しメジャーバージョンアップグレードを行ってみます。
基本的なアップグレード手順は非 Babelfish クラスターと同じで、クラスターの変更からアップグレード先の DB エンジンバージョンを指定するだけです。

以前試した際にはこのクラスターの変更操作時にメジャーバージョンアップグレードは出来ないというエラーメッセージが表示されていましたがどうなるかな。

今回もエラーメッセージが表示されてしまいました。

ただし、前回見たエラーメッセージとはエラー内容が少し違うようです。
Amazon Translate で翻訳してみました。

現在の rds.babelfish_status パラメーター設定がターゲット DB クラスターパラメーターグループの設定と一致しない場合、Babelfish を実行している Aurora PostgreSQL DB クラスターのメジャーバージョンアップグレードはサポートされません。ターゲット DB クラスターパラメータグループの rds.babelfish_status の設定を変更して、もう一度試してください。

なるほど。
アップグレードのための変更時に 14 用のクラスターパラメータグループに変更する必要があるのですが、デフォルトのパラメータグループを使ってしまっていました。

Babelfish ではクラスターパラメータグループに Babelfish 用のオプションがいくつかあって、コンソールから Babelfish を有効化するとそれらがカスタマイズされたクラスターパラメータグループが自動で作成されます。
アップグレード時には自動作成されないので新しいパラメータグループを先に作成する必要があったということですね。

Babelfish を有効化したパラメータグループを準備しておく

ではクラスターパラメータグループを作成します。
新規作成で aurora-postgresql14 の DB Cluster Parameter Group を選択します。

そして、rds.babelfish_statusがデフォルトでoffになっているはずなのでonに変更します。

今回はrds.babelfish_statusのみ変更しましたが、他にも気にするべきパラメータがいくつかドキュメントで案内されています。
私は 13 をデフォルトで作成していたので差分が出ていませんでしたが、カスタマイズしている場合はこのあたりのパラメータも旧とあわせる必要があるのでご注意ください。ロケールやマイグレーションモードとかははまりそうです。

  • rds.babelfish_status
  • babelfishpg_tds.tds_default_numeric_precision
  • babelfishpg_tds.tds_default_numeric_scale
  • babelfishpg_tsql.database_name
  • babelfishpg_tsql.default_locale
  • babelfishpg_tsql.migration_mode
  • babelfishpg_tsql.server_collat​​ion_name

参考:Babelfish version updates - Amazon Aurora

では、作成したパラメータグループを指定してもう一度アップグレード操作をしてみましょう。

今度はアップグレードに成功しました。
RDS コンソール上はエンジンバージョンが 14.6 に変わったことが確認出来ます。

psql をクラスターエンドポイントに接続し、babelfish_dbで以下のコマンドを使って Babefish のバージョンなどを確認してみましょう。

babelfish_db=> SELECT aurora_version() AS aurora_version, version() AS postgresql_version, sys.version() AS Babelfish_compatibility, sys.SERVERPROPERTY('BabelfishVersion') AS Babelfish_Version;
 aurora_version |                                       postgresql_version                                        |                           babelfish_compatibility                           | babelfish_version 
----------------+-------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------+-------------------
 14.6.0         | PostgreSQL 14.6 on x86_64-pc-linux-gnu, compiled by x86_64-pc-linux-gnu-gcc (GCC) 7.4.0, 64-bit | Babelfish for Aurora PostgreSQL with SQL Server Compatibility - 12.0.2000.8+| 2.3.0
                |                                                                                                 | Jan  7 2023 00:18:07                                                       +| 
                |                                                                                                 | Copyright (c) Amazon Web Services                                          +| 
                |                                                                                                 | PostgreSQL 14.6 on x86_64-pc-linux-gnu (Babelfish 2.3.0)                    | 
(1 row)

こちらでも Aurora PostgreSQL のバージョンが 14.6.0 で、Babelfish が SQL Server 12.0.2000.8 と互換性のある 2.3.0 であることが確認出来ました。

13.5 から 14.6 の場合はマイナーバージョンアップデートを挟む必要がある

今回のメジャーバージョンアップグレードは 13.6 以上からのみアップグレードが可能です。
ただし、13.5 から 13.6 以降へのマイナーバージョンアップグレードは可能ですので、13.5 → 13.x → 14.6 という流れでメジャーバージョンアップグレードが可能なのかを確認してみます。

まず確認ですが、13.5 から 14.6 への直接アップグレードはやはり出来ませんでした。
Amazon Translate で翻訳したエラーメッセージは以下です。

Babelfish を実行している Aurora PostgreSQL DB クラスターの特定のソースバージョンからのメジャーバージョンアップグレードはサポートされていません。詳細については、Aurora PostgreSQL のドキュメントを参照してください。

明確に対象クラスターはメジャーバージョンアップグレードサポートされていないと表示されていますね。

では、続いて次のようにまず 13.5 をマイナーバージョンアップグレードします。
ここでは本日時点の 13 系最新である 13.9 へアップグレードしました。13 系なのでクラスターパラメータグループは変更なしでいけます。

13.9 へのアップグレードが完了したら、先程と同様にパラメータグループに気をつけながら 14.6 にアップグレードします。

14.6 へのアップグレードが出来ました!

メジャーバージョンアップグレード後 SQL クライアント側から接続エラーが発生

アップグレード後に psql で接続出来てめでたしめでたしと思っていたのですが、sqlcmd で接続してみると次のエラーが発生しました。

% sqlcmd -S hoge0208babelfish1306.cluster-cpnu9ipu74g4.ap-northeast-1.rds.amazonaws.com -U postgres
Password: 
Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : Login timeout expired.
Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : TCP Provider: Timeout error [258]. .
Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : Unable to complete login process due to delay in prelogin response.

13.6 および 13.5 どちらでも発生しました。
解決方法わからず困っていましたが、この問題は Aurora クラスターを再起動すると解消しました。

% sqlcmd -S hoge0208babelfish1306.cluster-cpnu9ipu74g4.ap-northeast-1.rds.amazonaws.com -U postgres
Password: 
1> select * from piyo;
2> go
foo                 
--------------------
hoge1               

(1 rows affected)

14.5 以前のバージョンへのメジャーバージョンアップグレードは出来ない

今回の機能は 14.6 のものになるので、14.5 以前へのメジャーバージョンアップグレードについては引き続きサポートされていませんのでご注意ください。
コンソール上は選択出来ますが変更しようとすると次のようにエラーメッセージが表示されます。

さいごに

本日は Babelfish を有効化した Aurora PostgreSQL でもメジャーバージョンアップが出来るようになったとのことなので実際に試してみました。
再起動するまで sqlcmd から接続できなくて最初焦りましたが無事アップグレードと接続の確認が出来ました。

これまでメジャーバージョンアップグレードが出来ないという制限によって Babelfish の導入を見送るシーンがあったかもしれませんが、今回のアップデートで解消されたので是非使ってみてください。