あいにく僕はRubyistではなく、Rubyの環境整備とかうまくやる自信がないので、 Dockerを使います。
Dockerfile
FROM ruby:2.4 RUN gem install awspec --no-format-exec WORKDIR /tmp ENTRYPOINT ["awspec"] CMD ["--help"]
Docker Hubのあるイメージ の Dockerfile からバージョン指定を消した程度です。 Docker Hubのあるイメージ はかなり古いので、 自前でイメージをビルドしたほうが良いです。あと、ページにのってる説明がちょっと間違ってる。
$ vim Dockerfile $ docker build -t "local/awspec" .
あとは、おもむろにコンテナ内で awspec を実行すればOKです。
## ヘルプ表示 $ docker run -it --rm -v $(pwd):/tmp local/awspec ## initファイル生成 $ docker run -it --rm -v $(pwd):/tmp local/awspec init ## テスト実行 $ docker run -it --rm -v $(pwd):/tmp --entrypoint rake local/awspec spec
例によって、残念ながら僕はRubyistじゃないので、 rspecは書いたことがない。
spec/spec_helper.rb
require 'awspec' require 'json' if File.exist?('secrets.yml') creds = YAML.load_file('secrets.yml') Aws.config.update({ region: creds['region'], credentials: Aws::Credentials.new( creds['aws_access_key_id'], creds['aws_secret_access_key']) }) end File.open("params.json") do |param_file| @params = JSON.load(param_file) end File.open("consts.json") do |const_file| @consts = JSON.load(const_file) end
spec/ec2_spec.rb
require 'spec_helper' params = @params consts = @consts describe ec2(params['instance_name']) do it { should exist } it { should be_running } its(:instance_id) { should eq params['instance_id'] } its(:image_id) { should eq params['base_ami_id'] } its(:instance_type) { should eq consts['instance_type'] } it { should have_eip(params['eip']) } it { should have_security_groups([params['sg_id']]) } it { should belong_to_vpc(consts['vpc_id']) } end