tl;dr
手作業で構築した AWS リソースの管理には以前から気になっていた awspec が良いと思ったのでメモ。
二台、三台のインスタンスなら…とうっかりと手作業で構築したインスタンスや、どんな設定で作ったか判らないけど、なんとなく利用されている S3 Bucket の管理をどうしようかなと思っていたら awspec の generate
コマンドがリソース情報を生成してくれるので試してみた。
参考
github.com
qiita.com
memo
インストール
$ cat Gemfile source "https://rubygems.org" gem 'awspec' gem 'rake' $ bundle
初期化
$ bundle exec awspec init + spec/ + spec/spec_helper.rb + Rakefile + spec/.gitignore + .rspec
awspec generate
以下のようにサポートされているリソースであれば各リソースの情報を利用してテストを生成してくれるという有り難い機能。
$ bundle exec awspec generate Commands: awspec generate cloudwatch_alarm # Generate cloudwatch_alarm spec awspec generate directconnect # Generate directconnect spec awspec generate ebs # Generate attached ebs spec awspec generate ec2 [vpc_id] # Generate ec2 spec from VPC ID (or VPC "Name" tag) awspec generate elb [vpc_id] # Generate elb spec from VPC ID (or VPC "Name" tag) awspec generate help [COMMAND] # Describe subcommands or one specific subcommand awspec generate iam_policy # Generate attached iam_policy spec awspec generate nat_gateway [vpc_id] # Generate nat_gateway spec from VPC ID (or VPC "Name" tag) awspec generate network_acl [vpc_id] # Generate network_acl spec from VPC ID (or VPC "Name" tag) awspec generate rds [vpc_id] # Generate rds spec from VPC ID (or VPC "Name" tag) awspec generate route53_hosted_zone [example.com.] # Generate route53_hosted_zone spec from Domain name awspec generate route_table [vpc_id] # Generate route_table spec from VPC ID (or VPC "Name" tag) awspec generate s3_bucket [backet_name] # Generate s3_bucket spec from S3 bucket name. if NO args, Generate all. awspec generate security_group [vpc_id] # Generate security_group spec from VPC ID (or VPC "Name" tag) awspec generate subnet [vpc_id] # Generate subnet spec from VPC ID (or VPC "Name" tag) awspec generate vpc [vpc_id] # Generate vpc spec from VPC ID (or VPC "Name" tag) Options: [--profile=PROFILE]
EC2 の情報を生成する
以下のように generate
コマンドを利用して vpc-xxxxxxxx
内の EC2 情報を生成してみる。
$ echo "require 'spec_helper'" > spec/ec2_spec.rb $ bundle exec awspec generate ec2 vpc-xxxxxxxx >> spec/ec2_spec.rb
以下のような内容が出力される。
require 'spec_helper' describe ec2('oreno-instance01') do it { should exist } it { should be_stopped } its(:instance_id) { should eq 'i-xxxxxxxxx' } its(:image_id) { should eq 'ami-xxxxxxxx' } its(:private_dns_name) { should eq 'ip-10-0-x-xxx.ap-northeast-1.compute.internal' } its(:public_dns_name) { should eq '' } its(:instance_type) { should eq 't1.micro' } its(:private_ip_address) { should eq '10.0.x.xxx' } it { should have_security_group('test') } it { should belong_to_vpc('vpc-xxxxxxxx') } it { should belong_to_subnet('subnet-xxxxxxxxxxx') } it { should have_ebs('vol-xxxxxxxxxx') } end
生成された情報を元にテストしてみる。
$ bundle exec rake spec
以下のように出力される。
おお。
このバケットってどんな設定だっけ
S3 バケットの設定も生成しておく。
$ echo "require 'spec_helper'" > spec/s3_bucket_spec.rb $ bundle exec awspec generate s3 inokara-sandbox >> spec/s3_bucket_spec.rb
以下のように生成される。
$ cat spec/s3_bucket_spec.rb require 'spec_helper' describe s3_bucket('inokara-sandbox') do it { should exist } its(:acl_owner) { should eq 'xxxxxxxxx' } its(:acl_grants_count) { should eq 1 } it { should have_acl_grant(grantee: 'xxxxxxxx', permission: 'FULL_CONTROL') } end
テストしてみる。
VPC の設定も見てみよう
VPC の設定も生成しておく。
$ echo "require 'spec_helper'" > spec/vpc_spec.rb $ bundle exec awspec generate vpc vpc-xxxxxxxx >> spec/vpc_spec.rb
以下のように生成される。
$ cat spec/vpc_spec.rb require 'spec_helper' describe vpc('vpc-xxxxxxxxx') do it { should exist } it { should be_available } its(:vpc_id) { should eq 'vpc-xxxxxxxxx' } its(:cidr_block) { should eq '10.0.0.0/16' } it { should have_route_table('rtb-xxxxxxxxx') } it { should have_route_table('rtb-xxxxxxxxx') } it { should have_network_acl('acl-xxxxxxxxx') } end
テストしてみる。
最後に
generate がとても有り難い
手作業で構築した AWS リソースは generate コマンドを利用してリソースをコードに吐き出すことでテキストベースで管理出来るのが嬉しい。手で修正を加えたら generate で吐き出すような運用をすれば良さそう。(generate で吐き出すのを忘れる可能性が…)
ということで
構築前にテストを書いて、構築後のチェックで利用という側面もあると思うが、手作業で構築したリソースの資産管理として awspec を使っていきたいと思った。
以上。