AWS DMS StudioとかFleet Advisorとかって何ぞ

## 先に個人的な感想

DMS Studio/Fleet Advisorは大規模なDB移行プロジェクトの調査段階に用いると有効な機能であり、DMSでの移行対象DBが特定できている場合には、ベネフィットは小さい機能だと思います。

## はじめに
2021年の12月にDMSの新機能がいくつかリリースされました。

https://aws.amazon.com/jp/about-aws/whats-new/2021/12/aws-database-migration-service-aws-dms-studio/

説明には以下のように書かれているのですが、イメージがつかめなかったので少し調べてみました。

> AWS DMS Studio は、AWS DMS Fleet Advisor (データベースと分析フリートのインベントリと分析を行うため)、AWS Schema Conversion Tool (SCT) (データベーススキーマとアプリケーションコードを変換するため)、および AWS DMS (データを移行するため) を統合します。

Web上のブログにもあまり情報がなかったのでメモ書きレベルで残しておきます。



## DMS Studioって？

**[DMS Studio]というのは、単にDMSのマネジメントコンソール上で[DMSスタジオ]をONにした状態のことを指します。**
つまり[DMS Studio]は新しいバージョンのインターフェースにすぎない、ということです。

- 通常のインターフェース
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538058/00be57ad-94a1-8071-3494-aa5955aec018.png)

- DMSスタジオを ONにした場合のインターフェース
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538058/16a3dd6b-e930-685a-99bd-cc6784b42b5d.png)

## Fleet Advisorってどこにあんの？

- **DMS StudioをONにした場合に出てくる新しいメニュー・新機能の[データコレクター]と[インベントリ]が、[DMS Fleet Advisor]です。**
- サービス発表当時は[Fleet Advisor]と表示されていたメニュー名が、2022年10月現在 [検出] に変わっています。これは、ファーストインプレッションではピンとこない[Fleet Advisor]という名称をAWSが今後使わなくなる予兆なのかもしれません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538058/c37104c3-b192-4e6c-67e7-729b359de573.png)


- ちなみにメニュー内の「スキーマ変換」は従来から存在するSCT(Schema Conversion Tool)であり、クリックするとSCTのダウンロード画面が表示されるだけの機能になっています。

- [Fleet Advisor]で検索すると公式ページが見つかるのですが、2022年10月現在、ページ内の[AWS DMS Fleet Advisorの使用を開始する]リンクをクリックするとDMSのページではなく、AWSのマネジメントコンソールのホームに飛ばされます。しかもDMSのページにも[Fleet Advisor]というメニューが存在していないため、あたかも悪い夢を見ているかのような印象を受ける方が多いと思われるため、上記の通り補足解説を致しました。
  - https://aws.amazon.com/jp/dms/fleet-advisor/

## Fleet Advisorとは

- 一言でいえば、**「オンプレにマイグレーション対象のDBが大量にある場合に、ネットワークレベルでスキャンをかけてDBの情報を収集し一覧化する機能」** というのが個人的な印象です。
  - 「データコレクター」はDB情報の収集までを担い、「インベントリ」はDB情報の確認・判断を行うインターフェースとなっています。
  - 無料で利用できます。
  - スキャン対象はオンプレである必要はないのですが、サービス設計としてはオンプレを想定しているとのことです。
    - 収集用ツールのインストールが必要なところが、クラウドと切り離された(けれどインターネット接続可な)インフラに使える設計を感じさせます。

- DBのアセットを一覧管理できるというだけではあまり意味を感じませんが、**各スキーマの類似度をパーセンテージで表示してくれたり、DBエンジンのバージョンのサポート期間を表示してくれたりと、マイグレーション計画を行う上で作業の総量を把握するのに役立ちます。**
  - 余談ですがこの機能は事業者であるユーザ企業にとってはプロジェクト化(予算・工数化できる状態)する前に使いたい機能です。それを踏まえると、プロジェクト化してから動く習慣のあるSIerに所属している私にとっては、顧客アプローチ上アクセスしづらいサービスとも言えます。ユーザ企業様は雑談レベルでもよいので、事業計画前にSIerにお声がけ頂けると嬉しいです。

 - 使い方としては **LDAP(AD)にアクセス可能なWindows OSにツールをインストールして利用**します。ツール上からADを指定し、そこから(WIndowsの場合は)WMIクエリでOSやDBエンジン、スキーマ情報などを絨毯爆撃で取得してくる形です。
 - AD上にコンピュータとして登録されているリソースは初期から自動で表示され、そうでないサーバは手動登録したり、WMIクエリが届かない場合やLinuxへのSSHクエリなどに関しては、自分で接続情報を登録することもできます。
   - AWSでは似たようなサービスでオンプレのOSやパッケージなどの情報を収集してくれる [Application Discovery Service(ADS)]というサービス(現在はMigration Hubに統合)がありますが、それのDB特化版みたいなイメージでしょうか。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538058/e7b4d3f7-c1e9-ccda-d860-861828d292bf.png)

画像出典：https://www.youtube.com/watch?v=mMEONHthZs8


## Fleet Advisorの使い方

