おれんじりりぃぶろぐ

きっと何者にもなれないエンジニアのブログ

Ansibleを使ってみた

最近では「Infrastructure as Code」というバズワードが流行ってるらしい。

というわけで、今回はAnsibleを使ってみた時の備忘録。

Ansibleとは(・・?)

構成管理ツール。サーバーの状態を記述しておくことで、サーバーの状態をひと目で把握しその通りにサーバーの状態を保つことができる。環境構築からのストレスフリー\(^o^)/

環境

今回は実験的にansibleを試すのでVagrantで2台のubuntuVM(Host, Client)を立てることにする。

Vagrant用のフォルダを作成し複数VMを同時に起動できるようにVagrantfileを書き換える。

mkdir ansible_test
cd ansible_test
vagrant init trusty64(box名)

Vagrantfile

Vagrant.configure(2) do |config|

# config.vm.box = "trusty64" コメントアウトする
# 以下を追加する
  config.vm.define "host" do |node|
    node.vm.box = "trusty64"
    node.vm.hostname = "host"
    node.vm.network :private_network, ip: "192.168.33.10"
  end

  config.vm.define "client" do |node|
    node.vm.box = "trusty64"
    node.vm.hostname = "client"
    node.vm.network :private_network, ip: "192.168.33.11"
  end
end

起動する。

vagrant up

状態を確認すると2台のVMが立ち上がっていることが分かる。

vagrant status
Current machine states:

host                      running (virtualbox)
client                    running (virtualbox)

sshはホスト名を指定すればそれぞれのサーバーに接続できる。

Ansibleのインストール

続いて、ホストマシン側にAnsibleのインストールを行う。

sudo apt-get install ansible

但し、これだと古いバージョンのansibleが入ってしまうので注意。
続いて、Host <-> Client間をssh出来るように鍵設定を行う。

鍵の作成。

ssh-keygen -t rsa

公開鍵をclientへのコピー

ssh-copy-id client

使い方

まずはInventryファイルを作成する。 Host側で以下のhostsファイルを作成する。

hosts

[client]
192.168.33.11

試しにpingモジュールを試してみる。

ansible all -i hosts -m ping

結果

192.168.33.11 | success >> {
    "changed": false, 
    "ping": "pong"
}

以下のansible.cfgを作成しておくとInventryファイルの記述を省略できる。
ansible.cfg

[defaults]
hostfile = ./hosts
ansible all -m ping

playbook

まず、playbookを作成する。yml形式で記述を行う。
今回はapache2をインストールしてみた。

playbook.yml

---
- hosts: client
  sudo: yes
  tasks:
    - name: install apache2
      apt: name=apache2 state=latest
    - name: start apache and enabled
      service: name=apache2 state=started enabled=yes

playbookで使用できるモジュールの詳細は公式ドキュメントをCheck

playbookを実行する。

ansible-palybook playbook.yml

クライアント側にapache2がインストールされ&起動しているはずなのでhttp://192.168.33.11/にアクセスするとapache2のデフォルト画面が表示される。

f:id:orange_lily27:20150519163122p:plain

playbookの例

  • apache2のインストール
- name: install apche2
      apt: name=apache2 state=latest
  • apache2の起動
- name: start apache and enabled
      service: name=apache2 state=started enabled=yes
  • オーナーの変更
- name: change owner
      file: dest=/var/www/html owner=vagrant recurse=yes

recurseは再帰的な実行

  • ディレクトリの作成
  - name: create derectory
      file: path=/var/www/html/audio state=directory
  • ファイルのコピー
- name: copy index.html
      copy: src=./index.html dest=/var/www/html/index.html