今までChef Soloを使ってプロビジョニングしていましたが、Chef Solo(Chef Zeroへ移行)も廃止となるようなので、この機会にAnsibleも試してみることにしました。
AnsibleはゲストOSへクライアントをインストールする必要もなく、yamlで記述したPlaybook(Chefのrecipeに相当)を元にプロビジョニングします。
ChefのRecipeはRubyのDSLやERBで記述するので、一緒に使うVagrantやCapistranoと同じ形式で統一的に記述できていましたが、Ansibleを使うと、YAML,jinja2テンプレートによる記述を混在させることになります。
しかし、YAMLもjinja2も難しいというわけではないし、Chefも使いこなしていたわけではないので、Ansibleの方が適しているのかなと、少しドキュメントを読み始めました。
Best Practicesあたりを初めてみたときは、簡単とはいえ、やはり新たなファイル構造を覚えるのは面倒だなと感じました。
しかし、少し具体的なPlaybookを書いてみると、割とすんなり理解できるようになりました。
これからAnsibleを試してみようという方に参考になればと、簡単な開発サーバ(PHP+MySQL+Apache)を構築するplaybookを書いてみました。
今後は、デプロイもCapistranoではなく、Ansibleでできそうなので、デプロイにも試してみたいと思います。
環境
- OS: OSX 10.9.5
- Python: 2.7.5
- Ansible: 1.8.2
AnsibleはHomeBrewでインストールしました。
$ brew install ansible
構築するサーバ環境
以下のソフトウェアを一つのVMへインストールします。CentoOS6.5は、VagrantでVM(VirtualBox)にインストールしておきます。
参考にVagrantファイルの内容を載せておきます。
Vagrantファイル
Vagrant.configure(2) do |config| config.vm.box = "centos65" config.vm.box_url = "https://developer.nrel.gov/downloads/vagrant-boxes/CentOS-6.5-x86_64-v20140504.box" config.vm.network "private_network", ip: "192.168.33.10" config.vm.network "public_network", ip: "192.168.207.50" config.vm.synced_folder "./webroot", "/webroot", :nfs => true config.vm.provider "virtualbox" do |vb| vb.name = "centos65-ansible" end end
Ansibleを使って、Vagrantで構成したCentOS6.5に以下のソフトウェアをインストールします。
本来ならwwwサーバ、DBサーバなどロール(役割)ごとにPlaybookをわけて書くのですが、今回は簡単に、開発サーバというロールの中にWWWサーバ、DBサーバも含めることにします。
- PHP5.4
- MySQL5.5
- Apache2.2
構成はBest Practicesに沿って作成していますが、不必要なものは省いています。
Playbookのディレクトリ構成
provision/ development # インベントリファイル site.yml # マスタプレイブック develop.yml # developサーバのプレイブック roles/ develop/ files/ httpd-develop.conf # httpdのコンフィグレーションファイル handers/ main.yml # httpd,iptablesのリスタートハンドラ tasks/ main.yml # メインタスク repo.yml # epel,remiリポジトリの追加 php.yml # phpのインストール mysql.yml # mysqlのインストール httpd.yml # httpdのインストール
PlaybookはGithubにおいてますので、詳しくはそちらを参照してください。
https://github.com/notice/ansible-develop-centos6
インベントリーファイル
AnsibleのPlaybookを実行されるサーバを記述します。
まず、サーバのホスト名またはIPアドレスをインベントリーファイルに記述します。
Vagrantで構成したサーバにはcentosという名前をつけてありますが、IPアドレスでもかまいません。
最初の[server]という記述で、複数のサーバをserverグループでまとめています。今回は一つだけなので、特に必要なわけではありません。
--- # file: development [server] centos
Playbookの実行
後は、Playbookを実行するだけです。以下のコマンドを実行します。
-i
でインベントリファイルを指定し、最後にマスタプレイブックを指定します。
$ ansible-playbook -i development site.yml
dryrunさせたいときは、--check
を付加します。
$ ansible-playbook -i development site.yml --check
タグでタスクを選択して実行することもできます。次の例は、httpdだけインストールできます。
$ ansible-playbook -i development site.yml --tags httpd
これで簡単なウェブ開発環境ができました。まずは自分で簡単な構成を書いてみると理解が進みますね。