平 成 23 年 度 研 究 レポート 課 題 サーバの 構 築 作 業 や 運 用 管 理 を 自 動 化 する Chef を 使 うためのチュートリアル サービスディベロップメントグループ 並 河 祐 貴 2011 年 8 月 31 日 1
概 要 Chef は Ruby 製 のシステム 管 理 ツールで サーバOSでのミドルウェアやア プリケーションのインストール OSやミドルウェアの 設 定 各 稼 動 サービスの 状 態 管 理 等 諸 々のシステム 構 築 や 運 用 作 業 を 自 動 化 してくれるツールで オ ープンソースソフトウェアとして 公 開 されている Chefは 世 界 中 で 主 にサー ビスプロバイダの 運 用 基 盤 として 利 用 されており 利 用 実 績 も 出 始 めている 本 レポートでは この Chef の 概 要 やアーキテクチャ セットアップ 手 順 を 解 説 した 上 で 実 際 の 設 定 の 流 れをチュートリアル 形 式 で 解 説 する 2
第 1 章 はじめに Chef は Ruby 製 のシステム 管 理 ツールで サーバOSでのミドルウェアや アプリケーションのインストール OSやミドルウェアの 設 定 各 稼 動 サービス の 状 態 管 理 等 諸 々のシステム 構 築 や 運 用 作 業 を 自 動 化 してくれるツールで オープンソースソフトウェアとして 公 開 されている 国 外 では 既 に37signals やEngine Yard RightScaleといったサービスプロバイダの 運 用 基 盤 として 利 用 されており 利 用 実 績 も 出 始 めている ところで Ruby 製 のシステム 管 理 ツールといえば Puppet を 思 い 浮 かべる 方 も 多 いのではないだろうか ChefはPuppetの 競 合 ソフトウェアとなる 位 置 付 けで これらのツールで 出 来 ることだけ 挙 げると 特 別 大 きな 差 はないと 感 じ ているが Puppetは 基 本 的 に 外 部 DSLとして 設 定 を 記 載 するのに 対 し Chefは 内 部 DSLで 設 定 を 記 載 できるというような " 使 い 方 "の 違 いがある 個 人 的 には Rubyのコードで ある 程 度 柔 軟 に 設 定 を 書 いていけるような 内 部 DSLの 仕 組 みは 好 みだが 人 によっては 好 みの 差 があるので システム 管 理 者 が 使 いやすいツ ールを 選 択 すれば 良 いのではないかと 考 えている サーバ 構 築 システム 管 理 の 自 動 化 が 必 要 な 理 由 筆 者 の 担 当 するアメーバピグやピグライフというサービスは 現 在 (2011/08) 合 計 で 約 300 台 近 くのサーバを 利 用 している 管 理 するサーバが 数 台 のうちは あまり 運 用 コストを 気 にしなくて 良 いが 上 記 のような 数 十 台 数 百 台 といっ たオーダーになると サーバを 運 用 管 理 する 上 で 以 下 のような 様 々な 面 倒 事 が 発 生 する サーバ 一 台 一 台 に 対 して 全 て 手 作 業 でオペレーションを 行 うのは 大 変 手 作 業 でのオペレーションミスは 防 止 が 困 難 同 じ 役 割 のサーバごとで 環 境 差 異 が 発 生 大 規 模 なサービスになると まとまった 台 数 のサーバを 投 入 することも 良 く ある 話 で その 都 度 サーバのセットアップを1つ1つ 手 で 構 築 することは 大 変 で あり 何 より 投 入 までのリードタイムが 長 くなることで 投 入 が 遅 れ 機 会 損 失 を 発 生 させることは 事 業 的 に 避 けたいと 誰 もが 思 うことだろう 3
また サーバを 運 用 していると 特 定 の 役 割 のサーバ 数 十 台 に 対 して ある 設 定 を 追 加 したい といった 作 業 もよく 発 生 する こういった 作 業 についても 自 動 化 の 仕 組 みを 作 っておくことで 設 定 + 確 認 作 業 をミス 無 く 実 施 (もしくは 間 違 いが 発 生 しても 複 数 台 に 即 修 正 を 反 映 できる)ことは 大 きなメリットであ るといえる そこで これらの 課 題 を 解 決 する1つの 解 が Chef のようなシステム 管 理 ツ ールの 利 用 になると 考 える 本 レポートでは Chefの 概 要 やアーキテクチャの 説 明 セットアップ 手 順 から 読 者 が 実 際 に 設 定 して 利 用 できるようにチュー トリアル 形 式 で 使 い 方 の 解 説 を 行 う 4
第 2 章 Chef の 仕 組 み Chefは HTTP(S) 通 信 でのやりとりを 前 提 としたサーバ クライアント 式 のモ デルで 基 本 的 にはクライアント 側 からサーバへ 情 報 を 取 得 するPULL 型 のシス テムアーキテクチャとなる 尚 動 作 プラットフォームとしては Linux BSD MacOS Solaris 等 がサポートされている ( 現 状 Windowsはサポートされてい ない ) クライアント サーバ 側 のソフトウェア 構 成 は 以 下 となる 図 1: Chefのアーキテクチャ 上 図 では 全 てオープンソースソフトウェアでの 構 成 となっているため Chef の 利 用 をはじめる 上 で 必 要 となるソフトウェア 費 用 等 は 特 に 発 生 しない( 各 ソ フトウェアの 詳 細 については 今 回 は 割 愛 する) 各 ソフトウェアは 各 々HTTPで REST 形 式 のAPIを 介 して JSON 形 式 のデータのやり 取 り 連 携 を 行 うシンプルな アーキテクチャモデルとなる 5
主 な 処 理 の 流 れとしては chef-clientといったクライアントソフトウェアが chef-serverから 自 分 自 身 (クライアント)に 必 要 な 設 定 を 確 認 し 必 要 なミドル ウェアのインストールや 設 定 をクライアント 自 身 に 実 施 するといった 流 れとな る Chefでは サーバがどのような 状 態 であるべきかを 記 載 した Cookbookと 呼 ばれる 設 定 を 書 くことで 複 数 のプラットフォームの 差 を 吸 収 してくれる 仕 組 みがあるため CentOSやUbuntuといった 利 用 するOSディストリビューション によって インストールスクリプトや 設 定 を 書 き 直 すといった 面 倒 事 がなくな り プラットフォームによる 差 異 を 意 識 せずに 済 むようになる Chefでの 登 場 人 物 と 役 割 ここからは Chefで 行 う 設 定 について 簡 単 に 記 す 以 下 は Chefの 全 ての 設 定 がおさめられるリポジトリのディレクトリ 構 成 の 第 一 階 層 目 となる chef-repo/ -- Rakefile -- certificates -- config -- cookbooks -- data_bags `-- roles Chefの 仕 組 みを 読 み 解 くと ディレクトリの 中 で まずcookbooksとrolesと いった2 種 類 の 大 きな 設 定 がある cookbooksは Chef 側 でシステムのあるべき 形 を 定 義 する 設 定 を 記 述 するもの である rolesは サーバ(Chefでいうとclient またはnodeと 呼 ばれる)の 役 割 を 定 義 した 設 定 のことで 例 えば"Webサーバ"や"DBサーバ"といった 役 割 単 位 で グルーピングしたい 場 合 などは このrolesを 定 義 する 次 に 先 ほど 紹 介 したcookbooksの 中 にも 様 々な 設 定 項 目 があり 以 下 が cookbooksディレクトリ 内 の 構 成 となる 6
cookbooks/ -- attributes -- definitions -- files -- libraries -- metadata.rb -- providers -- recipes -- resources `-- templates この 中 で 基 本 となる 部 分 は recipes templates atteributesの3つである それぞれについて 以 下 で 説 明 する recipesは システムのあるべき 姿 つまり 設 定 内 容 を 実 際 に 記 載 したRubyス クリプトである 例 えば Apacheのパッケージをインストールしたい 場 合 は 以 下 のようにrecipeに 記 述 する package "apache2" do end action :install また あわせて 以 下 のように 記 載 すると 自 動 起 動 が 有 効 になっているか およびサービスが 起 動 しているかどうかの 確 認 も 行 うよう 設 定 される ( 設 定 が 有 効 になっていない 場 合 は 有 効 に サービスが 起 動 していない 場 合 は サービ スを 起 動 することが 可 能 ) service "apache2" do end action [ :enable, :start ] 次 に templatesは ERB 形 式 で 記 述 可 能 な 実 際 にサーバへ 配 置 する 設 定 フ ァイルのテンプレートである 動 的 にパラメータを 変 更 したい 箇 所 など 各 サ ーバで Chefを 実 行 した 際 に 実 際 にそのサーバの 役 割 にあった 設 定 値 をあて はめる 場 合 などで 利 用 する そこで Chefでは この 実 際 にあてはめる 設 定 値 (パ 7
ラメータ)のことをattributesと 呼 んでいる 例 えば Apacheがインストールされたサーバで roles( 役 割 )ごとに 設 定 値 を 変 えたい 場 合 以 下 のようなports.fileのテンプレートを 事 前 に 作 成 しておく Listen <%= port %> NameVirtualHost *:<%= port %> 実 際 の 設 定 値 (attributes)に 関 しては roles( 役 割 )ごとに 設 定 したり 各 サ ーバ(node)ごとに 設 定 することも 出 来 る また rolesやnodeにattributesが 設 定 されていない 場 合 は default 値 を 決 めておくことも 可 能 となる 8
第 3 章 セットアップ 方 法 本 章 では 実 際 にChefが 動 く 環 境 のセットアップ 方 法 について 記 す ここで は クライアント サーバともにLinux(CentOS 5 系 )での 構 築 を 前 提 として 説 明 を 進 める クライアント 編 ChefはRuby 製 のため まずRubyのインストールが 必 要 となる 尚 CentOS 5 系 では パッケージ 管 理 されているRubyのバージョンが 古 いため 外 部 リポジ トリからのインストールを 以 下 の 手 順 で 行 う # wget -O /etc/yum.repos.d/aegis.repo http://rpm.aegisco.com/aegisco/el5/ae gisco.repo # yum install ruby-1.8.7.334-2.el5 ruby-devel-1.8.7.334-2.el5 ruby-ri-1.8.7.33 4-2.el5 ruby-rdoc-1.8.7.334-2.el5 ruby-static-1.8.7.334-2.el5 rubygems 次 に Chefのインストールを 行 う 今 回 利 用 したChefのバージョンは0.9.18 となる # gem install chef -v 0.9.18 その 後 以 下 の 手 順 でバージョン 情 報 が 表 示 されると クライアントのイン ストールは 無 事 完 了 となる # chef-client -v Chef: 0.9.18 サーバ 編 まずは 先 ほど 記 したクライアント 編 のセットアップと 同 じ 手 順 を 実 施 し chef-clientが 実 行 できることを 確 認 する 次 に 以 下 の 手 順 で 外 部 リポジトリから 必 要 なパッケージをインストールす 9
る # rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/x86_64/epel-release -5-4.noarch.rpm # yum install ruby-shadow gcc gcc-c++ couchdb erlang rabbitmq-server jav a libxml2-devel zlib-devel sqlite-devel chef-serverのバックエンドで 必 要 となるCouchDBとRabbitMQを 起 動 する # /etc/init.d/couchdb start # /etc/init.d/rabbitmq-server start RabbitMQをChefで 使 う 設 定 を 行 う # rabbitmqctl add_vhost /chef # rabbitmqctl add_user chef testing # rabbitmqctl set_permissions -p /chef chef ".*" ".*" ".*" chef-serverや merb chef-serverとの 連 携 で 利 用 するアダプタ 等 のインス トールを 行 う # gem install chef-server -v 0.9.18 # gem install merb # gem install sqlite3-ruby -v 1.2.5 尚 CentOS 5 系 でインストールできるsqliteのバージョンが 古 いため sqlite3-rubyパッケージだけはバージョンを 指 定 する 形 でインストールを 行 う 次 に JAVA_HOMEの 環 境 変 数 およびPATHを 通 した 後 chef-solr-indexerと chef-solrを 起 動 する # export JAVA_HOME=/usr # export PATH=$JAVA_HOME/bin:$PATH # chef-solr-indexer & # chef-solr & 10
尚 きちんとした 運 用 をする 際 は これらの 起 動 / 停 止 スクリプトを 適 宜 作 成 した 方 が 良 い ( 本 レポートでは 割 愛 する ) 次 に chef-serverの 設 定 ファイルを "/etc/chef/server.rb"として 以 下 の 内 容 で 配 置 する 以 下 の 内 容 は Chefの 公 式 サイトで 公 開 されているため 実 際 に 利 用 する 際 は 以 下 リンク 先 からコピーすると 良 い http://wiki.opscode.com/display/chef/manual+chef+server+configuration# ManualChefServerConfiguration-ConfigureChefServer log_level log_location ssl_verify_mode chef_server_url :info STDOUT :verify_none "http://xxx.xxx.xxx.xxx:4000" signing_ca_path couchdb_database "/var/chef/ca" 'chef' cookbook_path [ "/var/chef/cookbooks", "/var/chef/site-cookbooks" ] file_cache_path "/var/chef/cache" node_path "/var/chef/nodes" openid_store_path "/var/chef/openid/store" openid_cstore_path "/var/chef/openid/cstore" search_index_path "/var/chef/search_index" role_path "/var/chef/roles" validation_client_name "chef-validator" validation_key "/etc/chef/validation.pem" client_key "/etc/chef/client.pem" web_ui_client_name "chef-webui" web_ui_key "/etc/chef/webui.pem" web_ui_admin_user_name "admin" web_ui_admin_default_password "somerandompasswordhere" supportdir = "/srv/chef/support" 11
solr_jetty_path File.join(supportdir, "solr", "jetty") solr_data_path File.join(supportdir, "solr", "data") solr_home_path File.join(supportdir, "solr", "home") solr_heap_size "256M" umask 0022 Mixlib::Log::Formatter.show_time = false 最 後 に chef-serverおよび chef-serverのapiにguiでアクセス 可 能 となる chef-server-webuiを 起 動 する これらも 必 要 に 応 じて 起 動 / 停 止 スクリプト を 作 っておくと 良 い # chef-server -N -e production # chef-server-webui -p 4040 -e production 起 動 後 ブラウザで http://(chef-serverのipアドレス):4040 にアクセス すると 図 2のログイン 画 面 が 表 示 される 図 2: chef-server-webui のログイン 画 面 ブラウザから ユーザ 名 とパスワードを"/etc/chef/server.rb"の "web_ui_admin_user_name"と"web_ui_admin_default_password"で 設 定 したも 12
の( サンプルでは admin / somerandompasswordhere )を 入 力 してログインする 画 面 遷 移 した 後 パスワードの 変 更 が 求 められるとログインは 成 功 となる ChefクライアントからChefサーバへのアクセス まず Chefサーバ 内 のファイル"/etc/chef/validation.pem"をChefクライア ントの"/etc/chef" 配 下 にscpコマンド 等 でコピーする 次 に Chefクライアン トの"/etc/chef" 配 下 に "client.rb"というファイル 名 で 以 下 の 内 容 を 記 述 する chef_server_url 'http://xxx.xxx.xxx.xxx:4000' node_name 'chef-test01' "chef_server_url"のxxx.xxx.xxx.xxxには ChefサーバのIPアドレスを 記 述 する また "node_name"は 任 意 の 文 字 列 を 入 力 する "node_name"はわかりや すくホスト 名 などを 付 けると 良 い 今 回 はサンプルとしてchef-test01としてい る 次 に 以 下 のコマンドを 実 行 し Chefサーバへアクセスする $ sudo chef-client 実 行 後 特 にエラーも 表 示 されず 実 行 されていれば 処 理 は 成 功 となる この 段 階 で 上 記 コマンドを 実 行 したChefクライアントの 情 報 が 登 録 され "/etc/chef/" 配 下 に"client.pem"という 鍵 ファイルが 配 置 され サーバに 情 報 が 登 録 される knifeコマンドのセットアップ knifeコマンドは Chefサーバにアクセスするクライアントソフトウェアの1 つで コマンドラインから 様 々な 操 作 を 実 行 することが 可 能 である 尚 knife コマンドはchefに 同 梱 されている knifeコマンドのセットアップは まず 以 下 のコマンドを 実 行 し knifeコマ ンドの 初 期 設 定 を 行 う 13
$ sudo knife configure "knife configure"では 設 定 項 目 について 以 下 のようにインタラクテイブに 入 力 する Where should I put the config file? [~/.chef/knife.rb] Please enter the chef server URL: [http://localhost:4000] http://xxx.xxx.xxx.x xx:4000 Please enter an existing username or clientname for the API: [username] chef-test01 Please enter the validation clientname: [chef-validator] Please enter the location of the validation key: [/etc/chef/validation.pem] Please enter the path to a chef repository (or leave blank): 上 記 2つ 目 の 質 問 では chefサーバのurl(ipアドレス:4000 番 ポート)を 3 つ 目 の 質 問 では chefクライアントのnode name( 今 回 のサンプルでは chef-test01)を 残 りは 基 本 的 にデフォルトのまま(Enterを 押 すのみ)で 問 題 な い 次 に 以 下 のコマンドを 実 行 し 先 ほどchef-clientコマンドを 実 行 した 際 に 発 行 された"client.pem"ファイルへのアクセスを 有 効 にする $ sudo chmod 644 /etc/chef/client.pem $ ln -s /etc/chef/client.pem ~/.chef/chef-test01.pem ここまででknifeコマンドに 関 する 最 低 限 の 設 定 は 完 了 となる 次 のコマンド を 実 行 し 登 録 済 のnode(Chefクライアント) 名 が 表 示 されれば 動 作 確 認 は 完 了 となる $ knife node list [ "chef-test01" ] 14
第 4 章 Chef を 使 いこなすための 第 一 歩 本 章 では Chefを 利 用 するためにまず 覚 える 事 項 をチュートリアル 形 式 で 記 す Chefのディレクトリ 一 式 を 作 成 する Chefに 触 れる 上 で 最 初 にやる 事 は Chefのディレクトリ 一 式 を 作 成 するこ とである Chefの 設 定 は どのマシンで 行 っても 良 いが 今 回 はChefクライア ントのマシンで 設 定 を 行 う まずは Chefクライアントのマシンの 任 意 のワーキングディレクトリ(ここで はサンプルとして ホームディレクトリ 配 下 とする)で 以 下 のコマンドを 実 行 する $ cd ~ $ wget --no-check-certificate -O./chef-repo.tar.gz http://github.com/opscode/c hef-repo/tarball/master $ tar zxvf chef-repo.tar.gz $ mv opscode-chef-repo-xxxxxx chef-repo 流 れとしては opscode(chefの 開 発 元 )のgithubから Chefのディレクトリ 一 式 ( 雛 形 )が 入 ったファイルをダウンロードした 後 に 展 開 する ここでは サン プルとして そのディレクトリ 一 式 をchef-repoとする Cookbookを 作 る まず Cookbookの 雛 形 となるディレクトリをknifeコマンドで 作 成 する 今 回 は サンプルとしてsampleという 名 前 のCookbookを 以 下 のコマンドで 作 成 する $ knife cookbook create sample -o ~/chef-repo/cookbooks "~/chef-repo/cookbooks/sample"にcookbookの 雛 形 となるディレクトリが 作 成 されていれば 成 功 となる 15
Recipeの 例 Chefでは 様 々なリソースがあらかじめ 用 意 されており それをRecipeに 組 み 合 わせて 記 載 したり Rubyで 処 理 ロジックを 書 くことで そのサーバのある べき 姿 を 設 定 として 定 義 する 例 えば そのサーバで 単 純 にApacheがインストールされ 稼 動 している 状 態 を 作 りたい 場 合 は 以 下 の 内 容 をRecipeに 記 載 する package "httpd" do end action :install service "httpd" do supports :status => true, :restart => true, :reload => true action [ :enable, :start ] end 1つ 目 のセクションのpackageリソースでは "httpd"のパッケージをインスト ールし 2つ 目 のセクションのserviceリソースでは OSブート 時 の 自 動 起 動 を 有 効 にした 上 で httpdをstartさせている (stopしている 場 合 はstartし 既 にstartしている 場 合 は 何 も 行 わない ) 尚 Chefで 利 用 できるリソースについては 公 式 ドキュメント ( http://wiki.opscode.com/display/chef/resources )に 全 項 目 の 説 明 と 利 用 可 能 オプション サンプルまで 揃 っているため ChefのRecipeを 書 く 際 は こ のページをリファレンスとして 確 認 しながら 記 述 していくと 良 い 実 際 にRecipeを 書 く ここから 簡 単 な 例 ではあるが Templateを 使 ったRecipeとして 1つのテキ ストファイルを 特 定 の 場 所 に 配 置 する 例 を 記 す このテキストファイルには Chefクライアントのサーバの 簡 単 なシステム 情 報 を 出 力 させるようにする 16
まず "~/chef-repo/cookbooks/sample/recipes/default.rb"ファイルを 開 き 以 下 の 内 容 を 記 述 し 保 存 する template "/tmp/chef-sample.txt" do source "chef-sample.txt.erb" mode 0644 end 次 に システム 情 報 を 出 力 するファイルのテンプレートとして "~/chef-repo/cookbooks/sample/templates/default/chef-sample.txt.erb"フ ァイルを 以 下 の 内 容 で 作 成 する Welcome to Chef! CPU : <%= node[:cpu][:"0"][:model_name] %> Memory: <%= node[:memory][:total] %> OS : <%= node[:platform] %> <%= node[:platform_version] %> 簡 単 な 例 ではあるが これでRecipeとTemplateの 記 述 が 完 了 となる Chefサーバへの 登 録 作 成 したCookbook(RecipeやTemplateを 含 んだもの)をChefサーバへ 登 録 する Chefサーバへの 登 録 は 以 下 のknifeコマンドを 実 行 する $ knife cookbook upload -a -o ~/chef-repo/cookbooks/ "-a"オプションを 付 けると 指 定 ディレクトリ 配 下 のCookbook 全 てをアップ ロードすることが 可 能 となる Cookbookのアップロード 後 以 下 のコマンドを 実 行 することで 登 録 されたCookbookを 確 認 できる $ knife cookbook list [ "sample" ] 17
次 に 先 ほど 作 ったCookbook(sample)を 適 用 するため 以 下 のコマンドを 実 行 し node(chefクライアントに)に 紐 付 ける $ knife node run_list add chef-test01 'recipe[sample]' chef-test01は 今 回 利 用 しているnode(Chefクライアント) 名 であり 引 数 の 最 後 に'recipe[Cookbook 名 ]'を 記 述 している chefを 実 行 して 反 映 する Chefクライアントのコンソールで 以 下 のコマンドを 実 行 して Cookbookで 設 定 した 内 容 を 反 映 する $ sudo chef-client エラーも 無 く 無 事 に 完 了 した 場 合 実 際 に 配 置 されたテキストファイルを 以 下 コマンドで 確 認 すると chef-clientコマンドを 実 行 したChefクライアントの システム 情 報 が 表 示 されている $ cat /tmp/chef-sample.txt Welcome to Chef! CPU : Intel(R) Core(TM)2 Quad CPU Q8400 @ 2.66GHz Memory: 4005864kB OS : centos 5.4 Attributeを 使 う Attributeは Templateなどで 実 際 に 利 用 する 設 定 値 を 格 納 する 器 のことで Cookbookでデフォルト 値 を 定 義 したり Role(nodeを"Webサーバ"などでグルー ピングしたい 場 合 に 利 用 )での 共 通 の 設 定 値 またnodeごとに 設 定 値 を 定 義 でき る 18
例 えば 先 ほどのsampleというCookbookでデフォルトのAttributeを 設 定 する ここでは 以 下 のように "~/chef-repo/cookbooks/sample/templates/default/chef-sample.txt.erb"の 最 後 に1 行 追 記 して 保 存 する Welcome to Chef! CPU : <%= node[:cpu][:"0"][:model_name] %> Memory: <%= node[:memory][:total] %> OS : <%= node[:platform] %> <%= node[:platform_version] %> Memo : <%= node[:memo] %> 次 に Cookbookでのデフォルト 値 を 定 義 する "~/chef-repo/cookbooks/sample/attributes/default.rb"ファイルを 以 下 の 内 容 で 作 成 する default[:memo] = "None." ファイルの 作 成 後 先 ほど 同 様 以 下 のコマンドでCookbookをアップロード する $ knife cookbook upload -a -o ~/chef-repo/cookbooks/ そして Chefクライアントで 再 度 以 下 コマンドを 実 行 する $ sudo chef-client chef-clientの 実 行 後 同 様 に 配 置 されたファイルを 確 認 すると 最 後 の 行 に デフォルト 値 として 設 定 したものが 表 示 されている $ cat /tmp/chef-sample.txt Welcome to Chef! CPU : Intel(R) Core(TM)2 Quad CPU Q8400 @ 2.66GHz 19
Memory: 4005864kB OS : centos 5.4 Memo : None. 最 後 に 先 ほどのデフォルト 値 を 設 定 したまま NodeのAttributeを 設 定 する knifeコマンドでnodeのattributeを 編 集 する 場 合 は 以 下 のコマンドを 実 行 す る $ EDITOR=vi knife node edit chef-test01 "EDITOR=vi"の 部 分 は 好 みのエディタを 指 定 することが 可 能 である 上 記 コ マンドを 実 行 すると エディタでNodeのAttributeが 編 集 できる Attributeは JSON 形 式 になっており 以 下 のように "normal"のkeyのvalueの 中 に サンプ ルとして "memo": "test chef-node." を 入 力 する { "normal": { "tags": [ ], "memo": "This is a chef-node." }, "name": "chef-test01", "override": { }, "default": { "memo": "None." }, 以 下 省 略 エディタを 保 存 して 終 了 すると "Saved node[chef-test01]"と 標 準 出 力 され Attributeの 設 定 が 完 了 する その 後 これまでと 同 様 の 手 順 で Cookbookをアップロードした 後 chef-clientコマンドを 実 行 する その 後 配 置 されたファイルを 確 認 すると 20
最 終 行 がNodeのAttributeに 設 定 した 値 に 置 き 換 わっていることが 確 認 できる $ cat /tmp/chef-sample.txt Welcome to Chef! CPU : Intel(R) Core(TM)2 Quad CPU Q8400 @ 2.66GHz Memory: 4005864kB OS : centos 5.4 Memo : This is a chef-node. このようにCookbookやRoleなどにデフォルトのAttributeを 設 定 しておくこ とで 基 本 的 にそれらの 値 を 反 映 させつつ 上 記 のようにNodeのAttributeを 利 用 し 特 定 のNodeについては 個 別 に 値 を 反 映 させたり 特 別 な 処 理 (Recipeに 記 載 しておく)を 加 えたりすることもできる 21
第 5 章 まとめ 本 レポートでは Chefの 概 要 アーキテクチャの 解 説 や 実 際 にCookbookを 作 成 し 基 本 となるRecipe Template Attributeを 使 った 簡 単 なサンプルをチ ュートリアル 形 式 で 解 説 した Chef 自 体 は アメーバピグやピグライフ およびdkstatの 一 部 で 導 入 してお り アメーバのインフラとして 運 用 の 過 程 で 改 善 している 段 階 である 同 一 の 環 境 とするべきサーバが 複 数 台 ある 環 境 においては 間 違 いなく 運 用 コスト は 下 がると 考 える アメーバでの 運 用 過 程 で 得 られたこれらのノウハウについ ては 次 回 のレポートや 社 内 外 の 勉 強 会 で 発 信 していく 次 第 である Chef 自 体 はまだ 多 くの 機 能 があるため もっと 深 く 学 ぶ 場 合 は 公 式 ドキュメ ント(http://wiki.opscode.com/display/chef/Home)を 読 むことで 多 くの 情 報 を 得 ることができる また 今 回 はknifeコマンドで 多 くの 設 定 を 行 ったが Role やNodeの 設 定 については chef-serverのwebuiから 設 定 を 行 うことが 可 能 であ る ちょっとした 確 認 や 設 定 であれば WebUIを 使 う 方 が 視 覚 的 にわかりやすい 面 もあるため 一 度 触 ってみると 良 いだろう 本 レポートにより エンジニア がシステム 管 理 ツールを 導 入 するための 第 一 歩 目 になれば 幸 いである 22