Vagrant + Ansibleで開発環境をクイックビルド


VagrantとAnsibleを使って開発環境を高速で構築します。
会社では必要になった際に、この方法で開発環境を構築しています。
今回はWebサーバでHello World!を表示するところまで自動化してみます。

# 対象
+ Ansible初心者
+ Ansibleに興味がある人

# 前回の記事
+ [Vagrant Boxをイチから作る！（備忘録）](http://qiita.com/KentoKarakawa/items/28dba8039730d5732177)
+ [Vagrant入門](http://qiita.com/KentoKarakawa/items/7f0fe31d26a484432ca7)

# 事前準備
+ Ansible用サーバと、開発用サーバをVagrantで作っておきます
+ 本記事では下記の設定を前提に書いています
 + Ansible用サーバ(192.168.33.10)
 + 開発用サーバ(192.168.33.11)

# Ansible用サーバにAnsibleをインストール
## EPELリポジトリの追加
+ Minimal InstallだとEPELリポジトリがないので追加します

```shell-session
$ sudo yum -y install epel-release
```

+ ansibleのインストール

```shell-session
$ sudo yum -y install ansible
```

# ansible-playbookの記載
## ファイル構成図

```shell-session
- hosts
- playbook.yml
- roles
  - httpd
    - tasks
      - main.yml
    - templates
      - index.html.j2
```

## hostsの記載
```shell-session
$ vim hosts
```

```yaml:hosts
[develop]
192.168.33.11
```

## playbook.ymlの記載
```shell-session
$ vim playbook.yml
```

```yaml:playbook.yml
- hosts: all
  remote_user: vagrant
  sudo: yes
  roles:
   - httpd
```

## main.ymlの記載
```shell-session
$ mkdir roles
$ mkdir roles/httpd
$ mkdir roles/httpd/tasks
$ mkdir roles/httpd/templates
$ vim roles/httpd/tasks/main.yml
```

```yaml:main.yml
- name: httpd install
  yum: name=httpd state=latest

- name: service httpd start
  service: name=httpd state=started enabled=yes

- name: set index.html
  template: src=index.html.j2 dest=/var/www/html/index.html backup=yes
```

```shell-session
$ vim roles/httpd/templates/index.html.j2
```

```html:index.html.j2
<h1>Hello World!</h1>
```

# ansible-playbookの実行
## 実行対象の疎通確認
```shell-session
$ ansible develop -i hosts -m ping -k
The authenticity of host '192.168.33.11 (192.168.33.11)' can't be established.
RSA key fingerprint is xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx.
Are you sure you want to continue connecting (yes/no)? yes
SSH password: vagrant
192.168.33.11 | success >> {
    "changed": false, 
    "ping": "pong"
}
```

## 実行対象の確認
```shell-session
$ ansible-playbook -l develop playbook.yml -i hosts --list-host

playbook: playbook.yml

  play #1 (all): host count=1
    192.168.33.11
```

## playbook実行
```shell-session
$ ansible-playbook -l develop playbook.yml -i hosts -k -K
SSH password: vagrant
SUDO password[defaults to SSH password]: varant

PLAY [all] ******************************************************************** 

GATHERING FACTS *************************************************************** 
ok: [192.168.33.11]

TASK: [httpd | httpd install] ************************************************* 
changed: [192.168.33.11]

TASK: [httpd | service httpd start] ******************************************* 
changed: [192.168.33.11]

TASK: [httpd | set index.html] ************************************************ 
changed: [192.168.33.11]

PLAY RECAP ******************************************************************** 
192.168.33.11              : ok=4    changed=3    unreachable=0    failed=0   
```

# 開発用サーバで確認
+ http://192.168.83.11/ にアクセスし、Hello World!と表示されれば成功！

# 応用
Webアプリケーションサーバとデータベースサーバを分け、
アプリもデータベースも自動で構築してくれるようなansible-playbookを書いてみました。
私のGitHub上で公開しているので見てみてください。
https://github.com/kkarakawa/scraping-ansible

※完成したアプリケーションに関するツッコミは受け付けておりません