Dockerを使ってawspecを動かしてみる

記事タイトルとURLをコピーする

技術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のお勉強もしないとダメですね