Babelfish for Aurora PostgreSQLでKenticoをセットアップしてみた話とBabelfish Compassの紹介

2021.12.15

いわさです。

少し前にBabelfish for Aurora PostgreSQLがGAになりました。
AuroraのBabelfish機能を使うと、Microsoft SQL ServerをデータストアとするアプリケーションのデータストアをAurora PostgreSQLで動作させることが出来ます。

上記記事の最後で少し触れていますが、本日はKenticoインストーラーを使って初期状態のAurora PostgreSQLをデータストアにセットアップを行ってみました。

先にお伝えしておくとセットアップには失敗しています。

ただ、実利用にあたって事前にこれをしておくと良いかなというものに、Babelfish Compassというものがあってこちらを少し触ってみました。
こちらを最後に紹介します。

Babelfishの有効化

前回の記事のようにBablfishを有効化します。

有効化にあたってキャパシティータイプ、エンジンバージョンに気をつける必要があります。

WebサーバーとなるEC2(Windows2019)を作成して、Auroraへ疎通確認だけしておきました。

PS C:\Users\Administrator> Test-NetConnection database-1.cluster-cpnu9ipu74g4.ap-northeast-1.rds.amazonaws.com -Port 1433

ComputerName     : database-1.cluster-cpnu9ipu74g4.ap-northeast-1.rds.amazonaws.com
RemoteAddress    : 172.31.16.178
RemotePort       : 1433
InterfaceAlias   : Ethernet 2
SourceAddress    : 172.31.18.248
TcpTestSucceeded : True

Kenticoインストール

さて、以下の記事を参考にKenticoをインストールします。

インストーラーの途中でデータベースをセットアップすることが出来ます。
I have access to SQL serverにチェックをし、Auroraのライターエンドポイントと認証情報を入力します。

Establish connectionを押すと接続テストを行ってくれます。
接続テストは成功しました。

ではインストールボタンを押します。

インストールボタンを押した直後、インストーラーがスタックトレースをメッセージボックスにて表示しています。
どうやら失敗したようですね。

例外のメッセージとスタックトレースから、SQLクライアントからhas_perms_by_name組み込み関数を使うクエリを発行したことで、SQL Server(Aurora)がエラー応答したことがわかります。

RDS SQL Serverで試してみる

そもそもインストーラーの問題なのか、Auroraの問題なのかを切り分けるために、RDS SQL Serverでも試してみましょう。

同じようにエンドポイントと認証情報を入力します。

インストールはうまくいってそうですね。

無事セットアップされ、コンテンツが表示されました。

組み込み関数を確認してみる

ここまでで、どうやらインストーラーは正常で、Auroraに問題がありそうということがわかりました。
Aurora/RDSそれぞれにパブリックアクセスして直接クエリを実行し、再確認してみます。

RDS SQL Server

1> select has_perms_by_name(null, 'DATABASE', 'ANY');
2> go
           
-----------
          1

(1 rows affected)

Aurora(Babelfish)

1> select has_perms_by_name(null, 'DATABASE', 'ANY');
2> go
Msg 33557097, Level 16, State 1, Server BABELFISH, Line 1
function has_perms_by_name(unknown, unknown, unknown) does not exist

やはり、has_perms_by_nameがサポートされていないようですね。

Babelfish Compassを使う

KenticoはBabelfish for Aurora環境へセットアップすることは出来ませんでした。
では、こういった場合はAuroraで実行することは難しいのでしょうか。

Babelfishでは既存のSQL Serverからの移行方法が案内されています。

Using Babelfish to migrate to PostgreSQL - Amazon Aurora

ポイントだけお伝えすると、以下の流れが推奨されています。

  1. 移行元からDDLとDMLをエクスポートする
  2. Babelfish Compassでアセスメントを実施し、スクリプトを修正する
  3. 移行先で修正したスクリプトを実行

本日は 2.のBabelfish Compassを少し触ってみましたので本記事の補足情報として紹介したいと思います。

Babelfishの公式リポジトリとしてメンテナンスされています。
このツールを使うと、セットアップ用のDDLの互換性を評価することが出来ます。
これにより移行前に問題点のある程度の洗い出しをし、必要な修正作業量を見積もることが出来ます。

