AWS Application Discovery Serviceについて

# AWS Application Discovery Service とは

オンプレミスサーバ(EC2 含む)の情報を取得することができるサービスです。
最終目的としては AWS 上にサーバを移行することですが、サーバにクライアントをインストールもしくは AWS Application Discovery Agentless Connector を VMware vCenter の OVA としてインストールすることで簡単に情報が取得できます。

今回は現状の分析としても活用できるかなと思い、試してみます。

以下公式説明文

> AWS Application Discovery Service では、オンプレミスデータセンターに関する情報を収集することにより、エンタープライズのお客様の移行プロジェクト計画を支援しています。<br>
> データセンター移行計画には何千ものワークロードが存在し、多くの場合それらが相互に深く依存しあっています。サーバーの使用率データや依存関係のマッピングは、移行プロセス初期の重要なステップです。AWS Application Discovery Service では、サーバーの設定データ、使用状況データ、動作データが収集され、お客様に提供されます。これにより、お客様はワークロードを十分に把握することができます。<br>
> 収集されたデータは、AWS Application Discovery Service のデータストアに暗号化形式で保存されます。このデータを CSV ファイルとしてエクスポートし、AWS で稼働した場合の総所有コスト (TCO) の見積もりや、AWS への移行計画に使用できます。また、このデータは AWS Migration Hub でも利用できます。このサービスでは、検出したサーバーを AWS に移行し、AWS に移行する際の進捗を追跡できます。

https://aws.amazon.com/jp/application-discovery/

料金は**無料**となっています。

※S3,Athena,Kinesis Firehose,QuickSightなどの料金は別途かかります。

尚、本記事ではエージェントベースの検出についてのみ取り扱いをします。
エージェントレスの検出についてはドキュメントをご参照ください。

https://docs.aws.amazon.com/ja_jp/application-discovery/latest/userguide/discovery-connector.html

## 取得できるもの

以下に記載があります。(エージェント検出)

https://docs.aws.amazon.com/ja_jp/application-discovery/latest/userguide/agent-data-collected.html

IP アドレス、MAC アドレス、OS・CPU の種類といった基本情報から、読み取り/書き込みI/Oオペレーション数等詳細メトリクスも取得できます。

一部抜粋

|データフィールド|説明|
|---|---|
|hostName|データを収集したホストの名前|
|hypervisor|ハイパーバイザーのタイプ|
|ipAddress|ホストの IP アドレス|
|macAddress|ホストの MAC アドレス|
|osName|ホストのオペレーティングシステムの名前|
|osVersion|ホストのオペレーティングシステムのバージョン|
|totalDiskFreeSize (GB)|ディスク空き容量 (GB 単位)|
|totalDiskReadOpsPerSecond|1 秒あたりの読み取り I/O オペレーションの合計数|
|totalDiskSize (GB)|ディスクの合計容量 (GB 単位)|
|totalDiskWriteOpsPerSecond|1 秒あたりの書き込み I/O オペレーションの合計数|
|totalNumCores|CPU 内の独立した処理装置の合計数|
|totalNumCpus|CPU の合計数|

ただ、入っているアプリケーションやミドルウェアを取得するみたいなことはできないようです。(想定していたのがこの使い方なので残念です。)

## 導入方法
こちらを参考にさせていただき、EC2に導入しました。

https://zatoima.github.io/aws-ec2-application-discovery-service.html

かなり簡単に導入できました。
途中でアクセスキー IDとシークレットアクセスキーを入れる必要があるのですが、権限は​最低限"arsenal:RegisterOnPremisesAgent"があればよさそうです。

https://docs.aws.amazon.com/ja_jp/application-discovery/latest/userguide/security_iam_id-based-policy-examples.html#security_iam_id-based-policy-examples-ads-agentaccess

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675893/2509d8f2-696b-3d59-5f2b-69a9d8a28809.png)


## QuickSightで見える化
せっかくなので、Athenaの分析結果を利用してQuickSightで見える化してみます。

Athenaへのデータ出力は以下のページを参考にして有効化してください。

https://docs.aws.amazon.com/ja_jp/application-discovery/latest/userguide/ce-prep-agents.html

有効化すると以下のテーブルが作成されます。

- os_info_agent
- network_interface_agent
- sys_performance_agent
- processes_agent
- inbound_connection_agent
- outbound_connection_agent
- id_mapping_agent

QuickSightを立ち上げ、Athena・S3へのアクセス権限を付与します。
その後、データソースをAthenaとし、全てのテーブルを元にポチポチとデータセットを作成します。

(GUIからテーブル一気にデータセットへ登録することはできないんですかね。。。?)

![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675893/25877f30-78bb-690a-6a57-eedcb4dcaef2.png)


データセットから適当に分析を作成すると。。

時系列で実行されたコマンドが一覧で見れたり

![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675893/ef5c0f23-e183-de91-e39a-e55c3ad44d60.png)


CPU使用率の時系列推移が棒グラフで見れたりします。
![5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675893/c2872b7c-0487-9307-72ba-c37cbeedc56a.png)

[ポーリング間隔は15分][link-1]なのでちょっと微妙ですがこちらを参考にAutoScalingの閾値を設定する目安にする等活用法があると思います。
(監視などでCPU使用率などのメトリクスを見たい場合は[CloudWatch][link-2]を使う方が良いです。)


# まとめ
EC2にApplication Discovery Serviceを入れて情報を取得し、見える化してみました。感想としては「ポーリング間隔が15分」という点と「アプリケーション等は取得できない」という点がネックになるかなと思います。
ただ、オンプレミス・EC2サーバの情報を一元で取得でき、使用情報などを確認できるのはほかのサービスにはないメリットかなと思います。
ユースケースとしては、やはりオンプレミスのサーバ使用情報を確認してAWSに移行する際のサイジングの参考にするなどが考えられます。

[link-1]:https://docs.aws.amazon.com/ja_jp/application-discovery/latest/userguide/agent-data-collected.html
[link-2]:https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/US_AlarmAtThresholdEC2.html