(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

Chefができないこと

スポンサーリンク

Chefの限界

サーバ構築や構成管理の自動化ツールとして用いられるChef
Chefは便利ですが、できないことに関してイメージを持つことも重要です。

今回はChefに絞っていますが、大きな観点としてはAnsibleやPuppetのような他ツールに関しても同様です。

ざっくりした結論から言えば「コマンド/スクリプトで実行できないことはChefで扱えない」です。

本記事では、上記主張に関してリソースタイプを中心に説明してました。

Chefについて

Chefではサーバに対する設定が書かれたファイルをレシピ(Recipe)と呼び、
レシピの開発者は、管理する環境をリソース(resource)として記述していきます。

リソースとはユーザやファイルといった環境を指し、各リソースにはアクションが用意されています。

以下に、Chefでよく見るリソースを5つピックアップしました。
それぞれのリソースが持つアクションについても記載しています。

リソース名 アクション
user create,lock,manage,modify,nothing,remove,unlock
group create,manage,modify,nothing,remove
file create,create_if_missing,delete,nothing,touch
directory create,delete,nothing
package install,nothing,purge,reconfig,remove,upgrade

そして、レシピの文法ですが

リソースタイプ "リソース名" do
属性 "属性値"
action :アクションタイプ

です。

属性(attiribute)とはリソースへの設定値の項目であり、
例えばdirectoryの属性にはgroup、mode、owner、path、recursive、rightsがあります。

UNIX系に通じている方であれば以下のレシピを見れば実現したい状態は理解できると思います。

directory "/foo/bar/baz" do
  owner 'root'
  group 'root'
  mode '0755'
  action :create
end

Chefではこのような定義済みのリソースとそれに付随するアクションと属性を利用することで、
従来は各環境にシェルスクリプトで実施していた、または手作業で実施していた作業を省力化しながら実現できます。

ちなみに、公式ドキュメントに記載がある全リソースを以下に記載しました。
数が多いですが、リソース名を見ればChefでどのような範囲が自動化できるのかがイメージできると思います。

本題: Chefができないこと

OSによって対応していないものもありますが、上で挙げたようなリソースに関しては用意されているアクションの範囲でChefで操作することが可能です。

では、リソースが用意されていなければ対応ができないのでしょうか。

もちろん、対応できます

対応法としては以下の3点です。

  1. 非公式で作成済みのリソースを利用する
  2. 任意のコマンドが実行できるリソースを用いる
  3. リソースを自作する

例えば、社内で独自のリソースが用意されていればそれを再利用して対象リソースを操作できます

Chefのリソースには任意のコマンドやシェルスクリプトRubyスクリプトを記述できるものがあります。
よって、コマンド化やスクリプト化ができているものはChefに取り入れることができます

そして、リソースはなければ作成することもできます。以下が公式ドキュメントです。
Custom Resources — Chef Docs
リソースの自作は再利用性を高める点では効果がありますが、そこで記述できる内容の上限もまた、任意のコマンドまたはスクリプトの発行です。

要は、コマンドで実行できない/スクリプト化できないことはできません
GUIでの操作でバイナリファイルが変更されるもの、といったものはChefでは扱えません。

終わりに

本記事では、Chefの概要とできないことについて記載しました。

ただし、スクリプトとの大きな違いである

  • OS間の違いを吸収した設定ファイル(一般的にWindowsLinuxの構築スクリプトは全く異なる)
  • 冪等性を保証した設計(この部分をスクリプトで保障する労力の削減)
  • 複数台の管理サーバーを一元的に管理

これらの点がChefやその他の自動化ツールの大きな強みです。

よって、事前に用意されているリソースに対する作業をChefに置き換えることには上で挙げたメリットを享受できます。
逆に、GUI操作に限定した作業であればRPAツールで自動化する、既に構築スクリプトが用意されてるものはChefに取り入れない、など自動化範囲の切り分けを適切に行うのが重要だと思います。

以上となりますが、かなりざっくりした内容なので、ケースバイケースの指摘があればぜひコメントお願いします。