この記事は Ansible Advent Calendar 2014 – Qiita の6日目の記事です。
お久しぶりです。Perfumeエンジニアの@massa142です。
(明日はWOWOWでのPerfume Nightです。このために今日WOWOWに加入しました(`・ω・´)キリッ)
仕事で新規開発をすることになってその開発環境を構築するのに、Vagrant × Ansibleの組み合わせがとても便利&お手軽だったので、ここでAnsibleについて紹介していこうと思います。
Ansibleってなに?
AnsibleとはPython製の構成管理ソフトウェアです。
詳しくは今年1年間でAnsible界隈ではどのような変化が起こったのか。の記事をご覧になって下さい。
公式ドキュメントはこちら。
こういったプロビジョニングツールとしては他にchefなども有名ですが、個人的に以下のポイントがAnsibleの好きなところです。
・サーバ側に何もインストールする必要なし
・ディレクトリ構造がシンプル
・yaml形式で簡単
前提
今回ansibleを使って構築していく環境はこんな感じです。
・CentOS:6.4 x86_64
・PHP:5.3
・MySQL:5.6
また今回作成してgithubにあげたものは、こちらです。
参考にしたサイト
今回PHPの環境構築用のplaybookを作成していくうえで、Phansibleというサイトを参考にしました。
設定項目をポチポチしていくだけで整ったVagrantfileとansibleのファイルがDLできる、とてもありがたいサイトです。
Vagrantfileの解説
まずはVagrantfileはこんな感じです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
Vagrant.configure("2") do |config| config.vm.box = "CentOS_6_4_64" config.vm.network :private_network, ip: "192.168.33.40" config.ssh.forward_agent = true ############################################################# # Ansible provisioning (you need to have ansible installed) ############################################################# config.vm.provision "ansible" do |ansible| ansible.playbook = "ansible/playbook.yml" //ansibleでやっていく処理の定義ファイル ansible.inventory_path = "ansible/inventories/dev" //host先リストの定義ファイル ansible.limit = 'all' //host先を限定して実行するか? end config.vm.synced_folder "./", "/vagrant", type: "nfs" end |
ここでprovisionをansibleで行うことを宣言しています。
※今回はinventoryファイルにhost先のアドレスとして、192.168.33.40を設定しています。
playbookの解説
さっきのVagrantfileで設定していたplaybook.ymlはこんな感じ。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
--- - hosts: all sudo: true vars: timezone: Asia/Tokyo vars_files: - vars/packages.yml roles: - init - apache - php - mysql - composer |
ここのrolesで定義しているのが、上から順に実行されていきます。
(各々、roles/配下のディレクトリに対応してます。)
また、vars/packages.ymlでインストールしたいSystem PackagesとPHP Packagesを管理してます。
1 2 3 |
--- sys_packages: ["git"] php_packages: ["php-cli","php-pear","php-common","php-gd","php-mbstring","php-pecl-xdebug","php-pdo","php-mysql","php-snmp","php-devel","php-process"] |
それでは、次にrolesのなかのphpとmysqlを取り上げて見ていきます。
PHPのインストール
PHPのインストールを行っているtaskのファイルはこんな感じです。
1 2 3 4 5 6 7 8 9 10 11 |
- name: Install php sudo: yes yum: name=php state=present - name: Install php package sudo: yes yum: name={{ item }} state=present with_items: php_packages //上記で定義しておいたPHP Packagesのリスト - name: Configure php.ini template: src=php.ini.tpl dest=/etc/php.ini |
とても直感的でわかりやすいかなと思います。
php.iniの設定ではtemplateという機能を利用しています。
roles/php/templates/php.ini.tplのファイルをテンプレートとして、host先に/etc/php.iniを生成してくれています。
MySQLのインストール
MySQLに関しては、Ansible Galaxyから落としてきたRoleを利用してます。
Ansible Galaxyとは色々なRoleが公開されいるサイトです。
好みのRoleを調べて、
1 |
$ ansible-galaxy install |
コマンドでインストールしてみて下さい。
今回は以下のRoleを使わせてもらってます。
https://galaxy.ansible.com/list#/roles/435
ここのREADMEにも説明がありますが、デフォルトの設定を変更して利用する際は、vars/配下にファイルを作ってよしなにやってみて下さい。以下、READMEからの引用です。
1 2 3 4 5 6 7 8 9 10 |
mysql_root_password: super-secure-password mysql_databases: - name: example_db encoding: latin1 collation: latin1_general_ci mysql_users: - name: example_user host: "%" password: similarly-secure-password priv: "example_db.*:ALL |
こんな感じで、DBの名前やrootのパスワードなどを設定して下さい。
まとめ
以上、Ansibleの使い方の基本的なところをさらっと見てみました。
はじめの方にも書きましたが、Ansibleはとてもシンプルで使い勝手が良いツールです。またPython製とありますが、記述は基本yaml形式なのでPythonのことが何もわからなくても利用可能です。
社内ではchef使いのほうが優勢ですが、もっとAnsibleの良さが広く伝わっていけばいいな…|ω・)チラッ
最後に
この記事は以下の2つのAdvent Calendar 6日目の記事を兼ねています。
Ansible Advent Calendar 2014 – Qiita
Allied ArchitectsEngineer Blog Advent Calendar 2014
弊社で行っているAdvent Calendarの明日はごえもんの番です!
こんにちは。アライドには2013年に新卒で入社しました。 Perfume × ラクロス × エンジニア といった感じです。お手柔らかにお願いしますm(_ _)m