itamae運用に関する備忘録、本来はドニュメント等にあるはずの事に過ぎないが、必要な時に探すのが面倒なので、自分用にまとめておく。
実行に関して
レシピが実行されるのは、未適用の時
説明は不要だと思うが、itamaeを向けて実行した時に、レシピが未適用だったら問答無用に適用される
適用済みのレシピを再度適用させるのは、レシピの内容が変更された時
一度適用されたレシピを、再度itamaeを向けて実行しても、レシピの内容に変更がなければ、適用されない。つまり、何度実行しても、勝手にアップデートがかかるような適用はされない。
レシピの内容が変更されていなくても、関連ファイルの内容が変更されれば、適用される
レシピの中で、template等を使用してファイルを配置する場合などでは、レシピが全く変更されていなくても、そのsourceファイルが変更されていれば、適用される。
通常のレシピ適用ではパッケージアップデートはされない
RedHat系のみで確認していないが、新しいパッケージがある状態でレシピを適用させても、インストール済みのパッケージがバージョンアップされることはない。但し、明確にversionでversion指定するとアップデートされる(or アンインストールして再適用してもアップデート可能)。
テクニックに関して
packageはパッケージ管理ツールでインストール可能な安定版の最新バージョンがインストールされる
RedHat系に関して、YUMでインストールされるパッケージの安定版の最新バージョンがインストールされるので、特定のバージョンをインストールしたい場合には、package resourceでversionオプションを使用すること
Redhat系でリポジトリの有効/無効を切り替えてインストールする方法
Redhat系でリポジトリを通常enabled=0にしておいて、yum --enablerepo=xxxでインストールするのを、itamaeのレシピで実現するのはpackage resourceで optionsオプションを使用し、 options "--enablerepo=xxx"と記載する
service resource の:startは開始であって、restartではない
phpなど、apache(httpd)の関連サービスの起動が必要なものではaction :startとする必要がある。そのphpの場合、例えばphp.iniを変更した場合には、apache(httpd)の再起動の必要があるが、action :startでは、起動中のapacheプロセスは再起動されない。また、起動してない場合に action :stopしても不具合は起こらない。そのため変更後に再起動が必要なサービスは、イデオムとしてaction [:stop, :enable, :start]とすると良い
ポートフォワーディングとitamaeのpオプションを組み合わすと、直接グローバルIPで接続できないサーバーに対してもプロビジョニングが可能
Server1(itamae実行サーバー): 192.168.56.101
Server2(踏み台サーバー): 192.168.56.108 | 10.0.0.11
Server3(プロビジョニング先サーバー): 10.0.0.12
Server2でポートフォワーディング
# 踏み台サーバーでポートフォワーディング実行
ssh -i xxxx -L 192.168.56.108:20022:10.0.0.12:22 xxx@10.0.0.12
Server1でitamaeの実行
# itamae実行
itamae ssh -i xxxx -u xxx -h 192.168.56.108 -p 20022 recipe.rb
レシピの記載ポリシーについて
1つのサーバーのプロビジョニングをすべてまとめて1つのレシピを作成し実行していくやり方もあるが、そうするとレシピがそのサーバー用にカスタマイズされ過ぎて再利用性が乏しいレシピになってしまう。
再利用性を重視し、サービス単位でのレシピを作成し、手動のitamaeコマンドで実行していくやり方では、Infrastructure as Code が台無しになってしまう。
関連サービス単位でのレシピを作成し、itamaeコマンドの実行に関してはサーバー単位でまとめた実行シェルスクリプトを作成し実行するのが、Infrastructure as Codeという観点や、レシピの再利用にも良いと思う。