itlifehack_01

■はじめに
本連載の第一回目では、システム担当者により手作業で行われてきた構成管理の課題、そうした課題を解決すべく登場した構成管理ツールの一つAnsibleについて紹介した。

第二回目では、Ansibleを使う具体的なメリットについて解説し、第三回目では「いきなり本番環境で始めてしまうのは怖い」という読者に向けて、チュートリアル環境の構築方法を途中までお伝えした。

今回は第三回目の続きとなり、Ansibleを実際にインストールし、構成管理作業をスタートするところまでを解説する。



AnsibleはPythonパッケージ管理システムを使用してもインストールできるが、ここでは、チュートリアル環境として使用するCentOS 6に統合が容易なEPELリポジトリからのインストールを行う。

まず、EPELのミラーサイトの1つから、リポジトリ登録用のRPMパッケージをダウンロード・インストールする。

-----------------------------------------------------------------------------------
$ sudo rpm --import http://ftp.tsukuba.wide.ad.jp/Linux/fedora/epel/RPM-GPG-KEY-EPEL-6
$ sudo rpm -ivh http://ftp.tsukuba.wide.ad.jp/Linux/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
-----------------------------------------------------------------------------------


yumコマンドでEPELリポジトリからAnsibleのCentOS 6向けパッケージをインストールする。

-----------------------------------------------------------------------------------
$ sudo yum -y install ansible
-----------------------------------------------------------------------------------


以下のコマンドでAnsibleがインストールされたことを確認する
(Ansible のバージョン番号が表示されればOK)。

-----------------------------------------------------------------------------------
$ ansible --version
-----------------------------------------------------------------------------------


必要なソフトウェアのインストールは以上で完了。以下、実際に仮想環境を構築していく。

-----------------------------------------------------------------------------------
$ vagrant init centos65
-----------------------------------------------------------------------------------


カレントディレクトリにVagrantfile が生成されているので、これを以下の内容になるようテキストエディタで編集を行う。

編集 ファイル1
※要ダウンロード

編集が終わったら、以下のコマンドで仮想サーバ群を起動(物理マシンのスペックによるが相応の時間がかかる)。

-----------------------------------------------------------------------------------
$ vagrant up
-----------------------------------------------------------------------------------


チュートリアルで使用する仮想環境(サーバ3台)はこれで構築完了。あらかじめ用意されたひな形(Box)を利用したとはいえ、VagrantがVirtualBoxとともに利用される理由の一端が体感できたのではないだろうか。

image201411

次に、Ansible の設定を行う。最低限必要なのが、インベントリ・ファイルだ。

これは、Ansibleが管理対象のホスト(サーバ)のアドレスや、それらをまとめたグリープなどを定義するファイルだ。ファイルのパスは、「/etc/ansible/hosts」である。まずは、以下の内容をテキストエディタで記述する。

編集 ファイル2
※要ダウンロード

インベントリ・ファイルが用意できたら、まずは疎通確認を行う。以下のコマンドは、Ansible実行ホストから、管理対象ホストにSSHでログインできるかどうかを確認する。

-----------------------------------------------------------------------------------
$ ansible multi -m ping
-----------------------------------------------------------------------------------


インベントリ・ファイルにおいて、「multi」は、「webapp」と「db」というホストのグループを含むグループ(本環境では、全管理対象サーバ)になる。

これで、以下のような出力が返ってくれば、Ansibleで仮想サーバ群を管理する
前提条件が整っているということになる。

-----------------------------------------------------------------------------------
$ ansible multi -m ping

192.168.60.7 | success >> {
"changed": false,
"ping": "pong"
}

192.168.60.8 | success >> {
"changed": false,
"ping": "pong"
}

192.168.60.11 | success >> {
"changed": false,
"ping": "pong"
}
-----------------------------------------------------------------------------------


Ansibleの様々な機能(モジュールという形で実現されている)の1つに、管理対象のホスト上でコマンドを実行するというものがある。これは単純な機能だが、管理対象のホストの数が多い場合は、意外と便利だ。

例えば、Vagrantによって各仮想サーバのホスト名が正しく設定されているかどうかを確認してみよう。

-----------------------------------------------------------------------------------
$ ansible multi -a "hostname"
-----------------------------------------------------------------------------------


以下のような結果が返ってくれば、Vagrantfileの内容に基づいて構築された仮想サーバのホスト名が設定されていることが確認できる。

-----------------------------------------------------------------------------------
$ ansible multi -a "hostname"

192.168.60.7 | success | rc=0 >>ph-app01.devel

192.168.60.8 | success | rc=0 >>ph-app02.devel

192.168.60.11 | success | rc=0 >>ph-db01.devel
-----------------------------------------------------------------------------------


以下のコマンドを実行するとどうなるだろうか。


-----------------------------------------------------------------------------------
$ ansible multi -a "free -m"

192.168.60.11 | success | rc=0 >>
        total used free shared buffers cached
Mem: 490 350 139 0 42 222
-/+ buffers/cache: 86 404
Swap: 991 0 991

192.168.60.8 | success | rc=0 >>
 total used free shared buffers cached
Mem: 490 350 139 0 42 222
-/+ buffers/cache: 86 404
Swap: 991 0 991

192.168.60.7 | success | rc=0 >>
 total used free shared buffers cached
Mem: 490 350 139 0 42 222
-/+ buffers/cache: 86 404
Swap: 991 0 991
-----------------------------------------------------------------------------------


実行するまでもなくお分かりの人も多いと思うが、管理対象のホストのメモリーの使用状況が表示される。上述した「便利」さが体感できたのではないだろうか。

■最後に
Ansibleは、このような複数のホストに命令を送り込んで結果を得る、という基本機能を組み合わせることによりサーバ環境の状態を制御していく。

導入部としての連載はこれで一旦終了となる。環境準備の基本は押さえられたはずなので、今後は「プレイブック」を作成するなど発展的内容の学習につなげていっていただきたい。

株式会社ファランクス

s-fujita_profile

著者プロフィール:
藤田泰弘(ふじた・やすひろ)
株式会社ファランクスCTO(最高技術責任者)。1975年福井県生まれ。2002年東京大学経済学部卒業。大学在学中より携帯電話向けコンテンツサービスの開発に携わり、卒業後も同サービス開発会社で働く。主な担当はサービスインフラの設計・構築。ファランクスがアフィリエイト広告事業に参入するにあたり、大学時代からの知己であった経営陣からの誘いを受けて同社でのシステム全般の立ち上げに参画、現在に至る。