ChefのDatabagとは?Attributeとの違い/使い分け

Data Bagの使い方について悩むことがあったので、Attirbuteとの違いを交えながら説明します。

chefのインストールはこちらから

f:id:komeiy:20140820204528p:plain

Chef Data Bagとは

Chefサーバから参照可能なjson形式のデータです。レシピ固有ではなくグローバルなデータとして扱われます。

data_bagとAttribute比較

  • data_bagは クックブック全体で共通なデータ
  • Attributeは クックブック単位のデータ

レシピを流す際に都度変わるパラメータをどこかにセットしたいとなるとAttribute、Chefサーバがノード全体で共通のデータベースを配置しておくならData Bagというイメージです。

chef-soloメインな環境はdata_bagよりAttributeの方が頻度高いと思います。

Data Bagの使い方

配置場所と書き方や使い方を説明します。

Data Bagの配置場所

chef
 |-- cache
 |-- cookbooks
 |    |-- create_user
 |    |-- hello
 |
 |-- data_bags
      |-- users

直接jsonファイルを操作可能ですが、knife data bag create <data_bag name>で作成も可能です。

他にも、以下のコマンドを使って操作することも可能です。

  • knife data bag edit <data_bag name>
  • knife data bag show <data_bag name>

Data Bagの書き方

data_bagはjson形式で記述します。

{
 "id": "komei",
 "home": "/home/komei",
 "shell": "/bin/bash"
}

data bagはidで管理されます。keyをidにしたデータが必ず含まれるようにする必要があります。

レシピ内でのData Bagの使い方

users = data_bag('users')

users.each do |id|
  u = data_bag_item('users', id)
  user u['id'] do
    home u['home']
    shell u['shell']
  end
end

data_bags/usersの配下のjsonファイルを全て読み込んでレシピを適用します。

Data BagとAttributeの比較

Attributeの使い方

Attributeはデフォルトを定義して、ノードのアトリビュートで上書き。

default["apache"]["dir"]="/var/www/html"
default["apache"]["port"]="80"

chef-soloで「-j node.json」オプションを使って、デフォルトのAttribute値を上書きすることが可能です。

{
  "run_list" : [
    "recipe[install_httpd]"
  ],
  "apache" : {
     "dir" : "/etc/apache/html",
     "port" : "80"
    }
}

まとめ

 冒頭に記載した通り、レシピを流す際に都度変わるパラメータをどこかにセットしたいとなるとAttribute、Chefサーバがノード全体で共通のデータベースを配置しておくならData Bagというイメージが設定方法を見る事で伝わりましたでしょうか。

 AttributeとData Bagの違いを理解して両方を使い分けて使えると良いと思います。これからChefに入門したい人は参考書を一から進めるのが一番だと思います。


シェアして頂けると嬉しいです。
参考になったという方がいれば是非お願いしますm(_ _ )m
モチベーション維持の観点で非常に励みになります。

このエントリーをはてなブックマークに追加

Chef実践入門 ~コードによるインフラ構成の自動化 (WEB+DB PRESS plus)

Chef実践入門 ~コードによるインフラ構成の自動化 (WEB+DB PRESS plus)

Chef活用ガイド コードではじめる構成管理

Chef活用ガイド コードではじめる構成管理