技術3課の森です。
新入社員の方々をよく目にする時期ですね。一人暮らしを始めたりする人は部屋を借りて色々モノをそろえていくタイミングですね。
ということで、Dockerを使ってawspecを動かしてみました。
はじめに
Dockerについては、色々ウェブや書籍から学ぶことができるので、ここでは省略します。
今回、なぜawspecを動かすのに、Dockerを選択したかというと、awspecを利用するのに色々とインストールする必要があります。
しかし、OSによって少し変わったりするかもしれないなという漠然なところからと個人的にDockerを使ってみたいなというところから興味本位で始めた結果になります。
awspecについては、以前書いた記事がありますので、そちらをご参考に。
構築環境
macOS Sierra バージョン 10.12.6
Docker Version 18.03.0-ce-mac59(23608)
Dockerの準備
今回は、Ubuntuを使ってイメージの作成をしていきます。
FROM ubuntu ENV BASE_DIR=/awspectest/ ENV AWSPEC_DIR=$BASE_DIR/awspec/ ENV AWSPEC_WORK_DIR=$AWSPEC_DIR/spec/ #install modules for awspec RUN apt-get update -y && apt-get install -y ruby ruby-build bundler python python-pip git RUN pip install --upgrade pip && pip install awscli RUN bundle init && echo gem \'awspec\' >> ./Gemfile && sudo bundle #create the environment of awspec RUN mkdir -p $AWSPEC_DIR;cd $AWSPEC_DIR;awspec init #awspec/spec/spec_helper.rbに情報を追加 ENV SPEC_HELPER=$AWSPEC_WORK_DIR/spec_helper.rb RUN echo require \'awspec\' > $SPEC_HELPER ##ファイルをフルパスで書かないと動かなかった(ここは今後変更していく) ##secrets.ymlにはクレデンシャル情報を書く RUN echo Awsecrets.load\(secrets_path: File.expand_path\(\'\/awspectest\/awspec\/spec\/secrets.yml\',File.dirname\(__FILE__\)\)\) >> $SPEC_HELPER ##awspec.ymlに検証対象のAWSリソースを書く RUN echo @properties = YAML.load_file\(\"\/awspectest\/awspec\/spec\/awspec.yml\"\) >> $SPEC_HELPER #ローカルにsecret.yml / awspec.yml と今回はEC2を検証するので、 ec2_spec.rbを置いておき、それをDockerにコピーする COPY . $AWSPEC_WORK_DIR # awspecを実行 ##カレントディレクトリを指定 WORKDIR $AWSPEC_DIR ##awspecを実行 ENTRYPOINT bundle exec rake spec
これで準備が完了です。この後、実行していきます。
Dockerイメージをビルド
後は、コマンドを叩いていくだけです。
$ docker build -t awspec/ec2:1.0 . Sending build context to Docker daemon 67.58kB Step 1/16 : FROM ubuntu latest: Pulling from library/ubuntu ... Successfully built 4864c28ea52c Successfully tagged awspec/ec2:1.0
こんな感じでログが流れてきます。 最後、「Successfully」ってなってればOkです。
実行
では、実行して確認していきます。
$ docker run --name awspec awspec/ec2:1.0 ec2 'testec2' should exist should have tag "Name" should have tag "Application" ebs_optimized should eq false source_dest_check should eq true key_name should eq "keypairname" instance_type should eq "t2.micro" image_id should eq "ami-617c3007" ebs 'testec2disk' should exist should be attached to "testec2" should have tag "Name" should have tag "Application" volume_type should eq "gp2" size should eq 8 encrypted should eq false network_interface 'testec2eni' should exist example at ./spec/ec2_spec.rb:47 should have security group "sample-foo-ap" should have security group "sample-bar-bl" should have security group "sample-wow-db" should have tag "Name" should have tag "Application" Finished in 1.41 seconds (files took 1.56 seconds to load) 22 examples, 0 failures
これは例ですが、22個の検査対象をチェックして、異常は0個でしたという結果です。
最後に
今回はEC2のサンプルのみでしたが、awspecで扱える他のリソースも作っていけるようになります。
最近、設計したものをそのままCloud Formationに落とし込んでそれで構築することは増えてきましたが、手動で構築する場合、設計物からYMLに出力したものをベースにawspecを使って検査するという方法を取っていければと考えています。
また、今回はMACで実行をしてみましたが、WindowsでもLinuxでも同じことはできますので、OSに関わらず、検査できるってところもいいですよね。
個人的にはこの後、いろいろなリソースにも対応していければと思ってます
その前にrubyのお勉強もしないとダメですね