8
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

CloudMapperをDockerコンテナで実行したい

Last updated at Posted at 2018-08-04

はじめに

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ファイルに、さきほど取得したアクセスキー、シークレットキー、リージョンコード、ユーザー名を設定します。

.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 にアクセスすると…
期待していたような構成図が表示されました!

8
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?