新井 正貴

2014.12.06

Ansible入門〜LAMP環境構築〜 (Advent Calendar 6日目)

この記事は 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はこんな感じです。

ここでprovisionをansibleで行うことを宣言しています。
※今回はinventoryファイルにhost先のアドレスとして、192.168.33.40を設定しています。

playbookの解説

さっきのVagrantfileで設定していたplaybook.ymlはこんな感じ。

ここのrolesで定義しているのが、上から順に実行されていきます。
(各々、roles/配下のディレクトリに対応してます。)
また、vars/packages.ymlでインストールしたいSystem PackagesとPHP Packagesを管理してます。

それでは、次にrolesのなかのphpとmysqlを取り上げて見ていきます。

PHPのインストール

PHPのインストールを行っているtaskのファイルはこんな感じです。

とても直感的でわかりやすいかなと思います。

php.iniの設定ではtemplateという機能を利用しています。
roles/php/templates/php.ini.tplのファイルをテンプレートとして、host先に/etc/php.iniを生成してくれています。

MySQLのインストール

MySQLに関しては、Ansible Galaxyから落としてきたRoleを利用してます。
Ansible Galaxyとは色々なRoleが公開されいるサイトです。
好みのRoleを調べて、

コマンドでインストールしてみて下さい。

今回は以下のRoleを使わせてもらってます。
https://galaxy.ansible.com/list#/roles/435
ここのREADMEにも説明がありますが、デフォルトの設定を変更して利用する際は、vars/配下にファイルを作ってよしなにやってみて下さい。以下、READMEからの引用です。

こんな感じで、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の明日はごえもんの番です!