Itamae meetup #1
Itamae は @ryot_a_rai くんの作ったプロビジョニングツールです。要は軽量版 Chef だと思えば大体あってます。で、めでたく meetup の第一回が開催されるということで、LT 枠でクックパッド社にお邪魔してきました。
話したこと
LT ということでかなり端折った資料になっているため、資料だけ見てもよくわからないかもしれません。資料に書いていないこと、発表で話せなかったことを補足しつつまとめます。
導入の背景
- 以前は Chef が使われていたが、リポジトリが分散し、かつ依存があってカオスであった
- 整理するくらいなら作りなおしたほうがはやい
- Chef はやりたいことに大して大げさすぎる
- Ansible は冪等性を維持する書き方がすっきりかけなくてダルい
- Puppet は使いはじめるまでに覚えることが多すぎる
- 知り合いが作っている OSS であればいろいろ安心
SmartNews における事例
- Github に push
- 大きめの修正を入れた時はpacker で AMI を build して、AutoScalingGroup に設定する
- CircleCI で共通部分のテストしたのち、S3 に zip して upload
- AutoScalingGroup で管理されている EC2 インスタンスが、起動時に zip を download し、自分のタグから role を判定して
itamae local
を実行
- 手動で即時反映したければ Fabric を叩く(この時も
itamae ssh
はしてなくて、各インスタンスが zip 落としてきてitamae local
です - あるいは AutoScalingGroup のインスタンスを総入れ替えするコマンドを作ってあるので、そいつを叩く
Directory 構成
基本的に Best Practice 構成
.
├── ci
├── cookbooks -> packer/cookbooks
├── fabfile
├── nodes -> packer/nodes
├── packer
│ ├── cookbooks
│ │ ├── admin
│ │ ├── common
│ │ ├── dd_agent
│ │ ├── docker
│ │ ├── pipelinedb
│ │ └── (snip)
│ ├── nodes
│ ├── roles
│ │ ├── auth-proxy
│ │ ├── forward-proxy
│ │ ├── ops-monitor
│ │ └── (snip)
│ ├── scripts
│ └── spec
│ ├── default
│ └── packer
├── roles -> packer/roles
└── spec -> packer/spec
nodes はインスタンス個別に yml を設定したいときにつかう想定…だったけど AutoScalingGroup 使い始めたこともあって使っていない
roles は一つ一つの機能の単位で、 インスタンスにつけている Group というタグと 1:1 で対応し、 AutoScalingGroup もこの role ごとに用意している
roles の下には default.rb とか production.rb とか staging.rb とかって置くようにしている
インスタンスのタグに応じて どっちを使うか決まる
default はどっちでも使われる
production.rb
node.reverse_merge!({
java: {
tomcat: {
java_opts: {
xmx: "10240m",
xms: "10240m",
},
maxThreads: "512",
},
},
td_agent: {
forward: {
smartnews_action: true
},
},
})
include_recipe "default.rb"
- default.rb
node.reverse_merge!({
app_name: "hogehoge",
java: {
tomcat: {
java_opts: {
xmx: "7680m",
xms: "7680m",
metaspace_size: "128m",
},
},
},
recipes: %W{
common
supervisor
java
java::tomcat
nginx
td_agent
dd_agent
dd_agent::nginx
dd_agent::supervisor
dd_agent::jmx
dd_agent::fluentd
},
})
- なんかこんな感じになっていて、
itamae local bootstrap.rb
するとbootstrap.rb
の中で、上述したようなタグに応じて適切にinclude_recipe
してくれるという構成です
まとめ
- スモールスタートしやすいツールなので itamae おすすめです