こんにちは、NDです。
最近、ちょくちょくセキュリティインシデントが騒がれます。
OpenSSLやApacheなどが脆弱性の対象となるケースも多く、対応に追われたサーバ管理者も多いのでは?
複数サーバを管理している構成では各サーバへの対応が必要となり、長時間作業やオペレーションミスといった二次被害も発生します。
これらを回避するために「Ansible」が活用でき、導入も容易なので注目されています。
■Ansibleとは
Ansibleとは、「構成管理ツール」です。
構成管理ツールといえば「Chef」を真っ先に思い浮かべるのでは?
では、AnsibleとChefの違いは何でしょうか。
Ansibleの特徴を一言で表すと…
管理されるサーバに特別な設定がいらないこと
(正確にはSSHでログインできて、Pythonが入っていればよい。)
つまり、構成管理を行うサーバにAnsibleがあれば、手軽にツールを使って複数サーバを管理できるということです。
■環境構築
今回はVagrantで複数サーバ構成を再現し、Ansibleの簡単な活用手段(OSのバージョン確認)を試してみます。
Vagrantについては、こちらの記事を参照してください。
さて、まずは下図のような構成をVagrantで用意しましょう。
構成図の説明
- Ansibleをインストールして、管理するサーバの「host」があります。(※インストールは後述します。)
- 管理されるサーバ(管理対象サーバ)の「client1」と「client2」があります。
構築ポイント
- hostから各clientへは、SSHでログインできること
- hostとclientのOSは、CentOSであること(Pythonが入っていればなんでもいいですが…)
- 動作確認のため各clientのOSは異なるバージョンにしておくこと
これだけです!
■Ansibleインストール
hostサーバにAnsibleをインストールしていきます。
インストール方法は複数ありますが、今回はEPELリポジトリからyumインストールします。
ネットから最新リポジトリのダウンロードURLを拾ってきましょう。
次にhostサーバにログインして、リポジトリのダウンロードと適用を行います。
[bash] akiba:ansible y-noda$ vagrant ssh host [vagrant@host ~]$ wget "https://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm" [vagrant@host ~]$ sudo rpm -Uvh epel-release-6-8.noarch.rpm [/bash]
最後にyumコマンドを叩いたら、インストール完了です。
[bash] [vagrant@host ~]$ sudo yum install ansible [/bash]
■Inventoryをつくる
Ansibleを使うには最低限、「Inventory」が必要です。
Inventoryとは、Ansibleが管理する先のサーバ情報のことです。
ここではIPアドレスやホスト名などを定義し、接続できるようにしてあげます。
とりあえず、適当な場所に適当なファイル名でInventoryをつくりましょう。
[bash] [vagrant@host ~]$ vi hosts.ini [/bash]
hosts.iniファイルには以下が書かれています。
[bash] [client] 192.168.33.11 192.168.33.12 [/bash]
clientというグループに、IPアドレスを2つ(client1サーバとclient2サーバ)登録しました。
これでAnsibleの最低要件がそろったので、実行してみましょう。
■Ansibleコマンド
今回、実行するAnsibleコマンドは以下です。
[bash] [vagrant@host ~]$ ansible client -i hosts.ini -a "cat /etc/redhat-release" [/bash]
引数について詳しくみていきます。
client | 管理対象とするサーバを指定します。 「all」を指定すると、Inventoryに記載したすべてのサーバが対象となります。 ブラケットで囲んだグループごとに指定が可能です。 |
-i hosts.ini | Inventoryのパスを指定します。 今回はファイルがあるカレントディレクトリで実行したので、ファイル名のみの指定です。 |
-a “cat /etc/redhat-release” | 管理対象サーバで実行するコマンドを指定します。 今回はCentOSのバージョンを確認するコマンドを指定しています。 |
実行結果をみてみましょう。
[bash] 192.168.33.11 | success | rc=0 >> CentOS release 6.5 (Final) 192.168.33.12 | success | rc=0 >> CentOS release 6.6 (Final) [/bash]
192.168.33.11(client1サーバ)と、192.168.33.12(client2サーバ)でCentOSのバージョンが異なることが確認できると思います。
■さいごに
たかだかOSのバージョン確認ですが、数十台あるサーバに対して手作業は時間の無駄ですし、間違いの元でもあります。
実際に現場では、これらのコマンドを使ってサーバ構成についてまとめることができました。
また「Playbook」を使うことで、複雑な処理を管理対象サーバに行うこともできます。
次回以降、試していこうと思いますのでお楽しみに!
ではでは。