Ansibleに関して(入門編)


ansibleの概要

構成管理ツールのこと。ansibleの他にChef, Puppetなどがある。
構成を設定するのにpythonを使用。
設定の大まかな流れは、
ホスト側がSSHでターゲット側に接続しyaml形式のコードを用いて環境を構築する。

install方法

準備するもの

ホスト側:ansible
ターゲット側:ssh接続できる環境

方法

公式documentsを参考にしてインストールする。
方法はいくつかあるが、今回採用した方法はpipでのインストール

$ pip install ansible

使い方

インストールの確認

まずはansibleが入っているかを調べる。

$ ansible --version

ssh接続の確認

ターゲット側とssh接続ができているかを確認する。

$ ansible -i hosts <ip_address> -m ping

成功例

3.17.24.29 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}

設定ファイルの書き方

ansibleを構成する要素として以下の3つがある。
*インベントリとプレイブックの二つは自分で作成する必要がある。(モジュールは書かなくてもいい)

  1. インベントリ(inventory) 被管理ホストへの接続情報を記述するファイル
  2. モジュール(module) ユーザーを追加する、ファイルをコピーする、などの冪等性を持った操作。数百のモジュールがあらかじめ用意されている
  3. プレイブック(playbook)← メインの設定ファイル DBサーバを作る、デプロイを行う、などの目的のためにモジュールを組み合わせた作った手順書

inventoryファイル例

[targets]      # ターゲット側の"hosts"名
18.176.224.172 ansible_ssh_user=ubuntu ansible_ssh_private_key_file=~/.ssh/math-machine-2           # IPアドレス ターゲット側のユーザー名 ssh鍵のpath

playbookファイル例

- hosts: targets                  # 対象となる相手の名前(インベントリファイルで設定した名前)
  become: yes                     # sudo権限での実行か否か
  become_user: ubuntu             # 実行するユーザー名(デフォルトはrootになっている)
  tasks:                          # 行う具体的な設定(今回は文字列の表示)
    - name: Test ansible-playbook
      debug: msg="Hello world"

実行例

TAKE-PC-6:ansible take-pc-6$ ansible-playbook -i hosts test.yml

PLAY [server] ***********************************************************************

TASK [Gathering Facts] **************************************************************
ok: [3.17.24.29]

TASK [Test ansible-playbook] ********************************************************
ok: [3.17.24.29] => {
    "msg": "Hello world"
}

PLAY RECAP **************************************************************************
3.17.24.29                 : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

チュートリアル

今回はrubyとgitをansibleを用いてインストールする。
package.yml

- hosts: target
  user: ubuntu
  become: yes
  tasks:
    - name: install packages from apt
      apt: name={{ item }} state=latest
      with_items:
        - ruby
        - git

反応

TAKE-PC-6:ansible take-pc-6$ ansible-playbook -i hosts package.yml

PLAY [server] ***********************************************************************

TASK [Gathering Facts] **************************************************************
ok: [3.17.24.29]

TASK [install packages from apt] ****************************************************
[DEPRECATION WARNING]: Invoking "apt" only once while using a loop via
squash_actions is deprecated. Instead of using a loop to supply multiple items and
specifying `name: "{{ item }}"`, please use `name: ['ruby', 'git']` and remove the
loop. This feature will be removed in version 2.11. Deprecation warnings can be
disabled by setting deprecation_warnings=False in ansible.cfg.
changed: [3.17.24.29] => (item=['ruby', 'git'])
 [WARNING]: Could not find aptitude. Using apt-get instead


PLAY RECAP **************************************************************************
3.17.24.29                 : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

warningが出たが構成管理コード通りにインストールすることができた。

参考サイト

参考サイト:
[1] UbuntuでAnsiblefから動作確認まで
[2] ansibleで疎通確認とplaybookの実行
[3] Ansibleをはじめる人に。
[4] Ansibleを効果的に使うのに欠かせないPlaybookの基本的な書き方まとめ (1/2)
[5] Ansibleのドキュメント