The Summary
大手小売りチェーン企業がアマゾン ウェブ サービス(AWS)上で開発したオムニチャネル対応店舗管理システムは、構築から5 年以上安定した稼働が続いており、なるべく手をかけず長く利用したいと考えられていた。しかし利用していたAmazon RDS for MySQL 5.6 のサポートが終了するため、5.7 への更新が必要となる。動的SQLも多くSQL の取得が難しい中、移行を担当したNTT データではInsight Database Testing( 以下 Insight DT) を用い、2 億7000 万件のSQL を取得し2 週間足らずで全てのテストを実行、エラーがないことを確認し問題なく更新を完了した。
Amazon RDSでは決められたタイミングでのバージョンアップ対応が必要
NTT データでは、顧客の要望に応じてクラウド活用など幅広いIT サービスを提供している。全国展開している大手小売りチェーン企業では、NTT データがサポートして、2015 年からEC サイトと店舗を連携させるオムニチャネル対応店舗管理システムをクラウドで構築し利用してきた。これはフルAWS 上で自社開発したオムニチャネルのシステムで、裏側ではさまざまシステムとも連携しており、かなり画期的なものだった。
このシステムは5 年が経過しても順調に稼働を続けており、適宜修正は加えるとしても長く運用したいと考えられていた。そのような状況の中利用していた RDS for MySQL 5.6のサポートが終了することとなり、バージョンを 5.7 に更新しなければならなくなる。そこで Amazon EC2 上にMySQL 5.6 を構築する、Amazon Aurora に移行するなどの案が検討された。しかし、影響を最小化するためにAmazon RDS の利用を継続しバージョンアップすべきだと判断した。
ソースコードから抜き出せない膨大なSQLのテストを効率的に実施したい
ここで課題となったのが、バージョンアップに伴い SQL が正常に稼働するかの確認だった。システムではパッケージのプログラムが動的に SQL を生成しており、ソースコードから SQL を全て抜き出すことができない。試験的に5.7に移行し一部処理を動かしてみたところ、連携するシステムもあり SQL の網羅性を担保するのは難しいものがあると分かった。移行後に業務側の操作だけで確認するのではなく、データベースのログを見て SQL を確認する必要があると考えられたのだ。
そのためNTTデータでは SQL 検証のツールを独自に構築し、MySQL 5.6 の環境から SQL を抽出して 5.7 で動かし、エラーが出ないことを確認することとした。ソースコードからは抜き出せないので、このツールで流れているところから SQL を抽出し動作検証することにしたのだ。ツールの利用で作業性は向上するが、SQL の抽出には多くの時間がかかるのが新たな課題だった。
今回の移行プロジェクトは 2021 年 2 月から始まり、8 月のサポート終了に間に合わせるため 7 月中旬までに移行しテストを終える必要があった。3 月には Amazon RDS をバージョンアップする方針を決め、移行を試行し SQL テストツールの開発も行う。
これらと並行して、移行のための情報交換をアマゾン ウェブ サービス ジャパン株式会社と行っていた。そこで話題となったのが SQL テストの自動化を実現する「Insight Database Testing」だった。内製ツールには自分たちのやりたいことができる自由度があったが、性能面では Insight DT に大きな優位性があった。その上で製品として提供されているため、信頼性も高いと考えられた。
NTTデータでは、社内にさまざまな技術情報を収集する部署があり、事例や業界動向、各種製品の評価情報などが集められ、社内からの問い合わせに技術情報を提供している。そこからもインサイトテクノロジーの名前が出ていたこともあり、今回のプロジェクトで Insight DT の採用が決まった。
Insight Database Testingで2億7000万件ものSQLを抽出しそのテストを2週間で完了
実は2021年3月の段階で、Insight DTはAmazon RDS for MySQLには正式対応していなかった。とはいえMySQL用のエンジンはあり、インサイトテクノロジーに相談したところすぐに対応したものが用意された。またデータベースのログから抽出する際に、連続して発行されるSQLではコネクトした際の情報しか得られず、誰が発行したかが分からないケースがある。これは内製ツールでも問題だったが、Insight DTで修正依頼したところすぐに対応がなされた。
また Amazon RDS では、他のデータベースとは異なるログの取り方となっており、Insight DT で処理するためにはそれを手作業で加工する必要もあった。その中でどのようにログを取得すれば良いかのアドバイスもインサイトテクノロジーから受けることができた。さらに加工した SQL のファイルを 1 つずつテストするのだが、処理にどれくらいかかるかが分からず、終わるのを待つのがかなりの手間だった。これについてもテストを自動化するスクリプトをインサイトテクノロジーから提供してもらい、夜間に自動でテストできるようになり効率化できたのだ。
最終的には連続した 3 日間の処理からログを収集し、 Insight DT を用い取得した SQL は約 2 億 7000 万件となった。全ての SQL のテストには、2 週間ほどの時間がかかったが、これを内製ツールで行えば、数倍以上の時間が必要だったと考えられる。テスト結果は、当初ログ収集の仕方が悪くエラーとなったものもあったが、全体でエラーとなる SQL はなかった。網羅した SQL でエラーが出なかったため安心して移行できると確認され、その後の Amazon RDSのバージョンアップは問題なく実施された。
Insight Database Testing の有効性が実証され今後他のプロジェクトへの横展開も
今回のプロジェクトでは、インサイトテクノロジーから Insight DT だけでなく MySQL のバージョンアップに関する知見も提供され、データベースの専門家としての総合的な対応がスムースな移行につながったと NTTデータでは考えている。また技術的な質問に対するレスポンスの速さ、改善して欲しい点のリクエストへの迅速な対応も高く評価している。さらに今回 Insight DT を AWS Marketplace から期間限定で導入し利用できたことで、コスト的にも最適化できたと考えている。
今回の Insight DT を利用したバージョンアップに伴う SQL テストは、成功事例としてNTTデータ社内に情報蓄積される。今後同様の課題があった際には、他のNTTデータのプロジェクトでも Insight DT が活用されることとなりそうだ。一方 AWS 上で Insight DT を活用するには、ログを加工するなど手作業も必要であり、より作業負荷を軽減し自動でテストができるようなツールの進化が期待されている。