AWSのシステム構成図を作るツールとしてはcacooやcloudcraftなどが有名です。
僕はcacooを愛用していますが、できることなら自動でパパッと作ってくれるツールがあると嬉しいなぁと思っていました。
cloudmapperはそんな夢を実現してくれるかもしれないらしいので早速試してみます。
目次
テスト環境構築
cloudmapperのソースはgithubで公開されてます。
今回はテスト用のAmazonLinuxを立てて動作確認してみます。
IAMロール
EC2に必要な権限はこんな感じなのでIAMロールに付けてあげます。
現状だとVPC/EC2/ELB/RDSあたりが対象のようですが、今後サポート範囲が増えてくれると嬉しいですね。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Resource": "*", "Action": [ "ec2:DescribeRegions", "ec2:DescribeAvailabilityZones", "ec2:DescribeVpcs", "ec2:DescribeSubnets", "ec2:DescribeSecurityGroups", "ec2:DescribeVpcPeeringConnections", "ec2:DescribeInstances", "ec2:DescribeNetworkInterfaces", "rds:DescribeDBInstances", "elasticloadbalancing:DescribeLoadBalancers" ] } ] }
パッケージをいろいろインストール
cloudmapperの処理に必要なパッケージをインストールします。
ブラウザから見たいのでnginxも入れておきます。
$ sudo yum install git autoconf automake libtool python-dev jq nginx $ sudo git clone https://github.com/duo-labs/cloudmapper.git $ sudo chown -R ec2-user cloudmapper/
pythonの仮想環境を作る
cloudmapperはpythonで動きます。
$ mkdir venv $ virtualenv venv $ source venv/bin/activate
cloudmapperのセットアップ
必要なモジュールをインストールします。
$ cd cloudmapper $ pip install -r requirements.txt
設定ファイルの修正
config.json.demoをコピーしてconfig.jsonを作ります。
パラメータが分からないのでとりあえずnameだけdemoからtestに変えました。
$ cp -p config.json.demo config.json $ vim config.json
差分です。
@@ -1,6 +1,6 @@ { "accounts": [ - {"id": "123456789012", "name": "demo", "default": true} + {"id": "123456789012", "name": "test", "default": true} ], "cidrs": {
AWSリソースの取得
では実行してみます。
まずはgatherしてAWSのリソース情報を取得します。
引数 –account-name には設定ファイルに書いたtestを指定します。
$ python cloudmapper.py gather --account-name test
なにやらエラーになりました。region指定しろって言ってます。
File "/home/ec2-user/venv/local/lib/python2.7/site-packages/botocore/regions.py", line 135, in _endpoint_for_partition raise NoRegionError() botocore.exceptions.NoRegionError: You must specify a region.
cloudmapper.pyを読む限りgatherでリージョン指定するオプションはなさげ。
とりあえずaws configureで指定します。
$ aws configure AWS Access Key ID [None]: AWS Secret Access Key [None]: Default region name [None]: ap-northeast-1 Default output format [None]:
再実行。無事に動きました。
$ python cloudmapper.py gather --account-name test * Getting region names * Creating directory for each region name * Getting VPC info * Getting AZ info * Getting Subnet info * Getting EC2 info * Getting RDS info * Getting ELB info * Getting Security Groups info * Getting Network interface info * Getting VPC Peering info Complete
cloudmapperディレクトリ直下にtestディレクトリが作成され、取得した情報が置かれています。
$ ll ~/cloudmapper/ 合計 68 -rw-r--r-- 1 ec2-user root 1456 2月 24 02:11 LICENSE -rw-r--r-- 1 ec2-user root 9003 2月 24 02:11 README.md drwxr-xr-x 2 ec2-user root 4096 2月 24 02:13 cloudmapper -rwxr-xr-x 1 ec2-user root 6602 2月 24 02:11 cloudmapper.py -rwxr-xr-x 1 ec2-user root 3241 2月 24 02:11 collect_data.sh -rw-r--r-- 1 ec2-user ec2-user 209 2月 24 02:13 config.json -rw-r--r-- 1 ec2-user root 209 2月 24 02:11 config.json.demo drwxr-xr-x 16 ec2-user root 4096 2月 24 02:11 demo drwxr-xr-x 3 ec2-user root 4096 2月 24 02:11 docs -rw-r--r-- 1 ec2-user root 125 2月 24 02:11 requirements-dev.txt -rw-r--r-- 1 ec2-user root 54 2月 24 02:11 requirements.txt drwxrwxr-x 17 ec2-user ec2-user 4096 2月 24 02:14 test drwxr-xr-x 4 ec2-user root 4096 2月 24 02:11 tests drwxr-xr-x 5 ec2-user root 4096 2月 24 02:11 web
ビルド
続けてビルドします。
引数 –account には作成されたディレクトリtestを指定します。
$ python cloudmapper.py prepare --account test Building data for account test (0000) - 0 nodes built in region ap-south-1 - 0 nodes built in region eu-west-3 - 0 nodes built in region eu-west-2 - 0 nodes built in region eu-west-1 - 0 nodes built in region ap-northeast-2 - 1 nodes built in region ap-northeast-1 - 0 nodes built in region sa-east-1 - 0 nodes built in region ca-central-1 - 0 nodes built in region ap-southeast-1 - 0 nodes built in region ap-southeast-2 - 0 nodes built in region eu-central-1 - 0 nodes built in region us-east-1 - 0 nodes built in region us-east-2 - 0 nodes built in region us-west-1 - 0 nodes built in region us-west-2 - 2 external CIDRs built - 2 connections built Complete
webディレクトリ配下にdata.jsonが作成されます。
(venv) [ec2-user@ip-172-31-45-139 cloudmapper]$ ll ~/cloudmapper/web/ 合計 56 drwxr-xr-x 3 ec2-user root 4096 2月 24 02:11 css -rw-rw-r-- 1 ec2-user ec2-user 17921 2月 24 02:17 data.json -rw-r--r-- 1 ec2-user root 6518 2月 24 02:11 favicon.ico drwxr-xr-x 3 ec2-user root 4096 2月 24 02:11 icons -rw-r--r-- 1 ec2-user root 5048 2月 24 02:11 index.html drwxr-xr-x 2 ec2-user root 4096 2月 24 02:11 js -rw-r--r-- 1 ec2-user root 5272 2月 24 02:11 style.json
webディレクトリをドキュメントルートにコピー
ブラウザからアクセスできるようにwebディレクトリを/var/www配下に移します
$ sudo mkdir /var/www $ sudo cp -Rp web /var/www/cloudmapper
nginxを起動
cloudmapper用のvirtualhostを作って起動します。
$ cd /etc/nginx/conf.d/ $ sudo vim cloudmapper.conf server { listen 80; server_name _; location / { root /var/www/cloudmapper/; index index.html; } } $ sudo service nginx start Starting nginx: [ OK ]
アクセスしてみる
nginxが起動したらアクセスできます。
EC2セキュリティグループで80ポートへのインバウンド許可を忘れずに。
http://{public-ip}/
僕の環境ではこんな感じになりました。
どうやらAWSリソースのNameタグを図に表示してくれるようです。
ここではdefault-vpcのdefaut-1aサブネット内にcloudmapper-testインスタンスがあることがわかります。
また、リソース間の経路はセキュリティグループを基に表示されています。
cloudmapper-testインスタンスはPublic環境にあると同時に、私の自宅のグローバルIP(黒く塗りつぶしてる部分)からのインバウンド接続も許可しています。残念ながら許可しているポートまでは表示されないようです。
まとめ
今回はシンプルな環境だったのでスッキリ見れましたが、何十台ものEC2やRDSを利用している環境でどう表示されるのかは試してみたいところですね。
ちなみに、webディレクトリ配下は静的ファイルしかないので丸々コピーしてs3なり何なりに置いて動かせます。
試しに今回のテスト環境で作った構成図は当ブログにも置いてみましたので触ってみたい方はご自由にどうぞ。
https://e-book-info.com/cloudmapper/
こんな記事も読まれてます
![]() |
20代30代の客先常駐ITエンジニアが最速で年収を上げる方法 この記事の所要時間: 約 14分56秒
この記事の所要時間: 約 14分56秒 もしあなたが以下の3つ全てに該当するエンジニアであれば、今すぐにでも転職をオススメします。 客先常駐型のエンジニアとして働いている 案件の途中で契約を切られるこ … |