Shoeisha Technology Media

CodeZine(コードジン)

特集ページ一覧

Chefで3分クッキング! Webサーバ構築のレシピをRubyで書いてみよう

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

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2015/02/04 14:00

 本連載は、SI業界に入ったばかりの新米業務アプリケーション開発者や、SI業界を目指す学生さんを対象とした、インフラ構成管理ツールを使ってコードでインフラを構築するための講座です。また、インフラエンジニア/システムオペレータで、物理環境でのインフラ構築/運用管理は経験があるけど、プログラミングが苦手という方にも読み進めていただけるように、文法などの解説を入れながら説明します。今回は、Chefというツールのご紹介と、Chefを使ってWebサーバを構築する方法について説明します。

目次

はじめに

 前回は、コードでインフラ構成を行う第一歩としてVagrantを使ってローカルPCに仮想環境を構築する手順をご紹介しました。

 今回は、Chefというツールのご紹介と、Chefを使ってWebアプリケーションの開発環境にWebサーバであるApache httpdやPHPの実行環境などをインストールする方法について説明します。

対象読者

 本記事は、次の方を対象にしています。

  • コードを使ってインフラの構成管理がしたい人
  • ネットワークやLinuxの基礎知識がある人
  • Webシステムの開発環境を構築したことがある人

Chefってなんだろう

 インフラの構成管理を自動で行うツールのことをプロビジョニングツールと呼びます。Chef(シェフ)は、Chef社が提供するプロビジョニングツールです。Chefは、物理環境だけでなく、クラウドなどの仮想環境でも、サーバやアプリケーションなどのインフラを自動構成/管理できます。Rubyで実装されているのが特徴で、インフラの構成情報もRubyを使ってコードで管理します。Chefは米Facebook社などで利用実績があります。前回の記事でご紹介したVagrantによるシェルスクリプトの実行でも簡単なプロビジョニングは可能ですが、たとえば、複数台のサーバを統合管理したり、OSによって異なるコマンドの差異などを考慮しながら構築したりするのは、大きな負荷になります。

 Chefは、インフラ環境構築を簡単に行うための便利な機能が用意されています。

おさえておきたいChefの用語

 Chefのコマンドや設定ファイルなどは、料理になぞらえて独特の名前がつけられています。そのため、Chefをはじめて触るときは混乱しがちなので、はじめに用語を簡単に説明します。

Chef Server

 管理したい複数のサーバ群のインフラの構成情報を集中管理するホストのことです。Webベースの管理ツールやChefを操作するためのAPIを提供しており、それらをつかってインフラを自動構成したり、状態を管理したりします。大規模/複雑なインフラ構成の場合に導入されます。

Chef Client

 実際にインフラが自動構成される対象のホストです。実環境でのサーバの場合もあれば、Amazon Web ServicesのEC2インスタンスのように、クラウドの仮想環境の場合もあります。Chef Serverを導入するときの管理対象下のホストにインストールされるのがChef Clientです。

Chef Solo

 Chefは、システムの本番環境で複数台のサーバを自動構成することができるソフトウエアですので、通常Chef ServerとChef Clientを導入して、クライアントサーバ型のアーキテクチャで利用します。しかし、開発環境を構築するときなどは、Chefをスタンドアロンで利用することもできます。そのときに使うコマンドがChef Soloです。

 また、スタンドアロンでChefを利用したい場合は、Chef Zeroを使うこともできます。Chef Zeroは、インメモリで動く軽量なChef Serverです。ただしChef Zeroを使うには、Chefのクライアントサーバ型アーキテクチャの知識が必要になります。今回の連載では、インフラアーキテクチャが理解しやすく、現時点での利用者の多いChef Soloを使って環境を構築します。ただし、今後は、Chef SoloからChef Zeroに移行していくものと思われます。

Recipe(レシピ)

 Chef Clientで実際に設定されるインフラの構成情報を書いたプログラムのことです。Rubyの文法をベースにしてChefのDSL(Chef固有の命令)を使って記述します。たとえば、ミドルウエアをインストールして、サービスを起動するなど、従来、対象の端末にログインしてコマンド操作/各種スクリプトで行っていた処理などを、すべてRubyのコードで書きます。

CookBook(クックブック)

 インフラの構成をコードで行うと一口でいっても、インストールコマンドを実行するだけで動作するものもあれば、DBサーバのように専用のユーザアカウントを用意して、適切な設定ファイルを用意しなければいけないものなどがあります。そこで、作成したレシピを実行するために必要になる設定ファイルのひな形やパラメータ一覧などをまとめたものが、CookBookです。CookBookの中には、Recipeも含まれます。

Knifeコマンド

 Chefを管理するための便利なコマンドラインツールです。Chef Clientをインストールすると自動的に使えます。

Chefの基本構成

 これらをふまえて、Chefでインフラの構成管理をするときのアーキテクチャの例をいくつかご紹介します。

大規模なインフラ構成の場合

 サーバ台数の多い大規模なシステムや、役割の異なる多くのサーバを一元管理するときには、Chef Serverを用意して、インフラを統合管理します。業務アプリケーション設計と同じく、拡張性や再利用性などを考慮してCookBookを作成し、インフラの状態を管理します。そのためChefの使い方やコーディングはもちろん、実運用も考慮する必要があります。

大規模なインフラ構成の場合
大規模なインフラ構成の場合

小規模なインフラ構成の場合

 部門内で使用するなどサーバ数台規模の小規模なインフラ構成の場合、Chef Clientをスタンドアロンで使用することができます。作成したCookBookは手動で各サーバに配布/展開します。

小規模なインフラ構成の場合
小規模なインフラ構成の場合

開発環境などの場合

 複数の開発プロジェクトが並行で進んでいて、プロジェクト毎に開発環境を用意しなければいけないときなどは、前回の記事でご紹介したVagrantとChefを連携して、ローカルPCに仮想環境を構築できます。業務システム開発の現場でよくありがちな、本番環境にデプロイしたとたん「ライブラリのバージョンが……」で動かないなど、環境に依存する問題を、開発の早い段階で回避することができます。CookBookを作成し、Gitなどの構成管理ツールで管理しておけば、どの端末でも同じインフラ構成で環境構築できるので、開発メンバー全員がインフラの知識を習得する必要がありません。

開発環境の場合など
開発環境の場合など

 このようにChefは、小規模から大規模までのインフラ構成に対応したアーキテクチャをとることができます。しかし、インフラの構成管理の基本となるRecipeのコーディング部分やCookBookの考え方などについては、アーキテクチャにかかわらずあまり変わりません。

 本記事では、3つ目にご紹介したVagrantとChefを連携させてローカルPCに開発環境のインフラを構築するためのコーディングについてご紹介していきます。


  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

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

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

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

    静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。 主な著書に「入門シリーズ(サーバサイドAjax/XMLD...

バックナンバー

連載:インフラ構成管理ツールを使いこなす!コードではじめるサーバ構築
All contents copyright © 2005-2018 Shoeisha Co., Ltd. All rights reserved. ver.1.5