はぐれメタルはにげだした

身近な趣味からテクニカルな話題まで幅広く取り扱っていきます

技術

AWS構成図の自動生成ツールCloudMapperを試した話

投稿日:2018年2月24日 更新日:

この記事の所要時間: 1428

AWSのシステム構成図を作るツールとしてはcacoocloudcraftなどが有名です。

僕は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エンジニアが最速で年収を上げる方法

この記事の所要時間: 1456

この記事の所要時間: 約 14分56秒 もしあなたが以下の3つ全てに該当するエンジニアであれば、今すぐにでも転職をオススメします。 客先常駐型のエンジニアとして働いている 案件の途中で契約を切られるこ …

-技術
-

関連記事

20代30代の客先常駐ITエンジニアが最速で年収を上げる方法

この記事の所要時間: 1529

この記事の所要時間: 約 15分29秒 もしあなたが以下の3つ全てに該当するエンジニアであれば、今すぐにでも転職をオススメします。 客先常駐型のエンジニアとして働いている 案件の途中で契約を切られるこ …

AWS無料枠の使用状況や残りの期間を確認する方法

この記事の所要時間: 343

この記事の所要時間: 約 3分43秒 AWSを使う上で最も気になることの1つが利用コストですよね。特に無料枠のみでやりくりしたいと考えている場合、「今月分の無料枠の使用状況を確認する方法」と「無料期間 …

AWS WAFマネージドルールの致命的な1つのデメリット

この記事の所要時間: 1250

この記事の所要時間: 約 12分50秒 企業がWAFを導入するにあたって頭を悩ませるポイントはいくつかありますよね。 いま世の中ではどんな攻撃が蔓延ってるのか、それらの攻撃からサービスを守るにはどんな …

AWS WAFでWordPressを保護するための設定例

この記事の所要時間: 161

この記事の所要時間: 約 16分1秒 AWS WAFはセットアップするだけならクリックぽちぽちでいけるので非常に簡単なんですが、いざ運用を検討しだすとハマりポイントがいくつも出てきて頭を悩ませてしまい …

AWSでIAMユーザのパスワードポリシー設定方法

この記事の所要時間: 425

この記事の所要時間: 約 4分25秒 IAMのデフォルトのパスワードポリシーは非常に低セキュリティです。 どれくらい低セキュリティかというと aaaaaa とか 123456 とか6文字以上の文字列な …

プロフィール

プロフィール



はぐれん@フリーランサー

10代〜20代前半くらいまではガンガンいこうぜ。20代半ばで鼻っ柱を砕かれて一度はめいれいさせろの支配下に置かれかけたものの、いや逃げりゃいいんじゃんって気付いてからはまた違う世界が見えて来た。30代半ばに差し掛かった今、いろいろやろうぜ。

まだデータがありません。