data_bagsの用途について

こんにちは。小宮です。
data_bagsについて内部的に解説する必要が生じたのでこちらにも書いておきます。

最近のdata_bagsの活用方法は以下のとおり

1.LDAPで管理していないシステム用途のOSユーザ情報をロードしてレシピで追加
2.SSL証明書の格納とレシピからロードしてtemplateで設定
3.ntpサーバの情報のロードとtemplateで設定
4.awsのクレデンシャル情報を管理して各種スクリプトへ埋め込み
5.mysqlやldapなどのパスワードなどアカウント情報の管理
6.roleとenvironmentに収まりきらないnginxやapacheのvhostやupstream等の情報の管理
7.gangliaのhead_nodeやcluster_nameの情報の管理


0.下準備的な解説

※前提条件としてchef-soloの場合”knife-solo_data_bag”というgemが必要なので入れる。
(gem listでなければgem installかbundlerで入れてください)

格納方法と確認方法

暗号化しない場合、viなど任意のエディタで編集OK
chef-repository/data_bags/任意のディレクトリ名/任意のファイル名.json
をつくる。
中身はjsonの規則にのっとっている必要があるので、シンタックスをjson_verifyでCHK。

cat data_bags/dirname/filename.json |json_verify
で、JSON is valid と出るのを確認する

暗号化する場合、
まずEDITORの環境変数を~/.bashrcなりに設定しておく必要があるのと暗号化用の鍵を作って設定しておく必要がある。
(※鍵は案件ごとに異なるイメージで、.gitignoreに書いとく必要があります。
 流出厳禁かつ無くすとデータが見えなくなります。)

※コメント外すと鍵指定しなくてもknifeコマンドでcreateした場合常に暗号化される
 ゆえに暗号化せず扱いたいデータファイルはviで作るかコメントインしてから作る必要有

鍵が必要なら作る
(※.chef/knife.rbの相対パスはchefリポジトリ直下を意味します)

・注意するべきこと
→bashやexecuteリソースは極力使うべきではない。templateリソースつかってください。
 bashでsedるとdata_bagsから変数に入れた特殊文字が展開されて意図しない値が入ったりします
 もうひとつ、sedると毎度毎度同じsedをする必要が生じるなど冪等にならないです。


1.LDAPで管理していないシステム用途のOSユーザ情報をロードしてレシピで追加

これは大したことしてないのでポインタで失礼します
Chefで既存手順のレシピを書く2(ユーザ作成) | DEVLAB
暗号化はしていないパターン。(パスワードはあらかじめ暗号化した文字列を入れる)
個人ユーザはLDAP管理でchefでは扱うのはldapのclient設定ファイル配布等です


2.SSL証明書の格納とレシピからロードしてtemplateで設定

apacheとnginxでやっておりますがnginxの場合についてを記載します。

ssl証明書の格納方法についてですが、改行コードを以下のように文字列に変換したものを貼ります。
証明書と鍵なのでもちろん暗号化で入れてロードしております。

レシピ側でロードする方法について(一部抜粋)

variablesで@になってる箇所にdata_bagsからロードして変数に入ってる値をセットできます。


3.ntpサーバの情報のロードとtemplateで設定
5.mysqlやldapなどのパスワードなどアカウント情報の管理

これもポインタで失礼をば。
chef-soloのレシピのカスタマイズの記録 | DEVLAB
ご参考まで。


4.awsのクレデンシャル情報を管理して各種スクリプトへ埋め込み

もちろん暗号化して入れます。
ssl証明書の場合とロード方法も埋め込む方法もあまり変わらないので省略します。

作成・編集・確認は以下のように。

こんなかんじでいれて、ロードする方法はたとえば以下のようにしています。(設置せずにスクリプトに変数渡してます)


6.roleとenvironmentに収まりきらないnginxやapacheのvhostやupstream等の情報の管理

レシピ的には以下のとおりです

jsonファイルは特に暗号化していません(gitで確認しづらいですし)


roleもenvironmentも多数あって、どっちかに収まりきらないという時にはdata_bagsに入れるしかなさげです。


7.gangliaのhead_nodeやcluster_nameの情報の管理

これは6とあんまり変わらないので省略します

参考:

databags を使ってみた一部始終(1) – ようへいの日々精進
[chef] data bag活用法 | ITインフラ雑記帳
Chefで公開したくないJSONデータを暗号化するためにDataBagsを利用してみた記録 – さよならインターネット
ご参考まで。読んでいただいてありがとうございました。

おすすめ記事