CloudFormationをゼロから勉強する。（番外編：AWS Perspective）

# はじめに
今回は[CloudFormationをゼロから勉強する。](https://qiita.com/sakai00kou/items/46e12aa5936b6d6064f2)の番外編として、[2020年9月22日に公開](https://aws.amazon.com/jp/about-aws/whats-new/2020/09/introducing-aws-perspective/)された`AWS Perspective`を使ってみようと思います。

- 【前】[CloudFormationをゼロから勉強する。（その７：変更セットとドリフト検出）](https://qiita.com/sakai00kou/items/5a7ebb0898ea3eab7239)
- 【次】[CloudFormationをゼロから勉強する。（その８：スタックのネスト）](https://qiita.com/sakai00kou/items/553aba6cc924aff3c9b8)

# AWS Perspectiveとは
AWS上の詳細なアーキテクチャー図を作成するソリューションとのことです。

AWSのサービスではないですが、同じようなコンセプトのものに[DUO](https://duo.com/)の[CloudMapper](https://github.com/duo-labs/cloudmapper)というツールがありますが、`CloudMapper`が**ネットワーク全体の繋がり**を図示するのに対して、`AWS Perspective`は**リソース間の繋がり**を図示するような違いがあるように思います。

## 使い方
`AWS Perspective`はAWSのマネージドサービスではなく、ソリューションとして提供されたシステムなので、自分で`CloudFormation`でシステムを展開する必要があります。

## 費用
`AWS Perspective`はソリューションであるため、それ自体に費用は掛かりませんが`CloudFormation`で各種リソースを展開するため、その分の費用が掛かります。

`AWS Perspective`の[実装ガイド(PDF)](https://docs.aws.amazon.com/solutions/latest/aws-perspective/aws-perspective.pdf#welcome)に記載されている以下1時間当たりの費用を見ると、合計で**$0.797**かかるそうなので、**検証目的で作った人は使い終わったらすぐに消しましょう！**

|AWS service|費用（1時間）|
|:--|:--|
|Amazon Neptune(db.r5.large)|$0.384|
|Amazon Elasticsearch Service(m4.large.elasticsearch)|$0.320|
|Amazon VPC|$0.002|
|NAT gateway|$0.090|
|AWS Config(Item cost=$0.003)|N/A|
|Amazon ECS|$0.001|
|||
|**合計**|**$0.797**|

# AWS Perspective展開方法
[AWS Perspective](https://aws.amazon.com/jp/solutions/implementations/aws-perspective/)のページから「AWSコンソールで起動する」をクリックすると`AWS Perspective`を展開する`CloudFormation`スタック作成画面に進みます。

![aws_perspective01.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/eca10d56-eba2-31ea-c08e-3889206b7c76.jpeg)

ちなみに展開されるテンプレートを`デザイナー画面`で見ると以下のような構成になっています。
思った以上に様々なリソースが展開されるようです。

![aws_perspective02.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/43df4784-df99-d99c-6351-09de0e8d2721.jpeg)

## AWS Perspectiveスタックの作成
「AWSコンソールで起動する」をクリックして、各種パラメータ設定や以下承認のチェックを行い、スタック作成を行います。

パラメータ入力は基本的にデフォルトでOKですが、メールアドレスはメールが届くアドレスを入力してください。

![aws_perspective03.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/a131aba9-9658-007e-dd0d-f4ef475a55b3.jpeg)

作成完了まで40分程度かかるため、気長に待ちましょう。

## AWS Perspectiveへのアクセス
`CloudFormation`の`スタック`画面より、ステータスがすべて`CREATE_COMPLETE`となったら「**説明**」列で「**AWS Perspective Cloudfront Distribution**」と書かれているスタックを選択して、「**出力**」タブから`AWS Perspective`のURLを確認してアクセスします。

![aws_perspective04.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/4cd650ca-2ab4-7707-2c6d-e924ebc2f303.jpeg)

![aws_perspective05.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/3e16e7d6-35d5-4557-cbdd-19f4309305cb.jpeg)

## AWS Perspectiveへのログイン
先ほどスタック作成時に指定したメールアドレスにユーザIDとパスワードが送られてきているはずなので、送られてきたユーザID、パスワードを入力します。

![aws_perspective06.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/691d2819-d246-9852-f87f-9be129278f94.jpeg)

パスワード変更を要求されるため、パスワードを変更。

![aws_perspective07.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/ea345f5c-9a44-6e78-83ab-e4f7bdd85f03.jpeg)

アカウント復旧設定を行うため、`Email`を選択して`VERIFY`します。

![aws_perspective08.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/2854db53-c5fd-d9a1-d9bd-d5a611690cb5.jpeg)

メールアドレスにコードが送られてくるため、コードを入力して`SUBMIT`します。

![aws_perspective09.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/49550309-57e1-06d5-cb2c-ed7d57cef0c0.jpeg)

今のアカウントの情報をインポートするか、他のアカウントの情報をインポートするかを聞かれるため、どちらか選択します。（今回は今のアカウントの情報をインポート）

![aws_perspective10.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/a92cfe82-4178-6370-994b-c56665e67aae.jpeg)

各リソースの読み込みが始まるため、またしばらく待ちます。（私の環境では20分程度かかりました）

![aws_perspective11.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/28fa8277-5efc-c6f7-6dd3-15a91a2bb3b2.jpeg)

## AWS Perspectiveの使用方法
`AWS Perspective`は、左ペインの`Resources`から選択したリソースのアーキテクチャ図を表示してくれるものとなるため、適当なリソース（今回はEC2インスタンス）を選択するとリソースの図が図示されます。

![aws_perspective12.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/56bcd54e-c9b1-4332-ed50-b41df1ac01e4.jpeg)

また、リソースを右クリックして`Focus`を選択すると、選択したリソースに関連するリソースのみ表示され、`Expand`を選択すると周りを残したまま選択したリソースに関連するリソースが表示されます。

以下は上図の一方の`EC2インスタンス`を選択して`Focus`した場合。

![aws_perspective13.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/5eccd17e-def0-90b6-144f-a1d9bf39ac2e.jpeg)

## 表示されているリソースのフィルタ
例えば上図で表示されているタグリソースは別に図示しなくていいかなって時には`Preferences`の`Filters`から`AWS::TAGS::TAG`を選択することで上図からタグ情報が消えます。

## ファイルエクスポート
表示されているリソース情報を以下形式で出力できます。

- CSV
- JSON
- PNG
- Drawio

`Drawio`は外部リンクとなっており、選択すると`AWS Perspective`で表示されている構成図を`Drawioで編集できます。

`Drawio`はちょっとした図を描くのに重宝しているので個人的には`Drawio`に対応しているのは非常にうれしいです。

# AWS Perspective削除方法
`CloudFormation`のスタック画面の「**説明**」列に「**AWS Perspective Main Template**」と書かれているスタックと「**AWS Perspective Set Up**」と書かれているスタックを削除すれば、ネストしているスタックもまとめて削除できます。

但し、S3バケットが削除できず、「**AWS Perspective Set Up**」と書かれているスタックの削除が一度失敗すると思うので、失敗したら再度削除を選択→S3バケットを削除するチェックを入れ、実行することで消せるはずです。

以下まとめ。

1. 「**aws-perspective-[アカウントID]-[Region]**」スタックを削除
2. 「**aws-perspective**」スタックを削除
3. S3バケットを削除するチェックを入れて、再度「**aws-perspective**」スタックを削除

# AWS Perspectiveの良い点・悪い点
ポチポチ1時間程度触ってみて感じた良い点・悪い点をまとめます。

詳細まで調べたりはしていないので、参考程度で。

## 良い点
- 簡単にアーキテクチャ図が作成できる。
- 一度アカウントをインポートしてしまえば、自動的に各リソースのステータスが反映される。
- Drawioに直接エクスポートできる。

`VPC`や`EC2インスタンス`は言わずもがな、`CloudFormation`の繋がりまで図示されるのには感動しました！

いろいろなリソースを選択してポチポチしているだけでも時間が持っていかれます。

また、リソース状況が一定間隔で反映されるようで、例えば`EC2インスタンス`を停止すれば自動的に停止マークが表示され、リソースを消せば`AWS Perspective`から削除されるため、常に最新の構成が確認できるのは非常にうれしい機能です。

# 悪い点
- 費用が結構高め（0.797×24×30=**$573.84**）
- デプロイに時間がかかる。
- リソースごとの表示なのでネットワーク図の代わりとして使うのは難しい。

機能は申し分ないので悪い点でもないですが、企業で運用として継続的に回していくならともかく、ちょっと個人で使い続けるにはお金が厳しいなと・・・

ただそれだけ素晴らしいソリューションなので、毎回作って削除するようにしたとしても十分有益かと思います。

また、そもそも用途が違うのかもしれませんが、`AWS Perspective`はリソースごとの繋がりを表すツールのため、いわゆるネットワーク図の代わりとして使うのは難しいと感じました。

細かい表示はできませんが、AWS全体のネットワーク図を作るのであれば`CloudMapper`のほうが分かりやすいかもしれません。

# 実際に使ったときの費用
調べたり、記事書いたりしながらだったので、デプロイされていたのは5～6時間程度だったかと思いますが、`AWS Perspective`のみで言うと9ドル弱でした。

![aws_perspective14.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/cdeece47-fabf-3b9a-1c5d-07179f238dfd.jpeg)

# おわりに
今回は連載中の「**CloudFormationをゼロから勉強する。**」の番外編ということで、`AWS Perspective`を紹介しました。（あまり`CloudFormation`関係ないですが）

自分でリソースを動かしたりするだけでも面白いので、ぜひ皆様も試してみてください。