SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

インフラ構成管理ツールを使いこなす!コードではじめるサーバ構築

インフラを自動で構築! ChefでローカルにWebアプリの開発環境をつくるRubyコードを書いてみよう

インフラ構成管理ツールを使いこなす! コードではじめるサーバ構築 第4回

  • X ポスト
  • このエントリーをはてなブックマークに追加

Vagrantによる仮想環境の構築

 それではこれまで作成したCookBookをもとにして、Vagrantを使ってローカルのPCに仮想環境を作成します。

Vagrantfileの作成

 Vagrantで作成した仮想環境上でChefによるプロビジョニングを行うためには、あらかじめ仮想環境内にChefがインストールされている必要があります。そのため、omnibusというvagrantのプラグインを使用します。このomnibusはvagrantの起動時にChefがインストール済みかを確認し、インストールしていなければ自動でインストールしてくれるものです。今回は、Chefのバージョン12.0.3を使用しましたので、omnibusのversionも同じものを指定します。

リスト6 ominibusのインストール(vagrantfileの抜粋)
# chefをVMにインストールするプラグイン
config.omnibus.chef_version = "12.0.3"

 これで準備が整いましたので、VagrantfileからChefを呼び出してプロビジョニングするコードを記述します。

リスト7 VagrantからChefの呼び出し(vagrantfileの抜粋)
# Chefの設定
config.vm.provision "chef_solo" do |chef|
   # cookbooksの場所を指定します
   chef.cookbooks_path = "../httpserver"
   # apacheという名前のCookBookを適用
   chef.run_list = %w[
    recipe[apache]
   ]
end

 Vagrantで使うプロビジョニングツールをchef-soloとし、chef.cookbooks_pathでプロビジョンに必要なCookBookのファイルパスを指定します。

 次に、chef.run_listで実行するCookBookの名前を指定します。今回は、httpserverというフォルダの中にあるapacheというCookBookを使って環境が構築されます。

 なお、VagrantおよびVagrantfileの詳細については、サンプルファイルおよび前回の記事を参考にしてください。

Vagrantの起動

 VagrantfileおよびChefのCookBookが用意出来ればVagrantの仮想環境を起動します。今回のサンプルでは以下のようなディレクトリ構成になっていますので確認してください。

リスト8 ディレクトリ構成
├─httpserver
│  └─apache
│      ├─attributes
│      │      default.rb・・・属性値を定義
│      ├─definitions
│      ├─files
│      │  └─default
│      │          index.php・・・Webサーバに配置するファイル
│      ├─libraries
│      ├─providers
│      ├─recipes
│      │      default.rb・・・実行するレシピ
│      ├─resources
│      └─templates
│          └─default
│                  httpd.conf.erb・・・httpd.confのテンプレート
└─vagrant
      Vagrantfile・・・仮想環境を起動するためのファイル

 この状態で、次のコマンドを実行してVagrantを起動します。

リスト9 Vagrantの起動
E:\chef-sample\vagrant> vagrant up

 コンソールのログを確認すると、Vagrantで起動した仮想環境からChefのレシピが呼び出されて環境が自動で構築されているのが分かります。

リスト10 Chefのコンソールログ
INFO: *** Chef 12.0.3 ***
INFO: Chef-client pid: 2632
INFO: Setting the run_list to ["recipe[apache]"] from CLI options
INFO: Run List is [recipe[apache]]
INFO: Run List expands to [apache]
INFO: Starting Chef Run for vagrant-centos65.vagrantup.com
INFO: Running start handlers
INFO: Start handlers complete.
INFO: --- [START] WebServer Install from Chef ---
INFO: remote_file[/tmp/remi-release-6.rpm] created file /tmp/remi-release-6.rpm
INFO: remote_file[/tmp/remi-release-6.rpm] updated file contents /tmp/remi-release-6.rpm
INFO: yum_package[httpd] installing httpd-2.2.15-39.el6.centos from base repository
INFO: yum_package[php] installing php-5.5.21-1.el6.remi from remi-php55 repository
INFO: yum_package[php-mbstring] installing php-mbstring-5.5.21-1.el6.remi from remi-php55 repository
INFO: template[httpd.conf] backed up to /var/chef/backup/etc/httpd/conf/httpd.conf.chef-20141209140550.625861
INFO: template[httpd.conf] updated file contents /etc/httpd/conf/httpd.conf
INFO: cookbook_file[/var/www/html/index.php] created file /var/www/html/index.php
INFO: cookbook_file[/var/www/html/index.php] updated file contents /var/www/html/index.php
INFO: cookbook_file[/var/www/html/index.php] owner changed to 0
INFO: cookbook_file[/var/www/html/index.php] group changed to 0
INFO: cookbook_file[/var/www/html/index.php] mode changed to 644
INFO: service[httpd] enabled
INFO: service[httpd] started
INFO: --- [END] WebServer Install from Chef ---
INFO: Chef Run complete in 166.613541373 seconds

 エラーが発生すると、原因がコンソールに表示されますので、今一度レシピやCookbookで用意したファイルなどを見直してください。

 動作確認を行うときは、ローカルのPCから以下のURL

http://192.168.33.10/

にアクセスします。仮想環境上でWebサーバが起動しPHPのプログラムが動いていることが確認できます。

Webサーバの動作確認
Webサーバの動作確認

おわりに

 前回および今回の記事では、Chefをつかった開発環境の構築手順について紹介しました。駆け足でごく基本的なChefでのコーディングを説明しましたが、Chefの機能は非常に豊富で、ご紹介した以外にもさまざまなことができます。また、今回のサンプルではCookBookに1つのレシピを作成しましたが、実運用を行う上では環境に応じて複数のレシピを作成したり、複数のノードに展開できるよう再利用性を考えながらコードを書いていったりすることが必要になります。まさに、業務アプリケーションの開発と同じですね。

 しかしなんといっても、作成したCookBookやVagrantfileをGitなどのバージョン管理ツールを使って、開発チーム内で共有しておけば、同じテスト環境をなんどでも簡単に構築することが可能になります。これが、コードによるインフラ構築(Infrastructure as Code)の醍醐味です。「こっちではうごくけど、あっちではうごかない」をなるべく開発の早い段階でなくすことで、プロジェクト全体の開発生産性を上げることができます。

 次回の記事では、コンテナ型仮想化技術であるDockerを使って開発環境と同じ構成を、本番環境で動かすことができるインフラ構築の手順を紹介します。

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
インフラ構成管理ツールを使いこなす!コードではじめるサーバ構築連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト 阿佐 志保(アサ シホ)

WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS Twitter: @yyamada(公式)、@yyamada/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/8464 2015/03/02 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング