Upgrade to Pro — share decks privately, control downloads, hide ads and more …

なぜRubyだったのか?Rubyで成長したOSS / fukuokark02

なぜRubyだったのか?Rubyで成長したOSS / fukuokark02

Ken’ichiro Oyama

November 25, 2017
Tweet

More Decks by Ken’ichiro Oyama

Other Decks in Technology

Transcript

  1. k1LoW   Kenʼichiro Oyama   @k1LoW   Fusic Co.,Ltd. エンジニア

      基盤ユニット テックリード   PHPer   GitHub organizations   fukuokarb / faultline / emacs-jp / etc. 3 福岡Ruby会議02
  2. awspec   RSpec tests for your AWS resources.   https://github.com/k1LoW/awspec

      AWS上に展開したリソースがあるべき状態になっている かどうかをテストするツール 5 福岡Ruby会議02
  3. ec2 6 福岡Ruby会議02  describe ec2('my-ec2-tag-name') do   it { should

    be_running }   its(:instance_id) { should eq 'i-ec12345a' }   its(:instance_type) { should eq ’t2.small' }   its(:public_ip_address) { should eq '123.0.456.789' }   it { should have_security_group('my-sg-name') }   it { should belong_to_vpc('my-vpc') }   it { should have_eip('123.0.456.789') }  end
  4. route53_hosted_zone 7 福岡Ruby会議02  describe route53_hosted_zone('example.com.') do   it { should

    exist }   its(:resource_record_set_count) { should eq 5 }   it { should have_record_set('example.com.').a('123.456.7.890') }   it { should have_record_set('example.com.').mx('10 mail.example.com') }   it { should have_record_set('mail.example.com.')   .a('123.456.7.890').ttl(3600) }   it { should have_record_set('s3.example.com.')   .alias('s3-website-us-east-1.amazonaws.com.', 'Z2ABCDEFGHIJKL') }  end
  5. 63 Resource Types (v.0.88.2)   acm   alb   alb_listener

      alb_target_group   ami   autoscaling_group   cloudformation_stack   cloudfront_distribution   cloudtrail   cloudwatch_alarm   cloudwatch_event   cloudwatch_logs   customer_gateway   directconnect_virtual_inte rface   dynamodb_table   ebs   ec2   ecr_repository   ecs_cluster   ecs_container_instance   ecs_service   ecs_task_definition   efs   eip   elasticache   elasticache_cache_param eter_group   elasticsearch   elastictranscoder_pipeline   elb   iam_group   iam_policy   iam_role   iam_user   internet_gateway   kms   lambda   launch_configuration   nat_gateway   network_acl   network_interface   rds   rds_db_cluster_paramete r_group   rds_db_parameter_group   route53_hosted_zone   route_table   s3_bucket   security_group   ses_identity   sqs   subnet   vpc   vpn_connection   vpn_gateway   waf_web_acl   account 8 福岡Ruby会議02
  6. この頃の私にとってのRuby   Ruby on Rails   (挫折したまま   PHPにはない標準機能、構⽂、概念、世界  

    ⾔語⾃体が(Webな)PHPよりも広く⾒えた   豊富で羨ましいGem   Matzと多くの⽇本⼈のRubyコミッタ   その結果⽇本語で展開されるレベルの⾼い議論   難しい。。厳しい。。。⾃分にはできなさそう。。。 13 福岡Ruby会議02
  7. Serverspec   RSpec tests for your servers.   https://github.com/mizzy/serverspec  

    サーバに展開したリソースがあるべき状態になっている かどうかをテストするツール   RSpec tests for your servers configured by CFEngine, Puppet, Ansible, Itamae or anything else. 16 福岡Ruby会議02
  8. Serverspec 17 福岡Ruby会議02  describe service('ntpd') do   it { should

    be_enabled.with_level(3) }  end  describe iptables do   it { should have_rule('-P INPUT ACCEPT') }  end  describe cgroup('group1') do   its('cpuset.cpus') { should eq 1 }  end
  9. aws-sdk-ruby v2   リソースを操作するクラスは、以下の2種類   Seahorse::Client::Baseを継承したAws::*::Client   (Aws::EC2::Clientなど)   Resources::Resourceを継承したAws::*::Somename

      (Aws::EC2::Instanceなど)   Clientベースはaws-cliのコマンド名と近いメソッドで操作   Resourceベースのほうがリソースをオブジェクトとして操作できる   aws-sdk-ruby v1の名残? 24 福岡Ruby会議02
  10. vpc 28 福岡Ruby会議02  describe vpc('vpc-ab123cde') do   it { should

    exist }   its('route_tables.first.route_table_id') { should eq 'rtb-a12bcd34' }  end
  11. Add tag matching support 40 福岡Ruby会議02   各リソースにおいて、タグの保持をテストするマッチ ャの追加  

    #119 PR by igorlg  describe ec2('my-ec2') do   it { should have_tag('Name').value('my-ec2') }  end
  12. Add opened_only matcher for security groups. 福岡Ruby会議02 43   Security

    Groupの「このポートだけオープンしている こと」をテストするマッチャの追加   #121 PR by ceaess  describe security_group('my-sg') do   its(:outbound) do should be_opened_only(50_000)   .protocol('tcp')   .for(%w(100.456.789.012/32 200.567.890.123/32))   end  end
  13. Add ec2 `have_event()` and `have_events()` 46 福岡Ruby会議02   EC2にイベント(再起動イベントなど)があるか確認 するマッチャの追加

      #131 PR by k1LoW  describe ec2('my-ec2') do   it { should have_event('system-reboot') }  end  describe ec2(’other-ec2') do   it { should_not have_events }  end
  14. Add ec2 `have_classiclink_security_group()` 49 福岡Ruby会議02   EC2-ClassicがClassicLink先のSecurity Groupをもっ ているかどうかを確認するマッチャの追加  

    #150 PR by matsuzj  describe ec2('my-classic-ec2') do   it { should have_classiclink_security_group('sg-2a3b4cd5') }   it { should have_classiclink_security_group('my-vpc-security- group-name') }  end
  15. Add CloudTrail support to check if logging is enabled. 52

    福岡Ruby会議02   CloudTrailでロギングが有効になっているかをテストす るマッチャの追加   #164 PR by arimbun  describe cloudtrail('my-trail') do   it { should be_logging }  end
  16. Add shared_context to specify region by context 55 福岡Ruby会議02  

    複数のリージョンをまたいだテストができるようにす る修正   #187 PR by takaishi  describe ec2('my-ec2’), region: 'us-east-1' do   it { should exist }  end
  17. awspecのこれから   awspecは「どこかで使われているOSS」になった   現時点で求められる機能の⾻組みはもうできているはず   「安定」を第⼀としてメンテナンスしていきたい   「テストツールの変化はゆっくりがいい」 by

    t_wada   Semantic Versioning   ⼀部にニーズのある機能はできるだけ分離(柔軟なリソースファ インダなど) -> awsrm   しかしAWSのSDKの機能拡張には追従する   aws-sdk-ruby v3対応 63 福岡Ruby会議02