ちょっと話題の記事

AWS ソリューション「AWS でのワークロード検出」で自動でシステム構成図作成してみた

AWS ソリューション「AWS でのワークロード検出」をご存知ですか?自動でシステム構成図を作成できるソリューションです!
2023.06.26

1. はじめに

お疲れさまです。とーちです。
「AWS でのワークロード検出」というソリューションをご存知でしょうか?

このソリューションは AWS 上のリソースを自動で検出し、 アーキテクチャ図を自動で生成 してくれるものになっています。使ってみて便利だと感じたので紹介させて頂こうと思います。

実は書き終わってから既に紹介ブログがあることに気づいたのですが、前回の記事から時間も経っていてソリューション名も変わっている(旧称: AWS Perspective)ので、改めて紹介ということでご了承ください。

2. 構築

早速ですが構築です。このソリューションは CloudFormation で提供されているので、CloudFormation テンプレートを使ってデプロイするだけなのですが、何点か注意点があるので、それを中心にご説明します。なお、テンプレートは以下の pdf の「自動デプロイ > スタックの起動」の項にある「ソリューションの起動」を押すことで起動できます。デフォルトでバージニア北部が選択されているのでご注意ください。

Solution Implementation Guide Template

pdf の「自動デプロイ > 前提条件」の項には CloudFormation を実行する前に確認すべき前提条件が記載されています。中でも AWS Config に関するところがポイントで既に作成済みの場合は、CloudFormation テンプレートの「AlreadyHaveConfigSetup」パラメータを「Yes」にする必要があります。
私の環境では aws configservice get-status の結果が「recorder: OFF」と表示されていたので、最初「AlreadyHaveConfigSetup:No」でスタック作成を試みたのですが、途中で AWS Config が原因でスタック作成に失敗しました。そのため AWS Config を少しでも使ったことがある環境でしたら、事前に手で AWS Config を設定した上で、「AlreadyHaveConfigSetup:Yes」でスタック作成するのがいいかもしれません。

CloudFormation テンプレート のパラメータの中で他に注意すべきものとしては以下があります。

  • CreateNeptuneReplica:Yes にすると Amazon Neptune レプリカが作成されるのでコストがかさみます
  • NeptuneInstanceClass と OpensearchInstanceType:デフォルトでは「db.r5.large」等のやや高めなインスタンスタイプが選択されています。
  • OpensearchMultiAz:Yes にすると Amazon OpenSearch Service がマルチ AZ で作成されるのでコストがかさみます。

3. 使ってみる

無事構築できたので早速使って見ようと思います。

ログイン・初期設定

  1. CloudFormation スタック作成時に「AdminUserEmailAddress」パラメータで指定したメールアドレスにログインするための URL、ID、パスワードが届きますので、こちらを使ってログインします。

  2. まずは描画したいリソースが含まれるアカウント、リージョンの情報をインポートします。これを行わないと描画できません。

  3. CSV か Web フォームのどちらかの方法でインポートできます。今回は1アカウント2リージョンだけインポートするのでフォームからやります

  4. アカウント ID とリージョンと任意のアカウント名を入力してから「Add」ボタンを押します、その後、下のほうにある「Import」ボタンを押すと以下のような画面が表示されます。「AWS でのワークロード検出」では描画対象のリソースがあるアカウントとリージョンに対して、事前に IAM ロール等を作成しておく必要があります。下記の画面はそのための CloudFormation テンプレートをダウンロードできるものです。2つのテンプレートを実行する必要があり、一つは1アカウントに対して1度デプロイすれば良いもの、もう一つはリージョン毎にデプロイする必要があるものになります。CloudFormation テンプレートを実行したら「Import」ボタンを押します

  5. 画面左のメニューから「Configure > Accounts」画面に移ります。インポートしたアカウントのチェックボタンをつけると対象アカウントのリージョン毎に識別できているリソース数を確認できます。インポートした直後は「Not discovered」となっています。リソース検出は15分毎に動く仕組みとなっているので反映されるまでしばらく時間がかかります。リソース数が表示されたら初期設定は完了です。

