nihiko’s blog

新社会人の雑感

AWSのネットワーク構成図を自動で作成したい

背景

最近お仕事の方でAWSを触る機会が増えてきた。

「ここはEC2上で動作していて、S3でこれがこうなるとLambdaが起動して…」
難しい。構成図がないと全体像をまったく掴めない。

また、自分がAWSで構築を行うときに「今どんな構成になってるんだろう」
というのを逐一簡単に確認できたら便利だな、と。
(先に構成図描いておけばその通りになっているかの確認にもなるし)

ということで、CloudMapperというツールを使ってみた。

CloudMapperとは

CloudMapperとは
AWSの環境を解析して、ネットワーク構成図を自動で作成
・ブラウザで確認
ができるツールである。

環境

EC2(CentOs7)

設定手順

1.ソースのダウンロード

$ git clone git@github.com:duo-labs/cloudmapper.git

2.CentOSPythonの実行環境を作成

CentOs7には標準でPython2.7がインストールされているが、
Python3.xはyumリポジトリでは提供がされていないため別のリポジトリ(IUS Community Project の yum リポジトリ)からインストールしてくる。

$ yum install -y https://centos7.iuscommunity.org/ius-release.rpm
$ yum search python35
$ yum install -y python35u python35u-libs python35u-devel python35u-pip
$ python -V
Python 3.6.5
$ sudo pip3.5 install pipenv
$ pipenv install --skip-lock
$ pipenv shell

3.IAMユーザ作成

CloudMapperを利用するにあたり、AWS内の情報を収集するためのIAMユーザを作成する必要がある。
※ここで作成したIAMのシークレットアクセスキーを紛失しないように!

$ aws iam create-user --user-name cloudmapper
$ aws iam put-user-policy --user-name cloudmapper --policy-name cloudmapper_readonly_policy --policy-document '{
  "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"
      ]
    }
  ]
}
$ aws iam create-access-key --user-name cloudmapper

4.構成図を作成するAWS環境の設定

インストール先のcloudmapper配下にデモ用の設定ファイルがあるのでconfig.jsonという名前でコピー。
このファイルにAWS ID、アカウント名を記入。

$ cp -p config.json.demo config.json
$ vi config.json
{  "accounts":
    [
        { "id": "xxxxxxxxxxxx", ← AWS ID(12桁の数値)を入力
          "name": "cloudmapper1", ← アカウント名を明記(任意の名前)
          "default": true
        }
    ],
    "cidrs":
    {}
}

5.AWSの構成情報を取得

$ python cloudmapper.py collect --account cloudmapper1

ここでエラー
ModuleNotFoundError: No module named 'pyjq'
ここから色々モジュールが足りないと言われ続けるので、
その都度pipでインストール。

6.取得したAWSの構成情報を解析

python cloudmapper.py prepare --account cloudmapper1

7.Webサービスを起動

python cloudmapper.py webserver --public

8.アクセスし確認

http://【EC2のパブリックIP】:8000でアクセスし確認

f:id:nihiko:20190120162729p:plain:w470
見れた!

これはこれからも使いそう。

ちなみに

なんかdockerでのインストールもできるらしい…?
先に見ればよかったかも…。
qiita.com