はじめまして。にっしーです。フットサル部でキャプテンやってます。
今回はデーコムフットサル部のご紹介、、、
ではなく、現在業務で絶賛活躍中の、インフラ構築を便利にするツール「Chef」をご紹介します。
一度 Chef を導入することで、その後のインフラ構築にかかる時間の大幅短縮が期待できます。
Chefってなに??
Chef(シェフ) は Ruby 製のシステム構成管理ツールで、インフラの構築を自動化することができます。
インフラをどのように構築するかを Ruby の構文で記述し、ソースコードのように扱うことができるインフラの定義は「Cookbook」と呼ばれます。
Chef を利用するための構成としては、1台のサーバー内で Cookbook の作成や管理、実行などをすべて完結させるスタンドアロン構成と、Cookbook をサーバーで集中管理し、クライアントはサーバーから Cookbook をダウンロードして実行するというクライアント/サーバー構成の2通りがあります。
今回は、スタンドアロン構成「chef-solo」についてご紹介します。
Chefをインストールしよう!
インストールは提供されているインストーラーを実行するだけ。
# curl -L https://www.opscode.com/chef/install.sh | bash
お手軽です。
Cookbookを作る!
今回は Apache を Chef でインストールしてみたいと思います。
Apache をインストールする Cookbook なので、名前は apache にします。Cookbook のひな形作成には、Chef と一緒にインストールされる knifeコマンドを使うと便利です。
# knife cookbook create apache -o /opt/chef-test/
apache Cookbook 完成です!
では、作成した Cookbook の中に、どういう構成で Apache を構築するかを定義していきます。
Recipe を書く!
Ruby の構文で書かれた構成の定義ファイルは「Recipe」と呼ばれ、作成した Cookbook 内のディレクトリ recipes 配下に作成します。
Recipe では Ruby の文法を用いて記述する他に、Resource と呼ばれる Chef 専用の命令を使用することができます。ユーザーを作成する場合は user 、ディレクトリを作成する場合は directory といった様な命令が多数用意されています。
今回はパッケージ管理を行う packaeg Resource と、サービス管理を行う service Resource を使用します。
/opt/chef-test/apache/recipes/install.rb # # Cookbook Name:: apache # Recipe:: install # # Copyright 2013, CREATIONLINE,INC. # # apacheインストール package 'httpd' do action :install end # apache起動 service 'httpd' do action :start end
Recipe が書けたところで、次は chef-solo の設定ファイルを作成します。
/opt/chef-test/solo.rb cookbook_path ["/opt/chef-test"]
このファイルには、実行する Cookbook のディレクトリパスを記載します。
最後に、実行 Recipe を指定する JSON ファイルを作成します。
/opt/chef-test/solo.json { "run_list" : [ "recipe[apache::install]" ] }
run_list に、実行する Recipe 名を書きます。
これで、Chef を実行する準備が整いました。では、実行してみましよう!
# chef-solo -c /opt/chef-test/solo.rb -j /opt/chef-test/solo.json Starting Chef Client, version 12.0.3 Compiling Cookbooks... Converging 2 resources Recipe: apache::install * yum_package[httpd] action install - install version 2.2.15-39.el6.centos of package httpd * service[httpd] action start - start service service[httpd] Running handlers: Running handlers complete Chef Client finished, 2/2 resources updated in 7.565753376 seconds
Chef の実行に成功したので、Apache の起動を確認します。
# service httpd status httpd (pid 19312) を実行中...
プロセスも起動していますし、ブラウザからも Apache のトップページが見えますね。
これで、Chec を使用した Apache のインストール完了です。
ですが、ちょっと待って下さい!インストールは完了しましたが、設定はデフォルトのままです。
インストールは自動化、設定は手作業というのでは自動化した意味があまりありませんね。
設定の自動化
Chef を使って設定も自動化しましょう!
template Resource を使うことで、予め用意した内容で指定したファイルを作成することができます。template は、Cookbook 内のディレクトリ templates 配下に作成します。
今回は、templates/default/httpd.conf.erb というファイル名で、内容を変更した httpd.conf を作成しておきます。
# tree /opt/chef-test/ /opt/chef-test/ └ apache ・ ・ └ templates └ default └ httpd.conf.erb
作成した template を使用するよう Recipe 修正し、Chef を実行します。
これで、独自の設定が反映された Apache が起動されます。
/opt/chef-test/apache/recipes/install.rb # # Cookbook Name:: apache # Recipe:: install # # Copyright 2013, CREATIONLINE,INC. # # apacheインストール package 'httpd' do action :install end # apache設定変更 template '/etc/httpd/conf/httpd.conf' do source 'httpd.conf.erb' action :create end # apache起動 service 'httpd' do action :start end
ここまででご紹介した内容が Chef の基本的な使い方になります。
今回は Apache のインストールのみを自動化しましたので、手作業と比べて大幅な時間削減とは言えませんが、ご紹介した Recipe の他に、ログのローテション、他ミドルのインストール、同構成のサーバーを複数台構築 などなど、Chef で行う内容が増えれば増えるほど、インフラ構築にかかる時間、手間の削減が期待できます。
興味がわいた方は、是非 Chef を使ってみてください。