※この記事は公開されてから1年半以上経過しています。情報が古い可能性がありますのでご注意ください。
最近、オープンソースの構築自動化・構成管理ツールの"Chef"が流行ってきています。ツールそのものの良さもありますが、日本でも活用事例が多く紹介されるようになったことも一因かと思います。しかし、Chefに関する日本語ドキュメントは少なく、また使い始めようとしても、環境構築でつまずくことが多いため、中々広まっていかないようです。
そこで、今回から3回に分けてChefの検証環境をセルフクラウド上で構築し、Chefを使い始めるまでの手順について解説していきます。
なお、本記事の内容は2012年9月1日に開催されたHBStudy#37 IDCFクラウドセルフハンズオンの内容を元に、当日参加者からいただいたフィードバック、つまずきやすいポイントなどの情報を加えております。 当日の資料、および今回解説する構築手順についての資料は、以下の場所で公開されています。一気に見てしまいたい方はこちらをご参照ください。
Chef概要
まず、Chefとは何か?について、ITサービスのライフサイクルの中での位置づけをもとに説明いたします。
この図は一般的なITサービスのライフサイクルの模式図です。Chefは、この中でハイライトされている「構築」「検証」の全体、および「設計」「運用」の一部を担うツールです。Chef開発元のOpscode社が主に書いているChef Wikiのトップページに、以下の4つがChefでできることとして書かれています。(原文に無い意訳を多く含みます)
- コマンド実行ではなくコードを書くことでサーバー管理をする
- アプリケーション、DB、LDAPやその他、インフラ上の様々な要素を統合、連携させること
- アプリケーション設定に必要なインフラ情報(今のDBマスターはどれか、など)を検索する
- 本番環境と全く同じ設定の環境(検証環境、受入れテスト環境など)を確実、簡単に作る
コードを書くことでサーバー管理ができれば、一度作ったコードはいつまでも保存可能です。二回目からの構築では同じ手順を確実に実行できるようになります。さらに、コード自体が構築手順書となるため、コードを読める人なら世界中の誰でも理解できます。これにより、ITシステムでありがちな、担当者しかシステムがわからない、という問題を減らすことが可能になります。
上記4つの「できること」の中にサービスの企画、設計、監視が含まれていないことに注意してください。企画と設計は人間が、監視は他のシステムを用意する必要があります。監視アラート対応も運用の一部なので、先ほどの図でも運用は一部だけChefの守備範囲になっていました。
図の中で設計部分が破線で囲まれているのは、Chefが従来とは異なるシステム設計方法を提供しているためです。Chefではサーバー管理のためのコードの設計、すなわちCookbookの設計を行います。また運用部分については、構成管理がChefの守備範囲となっていますが、運用には構成管理以外にもやらなければならないことがあるため、Chefだけですべてをカバーすることはできません。
Chef環境を構築する前に、Chef環境に存在する3つの役割について解説します。
- Server:Nodeの管理、Cookbookの配布などを行う。Web UIなども提供している。
- Node:Serverで管理される仮想/物理マシン
- Workstation:NodeをServer管理下に置くまでの初期設定などをしたり、Cookbook作成などの作業を行う場所。
Chef Wikiに掲載されている各役割の関係図を日本語にしてみました。
参考:Chef Wiki:Architecture Introduction
Chef Server環境構築手順
今回は構成を簡略化するため、Chef ServerとWorkstationを同じ仮想マシン上にセットアップします。また、Linuxディストリビューションとして、CentOS 6.1を利用します。これは、セルフクラウドではCentOSをご利用いただいている方が多いためです。以上から、構築する環境の全体像は以下の図の通りになります。
今回は、Chef Serverの役割をセットアップする手順について解説いたします。なお、前提条件としてセルフクラウドへのサインアップと支払い方法の登録は完了していると仮定し、仮想マシン作成から始めることにします。
手順1. Chef Server用仮想マシン作成とSSHログイン
下記の構成でセルフクラウド上に仮想マシンを作成します。
仮想マシンタイプ:M4 (Hourly)
ホスト名:ChefServer
追加ディスク:不要
SSH鍵:新規作成
ここで生成されたSSH秘密鍵を必ずコピーして、操作端末にテキストファイルとして保存してください。ここでしか表示されないため、コピーし損ねるとSSH鍵のサーバーへの登録が手間になります。 しばらくすると仮想マシンが起動します。仮想マシン作成完了後のパスワードについては、念のためメモして置いてください。仮想マシン作成完了後、SSHで仮想マシンに接続します。なお、弊社提供のLinuxのテンプレートは全てパスワード認証によるSSHログインを禁止する設定になっております。
SSH接続ができましたら、接続に利用した秘密鍵を後の手順で利用するため、サーバーの/root/.ssh/id_rsaとしてコピーします。また、アクセス権を所有者の読み取り権限のみに設定します。
手順2. Chef Server用パッケージ導入とChef Serverの起動
ubuntuなどのディストリビューションではrubygemとしてChef Serverが配布されているため、以前から導入が簡単でした。しかし、CentOSでは必要なソフトウェアパッケージを1つずつ導入する必要があり、難しいと言われてきました。最近、CentOS向けにChef Server導入に必要なパッケージをまとめて配布するリポジトリが提供されているので、こちらを利用することでChef Serverの導入が簡単になりました。
参考:Installing Chef Server 0.10 in RHEL 6
どれくらい簡単になったかというと、以下の3行のコマンドを実行するだけでChef Serverの導入が完了します!
# rpm -Uvh http://rbel.co/rbel6
# yum install rubygem-chef-server
# setup-chef-server.sh
この手順の最後で実行しているスクリプトにより、Chef Serverのインストールとサービス開始が行われますが、Web UIを司るサービスがうまく起動しません。サービスの状態確認をすると、以下のような出力結果になります。
# service chef-server status
chef-server (pid ####) を実行中...
# service chef-server-webui status
chef-server-webui が停止していますが PID ファイルが残っています
これは、なぜかPIDファイルが残っていることが原因のようです。サービスを再起動するとPIDファイルが削除され、うまく起動できます。
# service chef-server-webui restart
これでもうまく起動できない(PIDファイルが残っている)場合は、/var/run/chef/server-webui.main.pidファイルを削除してからサービスを開始するとうまく起動します。
Chef Server のWebUIはTCP4040番をLISTENしています。動作確認のため、このポートへのポートフォーワーディングの設定をします。ポートフォーワーディングの設定は、先ほどSSH接続の際も実施した通りで、プライベートポートを「TCP 4040番」に設定します。パブリックポートは4040番のままでもお好みの番号でも構いません。詳細な設定手順はこちらの記事をご覧ください。 設定後、ブラウザで公開設定したIPにアクセスすると、以下のようなログイン画面が表示されます。
ログインを求められますので、初期設定されている以下のID、パスワードでログインします。その後、パスワード変更を求められるので、パスワードに変更します。
注意:簡単すぎるパスワードでは特に理由が表示されないまま再度パスワード変更を求められるのでご注意ください。
次回は、Chef Serverを使い始めるための設定、およびChef Nodeの作成の手順について解説していきます。
<連載記事>
- IDCFクラウドでChefを使い始めるまで―第1回 Chef Server導入編
- IDCFクラウドでChefを使い始めるまで―第2回 Chef Workstation・Node構築編
- 【Chef 11版】Chef Server環境セットアップ手順の紹介