Piculet
https://bitbucket.org/winebarrel/piculet
Kelbim
https://bitbucket.org/winebarrel/kelbim
以前作成したRoadworkerと同様に、AWSの設定をRubyのDSLで管理します。Piculetはセキュリティグループを、KelbimはELBを対象としています。
Piculetのほうはクラスメソッドさんのブログで紹介していただきました。ありがたいことです。
使い方とか
ホームページを読めばだいたい察しはつくかと思います。既存の設定をRuby DSLにエクスポートして、DSLを編集して、AWSに適用して…という感じで運用します。
所謂、冪等性を確保しているので何回実行してもRuby DSLの記述通りにAWSが設定されます(DSLと設定が同じなら何もしません)
ついでに、dry runとか(Kelbimの方は)RSpecでのテストとかできます。
DSLは以下のような感じです。
Piculet
ec2 "vpc-XXXXXXXX" do security_group "default" do description "default VPC security group" ingress do permission :tcp, 22..22 do ip_ranges( "0.0.0.0/0", ) end permission :any do groups( "any_other_group", "default" ) end end egress do permission :any do ip_ranges( "0.0.0.0/0" ) end end end end
Kelbim
ec2 "vpc-XXXXXXXXX" do load_balancer "my-elb" do spec do url = URI.parse('http://www.example.com/') res = Net::HTTP.start(url.host, url.port) {|http| http.get(url.path) } expect(res).to be_a(Net::HTTPOK) end instances( "hastur", "cthulhu", "nyar", ) listeners do listener [:http, 80] => [:http, 80] do app_cookie_stickiness "CookieName"=>"20" end ...
生い立ちとか
もともと別件でPuppetのリポジトリを調べてたらpuppetlabs-dnsを見つけて「Puppet的に管理するのもありかー」*1と思って、でもシンタックスが気に入らなかったので夏頃からちまちま作り始めて、そうしてRoadworkerできたら他のもおんなじように管理すると便利そうだからと作り始めて…という感じです。
あとはIAMも同様に管理すると便利そうですね。誰か作ってください。
それCloudFormationで
CloudFormationはライフサイクルがおおむねテンプレートと一緒になってしまうのがにんともかんとも。そもそも某社ではCloudFormationを使ってないので。あとJSONがいまいちというのもありますね。無理矢理な関数とか。JavaScriptで記述できるようにすればいいのに。
既存の設定をエクスポートできて途中から設定を適用できてdry runがあってプログラマブルに設定を記述できていたら使っていたかもしれないです。
いろいろ
- 「do〜end」をブレースで出力したらさらに設定ファイルっぽくなりますね。なんとなくRuby界隈のDSLでは「do〜end」が主流な気がしたのでそれに従いました。エクスポート時のオプションで切り替えられたりするといいんですかね
- RSpecは案外組み込みやすかったです。RoadworkerはRSpecもどきなので、そのうちRSpec組み込みにしたいです
- ELBのポリシーまわりのAPI・データ構造は後付け感がありますね。Ruby SDKのAPIもだいぶ苦労しているような気がします
- ELBのschemeはinternalとInternet-facing以外もサポートするようになるんですかね
- セキュリティグループはAPIだけみると他のユーザからのアクセスを制御できるような感じなんですが(ユーザIDとか)、現状はできないようです
- DescribeLoadBalancerPoliciesでまとめてポリシーを取得できないの辛いです
- drone.io、便利ですね。bitbucketユーザは何かと肩身が狭い世の中なのでありがたいことです
その他
次はCloudFormationのラッパーを書こうかと思ってます。Vagrantの複数台管理がめんどくさそうなので。*2。主に個人用途
だれかIAM管理ツールを作ってください。