はじめに
Insight SQL TestingはWebAPIの提供も行っていて、Webブラウザで行う操作はすべてAPI経由で実行可能です。
ということは、
- 複数の評価SQLセットを一度に作る
- 評価SQLセット作成→アセスメント実行の一連の流れを定期的に実行する(諸事情につきAWSマイグレーション機能を使えないとき)
などの作業を効率的にできるようになります。
※Insight SQL Testing自体が何を実現するツールかについては下記をご参照ください。
https://qiita.com/takumats/items/e100370373dfa02e3164
そもそも
Insight SQL Testingの利用を考えるとき、どんな場面でAPIの利用が検討の俎上に載ってくるかがまずは大きな関心事項になる気がします。
Insight SQL Testingの利用シーンとInsight SQL Testingができることに照らし合わせてAPIの利用場面を考えてみましょう。
Insight SQL Testingの基本的な利用の流れ
以下の通りです:
- 評価SQLセットを作成する1
- ターゲットDB(テスト用DB)を準備&Insight SQL Testingに登録する
- アセスメントを実行する
- アセスメント結果を確認して必要なSQL修正を施す
ここで、評価SQLセットの作成方法について深堀してみると、
- (所定のフォーマットに則った)CSVをアップロード
- DBのログをアップロード
- Amazon RDSから作成
- Amazon CloudWatch Logsから作成
のいずれかの方法から選択することになりますが、オンプレ環境などで上記のうち後半2つが利用できない場合、手動でファイルをアップロードすることが作業として必要になります。
ところが、対象のファイルが大きい、ないし、数が膨大だとこれを一つずつ人手でアップロードすることはなかなか時間のかかる作業となってしまいます。
ので、APIを使って楽をしましょう!(唐突)
今回はRDSから直接ログを取る形で作成してみます(予めその設定をしておく)
実際のコード
# 認証してcookieを保存
curl \
-c cookie.txt \
-X POST \
-H "Content-type: application/json" \
-d '{"username": "<<ユーザ名>>", "password": "<<パスワード>>"}' \
http://<<発行済みのManagerサーバのIPアドレス>>:7777/idt/api/v2/auth
# 評価SQLセット作成
# POSTのBODY作成
postBody=$(cat <<EOF
{
"name": "sql_workload_0001",
"logStartTime": "2024-08-24T14:00:00Z",
"logEndTime": "2024-08-24T14:15:00Z",
"region":"ap-northeast-1",
"instanceId":"<<対象のDB識別子>>",
"databaseName":"<<対象のDB名>>",
"selectedAWSProfileName":null,
"unique":false
}
EOF
)
# RDSのログから作成。
curl \
-b cookie.txt \
-X POST\
-H "Content-type: application/json" \
-d "${postBody}" \
http://<<発行済みのManagerサーバのIPアドレス>>:7777/idt/api/v2/sql-workloads/from-rds-log
実際、上記を実行してみると↓↓
画面上でも間違いなく作成されていることが確認できました!
これを利用すれば大量のログを分割して評価SQLセットを作成することが可能で、また、CRON等と組み合わせることで夜間に評価SQLセットを自動で作成しておくなど、より効率的なアセスメントの準備ができます!
- SQLテストソフトウェア「Insight SQL Testing」
- https://www.insight-tec.com/products/sqltesting/
-
評価SQLセット=アセスメントの対象としたSQL群。テストケースになる。 ↩