はじめに
AWS環境のネットワーク構成図を生成してくれるツールにCloudMapperというものがありますが、
2018年7月初め頃にDockerのサポートをやめてしまったようです。
(2018年8月4日現在はPythonのパッケージという形でのみ利用することができる)
Dockerじゃダメなのかーと思って調べていると、
こちらの方が別リポジトリでDockerサポートを開発してくれているようなので、
今回はこれ(docker-cloudmapper)を試してみたいと思います。(ありがたいですね)
ローカル環境にコンテナを立ち上げる形で実行してみます。
※コードの詳細は確認していないので、もろもろは自己責任でよろしくお願いいたします。
docker-cloudmapperの概観
docker-cloudmapperでは、コンテナを立ち上げてその中で本家cloudmapperを動かしているようです。
なので、dockerを立ち上げてその中に入ってしまえば、あとはcloudmapperと同様に操作することができそうです。
AWSアカウントへのアクセスに必要な情報は、ホスト上の.envファイルに設定しておくことで、環境変数としてコンテナ内のcloudmapperでも使えるようになる仕様のようです。
AWSまわりの準備
AWSのアクセスキー、シークレットキー、リージョンコード、ユーザー名が必要なので、先に準備しておきます。
docker-cloudmapper用のIAMユーザーを作成します。
$ aws iam create-user --user-name cloudmapper
作成したIAMユーザーにポリシーを適用します。
$ 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"
]
}
]
}'
こちらは、CloudMapperのREADME.mdにある通りとなっております。
アクセスキー(ならびにシークレットキー)を取得します。
$ aws iam create-access-key --user-name cloudmapper
作成したIAMユーザー名とリージョンコードは ~/.aws/config
に、
取得したキーたちは ~/.aws/credentials
にそれぞれ設定しておきます。
( ※ もしかしたら、この作業は必要ないかもしれないです…)
docker-cloudmapperの設定
まず、git cloneでコードを落としてきます。
$ git clone https://github.com/sebastientaggart/docker-cloudmapper.git
ディレクトリに入ります。
$ cd docker-cloudmapper
このディレクトリにある.envファイルに、さきほど取得したアクセスキー、シークレットキー、リージョンコード、ユーザー名を設定します。
# AWS Key and Secret are used to initialize aws cli within the container
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
# Default region is used both for the aws cli, and Cloudmapper config
AWS_DEFAULT_REGION=
#This is the AWS Account Name
ACCOUNT=
コンテナイメージをビルドします。少し時間がかかります。
ここで、本家cloudmapperをリポジトリから落としてきているようです。
$ docker-compose build
終わったらコンテナを立ち上げます。
$ docker-compose up -d
立ち上げたコンテナの中に入ります。
$ docker exec -it cloudmapper sh
cloudmapperの設定
ここからは、cloudmapperでの手順とほぼ同様になります。
構成図の生成に必要なデータを集めます。
$ACCOUNT
は、.envファイルに設定した環境変数です。
$ pipenv run python cloudmapper.py collect --account $ACCOUNT
集めた情報を整理?をします。
$ pipenv run python cloudmapper.py prepare --account $ACCOUNT
ここでブラウザから localhost:8000 にアクセスすると…
…期待するような画面は表示されませんでした;
集めたデータがjson形式で置かれていることは確認できました。
webディレクトリの中身を確認すると、
画面構成に必要なファイル(html, css, js など)が置かれていないようです。
(なぜないのでしょう…?)
(ためしにビルドし直してみましたが同じでした [docker-compose build --no-cache
] )
どうやらこれが原因で表示されないようなので、
cloudmapperのGitHubリポジトリからwebディレクトリ内のファイルやディレクトリをダウンロードしてきて、コンテナ内webディレクトリにコピーします。
ホスト上のファイルやディレクトリをコンテナ内にコピーすることになるので、以下のような感じですべてコピーします。
詳しくはdocker cpコマンドを参照。
$ docker cp css cloudmapper:/opt/cloudmapper/web/
これで再びブラウザから localhost:8000 にアクセスすると…
期待していたような構成図が表示されました!