それなりに適当にやってます

なんとなくそれっぽいメモとか備忘録とか適当に。 2018年5月にブログ移転しました。 古い記事は未整理です。

Chef のお勉強

今はAnsibleメインだけど、Chef知ってる人が現場に入ってきたのと、AWS OpsWorksがChefな感じなのでローカルで軽くいぢってみた。

参考URL

テスト環境

  • AWS/EC2
  • CentOS7.x
  • Chefはローカルモードで動かす

Chef Development Kit のインストール

公式サイトにRPMが用意されているので、それをインストールする。

$ sudo yum install https://packages.chef.io/files/stable/chefdk/1.2.22/el/7/chefdk-1.2.22-1.el7.x86_64.rpm

あとでNginxのインストールを試すので、EPELも有効にしとく。

# yum install epel-release

Chef 入門

Chefリポジトリの作成

cookbookとかchefに必要な環境一式を作成して、ついでにリモートのGitリポジトリへpushする。

$ chef generate repo [CHEF-REPOSITORY-NAME]$ cd [CHEF-REPOSITORY-NAME]$ git remote add origin http://[REMOTE GIT REPOSITORY]$ git add .$ git commit -a$ git push -u origin master

Nginx用Cookbookの作成

こちらを参考にNginxのCookbookを作成

$ knife cookbook create nginx -o ./cookbooks/$ vi ./cookbooks/nginx/recipes/default.rb
package 'nginx' do    action :installendservice 'nginx' do    action [ :enable, :start]end  

ノード情報の登録

chef-client をローカルモードで実行し、ローカルの情報をJSONで出力する。

$ chef-client -z...$ cat ./nodes/<EC2 HOSTNAME>.json

登録された事を確認

$ knife node list -z  ->EC2のホスト名が出力される事を確認

ノードにNginx Cookbookのレシピを適用

作成したレシピ(Nginx Cookbook)と、登録したローカルホストを関連付ける。

$ knife nide run_list add `hostname` 'recipe[nginx]' -z$ knife node show `hostname` -z...Run List:    recipe[nginx]  

Chefのローカルモード実行

関連付けしたレシピの内容をローカルモードで、ローカルホストに適用する。

$ sudo chef-client -z

正常に完了するとレシピ通り Nginx がインストールされ、サービスが起動している状態になる。

$ systemctl status nginx...   Active: active (running)$ curl localhost  ->Nginx既定のページが表示される。

"index.html" の追加

"index.html.erb" を作成し、Chefで反映してみる。

$ vi cookbooks/nginx/templates/default/index.html.erb
oppaioppai!  

"index.html" をテンプレートとしてNginxに反映されるため、再度Cookbookを書き換える。

$ vi cookbooks/nginx/recipes/default.rb
package 'nginx' do    action :installendtemplate 'index.html' do    path '/usr/share/nginx/html/index.html'  owner 'root'  group 'root'  mode 0644endservice 'nginx' do    action [ :enable, :start]end  

レシピの反映

作成した"index.html"のテンプレートと、更新したレシピを適用してみる。先に反映されたNginxのインストールや、サービスの有効化/起動は up to date という出力で変更なく、index.html の変更において既定と更新分の差分などが出力される。

$ sudo chef-client -z

結果として"index.html"が更新された。

# curl localhostoppaioppai!  

試しにNginxを停止したり、index.html.erb を更新した後、レシピを適用すると変更のみ反映される事がわかる。

基本的なことしかしてないので Attribute , Role , Environment や、chef-serverOpsWorks とか、真面目に使おうと思うともっと突っ込んだとこまで勉強する必要があるけど、ローカルで動かすだけならこんな感じでいけそうというとこまでは分かった。

以上、適当に。