### データコレクター
- まず、初期設定として収集結果を保存するS3バケットと、それ用のIAMロールを作成します。
 - バケットは何でもいいと思いますが、IAMロールはちょっと独特で信頼関係にDMSを指定してS3fullのポリシーを入れるだけではだめだったので、以下の手順にそって作成してください。(s3アクセスの他に、dmsにたいしてのアクションや、dms-fleet-advisorへの信頼関係などが必要になります)
   - https://docs.aws.amazon.com/dms/latest/userguide/CHAP_DMSStudio_GettingStarted_Prerequisites.html#CHAP_DMSStudio_GettingStarted_Prerequisites_IAM
   - (手間なのでサービスリンクロールで実現するなり、リンクのパラメータで作成自動化してくれればいいのに、と思う・・)
   - なお手順上のポリシー[DMSCollectorPolicy]の作成時に2022年10月現在、以下のようなエラーが表示されますが作成できますので無視してください（バリデーションが追いついていないだけかと思います）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538058/5afeff33-f95c-8986-ba92-b90749cb49c7.png)

 - 初期設定後の以下画面からデータコレクターツールをダウンロードして、LDAP(AD)にアクセス可能なWindows OSにインストールします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538058/eb23777a-1280-dc72-f07c-a74d03ab3d1b.png)


ここから先は私は試していないので、2021年末のサービス発表当時の動画から解説します。ですので画像は古い可能性があります。
画像出典：https://www.youtube.com/watch?v=mMEONHthZs8

- データコレクタを起動するとログイン用のユーザ登録を求められます。これはツールがWebサーバとして機能するため、認証機能として必要になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538058/5afbaf66-8871-4089-e6b4-ab64d02db75b.png)

- ツール上でLDAPサーバを登録します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538058/932e7f1e-b240-8403-5422-6ed286876ebc.png)

- 次に各種DBのドライバを別途、自分でインストールします。
  - 開発者いわくツールにバンドルしたかったのですが法的に不可能とのこと。

- AWSにデータをアップロード（同期）するためのIAMクレデンシャルを登録します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538058/799102cc-a536-df86-231e-9a5fc7dc2198.png)


- [Run Discovery]を押しLDAPサーバを指定すると、以下のように検出したサーバ一覧が表示されます。必要に応じて、サーバを手動追加したり、調査を行いたいサーバを[Add to monitored objects]でフィルタリングします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538058/87110cd6-3c44-bf80-9634-aee349e5fb79.png)

- 左メニューより[Monitored objects]に移動し、[Verify connection]を押すと接続テストが行われます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538058/b686be3b-30a5-d9e8-8bb1-45f83a4ff287.png)


- 必要に応じ追加したいDB接続情報などを入力し、[Start Collection]で、サーバの中身の詳細な情報を取得しにいきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538058/9a56c6bd-2783-6398-ad8c-0a95df7c4a74.png)

データコレクタでやるべきことは以上のようです。

### インベントリ

- インベントリは、ローカル側で実施したデータコレクタの取得結果をクラウドで確認するためのインターフェースです。
- AWSマネジメントコンソールに戻り、DMSのインベントリをクリックすると、データコレクタによって収集されたDBの詳細情報が確認できます。
  - DBのバージョンやエディション、EOL状況なども表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538058/cdc77fd9-00aa-93ab-8d7d-77fd3cba5bdd.png)

- [Schema]タブでは各DB内にあるスキーマの一覧と、その複雑さ、類似度が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538058/0a9d96e3-3e1a-a0d2-e982-84c0d834b9de.png)

公式によると、それぞれ以下のように解説があります。

> 複雑さの結果は、データベース内のコード行数を示します。複雑さの結果が 複雑であるデータベースは、コード ベースが大きいデータベースであり、移行の候補となる可能性があります。これは、これらのデータベースがインフラストラクチャにとっておそらく不可欠であるためです。

> 類似性スコアが高いスキーマは、通常、ステージングで使用される重複データベースなど、他のスキーマの重複です。類似性スコアが高いデータベースは、移行に適した候補ではありません。これは、これらのデータベースがおそらくメイン データベースの冗長コピーであるためです。

引用元：https://docs.aws.amazon.com/dms/latest/userguide/CHAP_DMSStudio_GettingStarted_Analyze.html

- つまり以下のような基準で判断のサポートとすべし、ということのようです。
  - 「Complexity」が高いものは、その複雑さゆえにシステム上の重要度が高いと想定されるため、移行対象の俎上に載せるべきである
     - 必ずしもそうでないような気もするのですが、まぁとりあえず考えてみなさいということでしょうか。
   - 「Similarity」が高いものは、コピーである可能性が高いので、片方は移行対象から除外すべきである

## で、あとは？
Fleet Advisorの機能としては以上のようにリスト化と助言を行うのみであり、あとはリストを元に人間が移行対象を判断して、SCTとDMSを駆使してマイグレーションせよ、という扱いのようです。

## 所感

- 最初にも書いたとおり、2022年10月時点では、DMS Studio/Fleet Advisorは大規模なDB移行プロジェクトの調査段階に用いると有効な機能であり、DMSでの移行対象DBが特定できている場合には、ベネフィットは小さい機能だと思います。
- オンプレ側に大量のDBがあり、資産・アセットとして管理しきれておらず、けれどEOLなどで移行計画を立てねばいけないときに、非常に効果を発揮すると思います。

以上、雑メモでした。