脳汁portal

アメリカ在住(だった)新米エンジニアがその日学んだIT知識を書き綴るブログ

Ansibleの設定方法

f:id:portaltan:20160426192818p:plain
AnsibleはChefのようなDeployツールで以下のような特徴があります

  • agent less
    • 対象のサーバにAnsibleの命令を受け取るAgentをインストールする必要がない
  • interactive mode
    • レシピファイル内にすべて記述せずに対話的に設定をしていくことが可能らしい
  • GUI web console
    • Ansible TowerというGUIの管理ツールがある(有料)

使い方

1. Ansibleのインストール(Ansibleサーバ)

sudo apt-get install ansible

cd /etc/ansible
ls -l
  total 20
  drwxr-xr-x  2 root root 4096 Apr 25 05:31 ./
  drwxr-xr-x 84 root root 4096 Apr 25 05:32 ../
  -rw-r--r--  1 root root 6119 Apr  1  2014 ansible.cfg
  -rw-r--r--  1 root root  982 Apr  3  2014 hosts

2. 対象のサーバを指定

Ansibleサーバからアクセスするターゲットサーバの指定をします

vi hosts
==================================================
[gateway]
192.168.33.21
[webserver]
192.168.33.22
[database]
192.168.33.23
192.168.33.24
[application]
192.168.33.25
==================================================

フォーマットは色々ありますが、今回は以下の書式をで書きます

[Group名]
IPアドレス

3. setting ssh agent

ansibleは対象のサーバにsshで接続するので、ssh agentなどを設定してパスワードレスでアクセスできるようにしてやる必要があります
ここらへんは過去ポストをご参照ください
パスワード入力なしでssh接続する方法①(ssh-agent) - 脳汁portal
パスワード入力なしでssh接続する方法②(.ssh/config) - 脳汁portal

sshの設定が完了したら、ansibleのpingモジュールを利用して実際に接続出来るか確認します

$ ansible all -m ping
192.168.33.21 | success >> {
    "changed": false,
    "ping": "pong"
}
192.168.33.22 | success >> {
    "changed": false,
    "ping": "pong"
}
192.168.33.23 | success >> {
    "changed": false,
    "ping": "pong"
}
.
.
.

またはコマンドを直接送ることも可能です。
今回はサーバグループを指定して実行してみます

$ ansible gateway -a "/bin/date"
192.168.33.21 | success | rc=0 >>
Thu Apr 21 05:06:25 GMT 2016
  
$ ansible webserver -a "/bin/date"
192.168.33.22 | success | rc=0 >>
Thu Apr 21 05:09:31 GMT 2016

$ ansible database -a "/bin/date"
192.168.33.23 | success | rc=0 >>
Thu Apr 21 05:21:30 GMT 2016
192.168.33.24 | success | rc=0 >>
Thu Apr 21 05:26:30 GMT 2016
192.168.33.25 | success | rc=0 >>
Thu Apr 21 05:29:39 GMT 2016

4. playbookの作成

playbookはChefでいうレシピファイルになります
(Chefを使ったことがないので違ったらすいません

playbookはymlファイルで構成します。

sample
vi playbook_hogehoge.yml
========================================
- hosts: all  # 指定したすべてのサーバで行いたい場合
  sudo: yes   # sudoを利用するかどうか
 tasks:      # Tasks以下に実際に行う処理を記述していく
    - name: download from url       # 処理の名前
      get_url:                      # ansibleのget_urlモジュールを使用
        url: ダウンロードしたいURL       # ダウンロード先のURLの指定
        dest: /usr/local/src/hoge.tar.gz # ファイルの配置先の指定
        timeout: 30                      # タイムアウトの指定(v1.8から

  - name: apt de git install suru
      command: apt-get install git  # コマンドを直接指定することもできる

- hosts: gateway  # 特定のグループのみに作業させることも可能
  tasks: 
  .
  .
  .

========================================

5. Playbookの実行

playbookの作成が完了したらansible-playbookコマンドで実行できます

ansible-playbook playbook_hogehoge.yml