ChefのDatabagとは?Attributeとの違い/使い分け
Data Bagの使い方について悩むことがあったので、Attirbuteとの違いを交えながら説明します。
chefのインストールはこちらから
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)
- 作者: 吉羽龍太郎,安藤祐介,伊藤直也,菅井祐太朗,並河祐貴
- 出版社/メーカー: 技術評論社
- 発売日: 2014/05/22
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (12件) を見る
- 作者: 澤登亨彦,樋口大輔,クリエーションライン株式会社
- 出版社/メーカー: KADOKAWA/アスキー・メディアワークス
- 発売日: 2014/04/25
- メディア: 大型本
- この商品を含むブログ (1件) を見る