使い方

今回は問題があった組み込み関数が含まれるスクリプトが存在するものと仮定してツールを実行してみましょう。

iwasa.takahito@hoge BabelfishCompass % cat hoge.sql 
select has_perms_by_name(null, 'DATABASE', 'ANY');

ツールを実行するとレポートが出力されるので、そのレポートを参照して互換性評価内容を確認する形となります。
出力レポートファイル名と、評価対象のスクリプトを指定します。

iwasa.takahito@hoge BabelfishCompass % ./BabelfishCompass.sh hogereport hoge.sql 
Babelfish Compass v.1.1, November 2021
Compatibility assessment tool for Babelfish for PostgreSQL
Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.

...

Importing /Users/iwasa.takahito/Downloads/BabelfishCompass/hoge.sql, for application 'hoge'
Analyzing /Users/iwasa.takahito/Downloads/BabelfishCompass/hoge.sql, for application 'hoge'; #batches/lines: 1/0

...

*** Mac (dev msg): opening report in browser: cmd=[ open . /Users/iwasa.takahito/BabelfishCompassReports/hogereport/report-hogereport-bbf.1.0.0-2021-12-15-07.09.50.html]

レポートを確認してみましょう。

--------------------------------------------------------------------------------
--- Applications Analyzed (1) --------------------------------------------------
--------------------------------------------------------------------------------
Back to Table of Contents

     hoge (1 lines SQL)

--------------------------------------------------------------------------------
--- Assessment Summary ---------------------------------------------------------
--------------------------------------------------------------------------------
Back to Table of Contents

    #applications            : 1
    #input files             : 1
    #SQL batches             : 1
    #lines SQL/DDL processed : 1
    #lines SQL in objects    : 0    (procedures/functions/triggers/views)
    total #SQL features      : 2
    Supported                : 1
    Not Supported            : 1

--------------------------------------------------------------------------------
--- Object Count ---------------------------------------------------------------
--------------------------------------------------------------------------------
Back to Table of Contents

No objects were found.


=== SQL Features Report ========================================================

--------------------------------------------------------------------------------
--- SQL features 'Not Supported' in Babelfish v.1.0.0 --------------------------
--------------------------------------------------------------------------------
Back to Table of Contents


Built-in functions (1/1)
    HAS_PERMS_BY_NAME() : 1

サポートされていない組み込み関数が使われているとしてHAS_PERMS_BY_NAME()が検出されていますね。
利用者はこのレポートを確認し、動作させるためにスクリプトを修正します。
これは個別に対応が必要です。

ここでは、ユーザーの権限を確認したかったので、以下のようにpg_catalog.pg_rolesのユーザー権限を確認するように変更してみました。
Babelfish上でもアクセスが可能です。

1> select rolname, rolcreatedb from pg_catalog.pg_roles where rolname = 'postgres';
2> go
rolname                                                                                                                                                                                                                                                          rolcreatedb
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -----------
postgres                                                                                                                                                                                                                                                                   1

(1 rows affected)

このように、利用者はセットアップスクリプトの実行を繰り返しながらトライアンドエラーを繰り返す前に、このツールを使ってある程度の修正見込みをたてることが出来ますね。

まとめ

本日はBabelfish for AuroraへのKenticoのセットアップ(失敗)とBabelfish Compassを試してみました。 そのままインストーラーを使ってセットアップする類いは難しそうですね。Kenticoはアップデートもインストーラーを使って実行するので悩ましいところですが、アップデート用のSQLスクリプトも存在しているので、そういった場合は代替手段が取れそうですね。

ただ、エクスポートしたDDL/DMLを修正し、移行する方法がありますのでその方法を取ってみましょう。
その際に、Babelfish Compassを使うことで、簡単に事前の互換性評価を行うことが可能です。
Babelfishへの移行を考え始めている方は、まずは互換性評価だけでも是非やってみてください。

なお、データストアを移行出来たとして、アプリケーションで実装しているクエリの評価を行うものではないので、その点はご注意ください。