Explore メニュー

  1. Explore メニューを見ていきます。「Resources」ではアカウント、リージョン、リソースタイプといった項目で検出している AWS リソースをフィルタリングすることができます。
  2. 画面下部の「Resources」から描画したいリソースにチェックをつけ、「Add to diagram」を押します
  3. すると即座にアーキテクチャ図のプレビューが表示されました。対象リソースに関連するリソース(タグや IAM ロール)も一緒に描画されています。プレビュー画面の上に Visibility(自分しか見れないようにするか他のユーザでも見れるようにするか)と Name という項目があり、ここを入力し「Create」ボタンを押すと図を保存することができます
  4. 例えばリソースとしてタグを選択すれば、そのタグが付与されたリソースを描画するといったことが出来たりします
  5. 「Views」というメニューではアカウント、リージョン、リソースタイプの組み合わせでリソースを絞った View を作成・保存することが出来、ここからも同様にリソースを選択して図を描画することが出来ます

Diagrams メニュー

  1. Diagrams の「Manage」メニューでは保存した図を編集、削除することが出来ます。Actions からそれぞれ以下のようなことが出来ます。
    1. Resources
      1. Expand:選択したリソースに紐づくリソースを図に追加できます
      2. Focus:選択したリソースと直接依存関係があるリソースだけ残して他のリソースを削除します
      3. Remove:選択したリソースを削除します
    2. Diagram
      1. Group:リソースタイプ別にグループ化して、図のレイアウトを整えます
      2. Fit:コンテンツを中央に寄せます
      3. Clear:図を削除して、まっさらな状態にします
      4. Export:図をエクスポートします(後述)
    3. Save:図を保存します
    4. Delete:図を削除します
  2. Diagram>Export では作成した図をエクスポートできます。個人的に Diagrams.net(Draw.io)にエクスポートできるのが激アツだと思いました
  3. また画面下部の「Diagram Settings」ではアカウント、リージョン、リソースタイプの組み合わせでフィルタを行い、合致したリソースについて図から削除(Hide Selected)または対象リソースだけ図に残す(Only Show Selected)といったことができます。一番下の「Hide Edges」ではリソース間の依存関係を示す線を消すことができます。「Apply」を押さないと反映されない点に注意してください。

4. その他 Tips

  • 注意点
    • コスト:バージニア北部リージョンで 1 時間あたり約 0.58USD、1 か月あたり 425.19 USD とかなり高い
      • 上記はソリューションに含まれる Amazon Neptune 等のインスタンスタイプがデフォルト(r5.large 等)を使った場合のコストなので、t3 系等に下げればこれよりは料金がかからなくなる。
      • 自分が動かした限りでは t3 でも問題なく動いていたようでしたが、大規模なシステムだと不都合が発生するかもしれません。
    • インスタンスタイプの変更は CloudFormation のパラメータを変更した上で更新を行えば可能。データ(図や View)もウェブ UI から見える範囲のものはちゃんと引き継がれていました。
    • ソリューション自体のバージョンが上がった際には作り直しが必要とのこと。この場合データは保持されないと思います
    • ソリューション作成時に既存の AWS Config があると作成に失敗することがある。その場合は CloudFormation パラメータ「AlreadyHaveConfigSetup」を「Yes」にしたうえで、Aws Config の設定が前提条件と合致していることを確認
    • マニュアルによるとこのソリューションのために専用の AWS アカウントにデプロイすることを推奨とのこと。(他のワークロードとセキュリティ、コストを分離するため)

まとめ

以上、「AWS でのワークロード検出」というソリューションのご紹介でした。
システム構成図はメンテされなくなるのが常だと思いますが、こういったソリューションを使えば課題を解決出来るかもしれませんね。自分の所感では十分に実用に耐えうる仕組みだと感じました。

この記事が誰かのお役に立てばなによりです。
以上、とーちでした。

参考