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

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

技術

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

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

この記事の所要時間: 145

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/

-技術
-

関連記事

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

この記事の所要時間: 42

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

AWSルートアカウントのMFA設定方法

この記事の所要時間: 432

この記事の所要時間: 約 4分32秒 通常のログインメージ MFA設定後のログインメージ ルートアカウントはAWSに対するフルアクセス権限を持っているため、もし第三者に流出し悪用されてしまうと甚大な損 …

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

この記事の所要時間: 1538

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

echo

Alexaスキルを作りたいってことでまずは開発者アカウント登録から

この記事の所要時間: 26

この記事の所要時間: 約 2分6秒 年初くらいにEchoを買ったは良いものの、毎日天気聞いて今日着る服を決めるくらいの使い方してなかったから、そろそろちゃんとAlexaと向き合おうかなと思ってきました …

【AWS】IAMユーザーとIAMロールの違いを理解して適切に権限管理する

この記事の所要時間: 1310

この記事の所要時間: 約 13分10秒 AWSアカウントを作成すると、AWSからルートアカウントが発行されます。 しかし、原則このルートアカウントの使用は推奨されていません。 というのも、ルートアカウ …

プロフィール

プロフィール



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

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