ここで書いている内容は、基本的には Chef-soloからItamaeに完全移行した話 - Qiita を参考にしているもの。あとは GitHub - toritori0318/itamae-sample-project: itamae-sample-project 、 Best Practice · itamae-kitchen/itamae Wiki · GitHub あたりも、かな。
そのやり方で itamae を使う場合、どんなレシピを適用するときでも、こんな↓かんじで起動する。
$ bundle exec itamae ssh -h www.example.com -j nodes/production.json -u a-know entrypoint.rb
entrypoint.rb
の中身は以下のようなかんじになってる。
node["recipes"] = node["recipes"] || [] node["recipes"].each do |recipe| include_recipe recipe end
node["recipes"]
の要素ぶんだけ、include_recipe
している。
node
には、itamae 起動時に -j
で指定した json ファイル(YAMLファイルを用いる場合は -y
)の内容が hash で入ってる。通常は attribute を指定するために使うものだと思うんだけど、今回の使い方だとその中身は、例えばこんな↓かんじ。
{ "mackerel": { "service_role": "service_name:role_name" }, "recipes": [ "./roles/base.rb", "./roles/production.rb" ] }
じゃあ roles/base.rb
とかにはどんなことが書いてあるの、ってことなんだけど、↓こんなかんじ。
include_recipe '../cookbooks/selinux.rb' include_recipe '../cookbooks/timezone.rb' include_recipe '../cookbooks/mackerel.rb'
ここでも include_recipe
。include_recipe
の入れ子。なるほどなーというかんじ。
もちろん、通常の node
としての利用(attribute としての使い方)もできる。
template '/etc/mackerel-agent/mackerel-agent.conf' do owner 'root' group 'root' mode '0644' source '../../files/mackerel/mackerel-agent.conf.erb' variables service_role: node['mackerel']['service_role'] notifies :restart, 'service[mackerel-agent]' end
つまり、
- 適用したいロールを、json ファイル内の
recipes
要素で指定する - ロール毎に適用したいレシピは、
roles/hoge.rb
でinclude_recipe
を列挙することで指定する
という形。どのレシピを適用するときでも、itamae ssh
に食わせるものは常に entrypoint.rb
でよく、適用したいレシピのコントロールは roles/hoge.rb
や nodes/hoge.json
でできるっていうのが、僕には嬉しいかんじ。
秘匿情報の管理には GitHub - sorah/itamae-secrets: Encrypted Data Bag for Itamae を使う。
$ itamae-secrets newkey --base=./secret --method=aes-random
で秘密鍵を作って(これは漏らしてはいけないやつ。公開リポジトリに push したりしないよう気をつけよう)、$ itamae-secrets set --base=./secret <secret値の種類の名前> <暗号化したい値>
というかんじで秘匿情報を暗号化する。
暗号化した情報は、レシピ内で以下のようにすれば読める。
require 'itamae/secrets' node[:secrets] = Itamae::Secrets(File.join(__dir__, 'secret')) # Use it p node[:secrets][<secret値の種類の名前>]
というかんじ
長らく chef-solo を使ってきた僕だけど、これくらいがちょうどよいかんじがある。もう少し規模が大きくなったり、チーム開発するってなったら、あきらめて chef を使うか、GitHub - sonots/kondate: Kondate is yet another nodes management framework for Itamae/Serverspec とかを使うのがいいのかも。
Infrastructure as Code ―クラウドにおけるサーバ管理の原則とプラクティス
- 作者:Kief Morris
- 発売日: 2017/03/18
- メディア: 単行本(ソフトカバー)