エンジニア男

勉強したことの忘備録としてつらつら書いていきます。

Ansibleについて

Ansibleの使い方について調べたのでメモ。

 

Ansibleとは = 構成管理ツール。サーバーの設定やミドルウェアのインストールなどを自動化できる。動かす時はPython2.7 または Python3.5以降が必要。(ただしPython2のサポートは終了しているため、Python3の使用を推奨している)

 

ノードとは = サーバーのこと。Ansibleではサーバーのことをノードと呼ぶ。ノードは2種類ある。

・コントロールノード: Ansibleを動かすサーバー。

・ターゲットノード: 環境構築をしたいサーバー。

 

ディレクトリ構成: Ansibleの設定ファイルは3種類ある。

[Ansible]

 | - hosts (Inventoryファイル)

 | - ansible.cfg (設定ファイル)

 | - nginx.yml (playbook)

 | - apache.yml (playbook)

 | - /roles

         | - /httpd

                 | - /tasks

                         | - main.yml (playbook)

 

・hosts: ターゲットノードの接続情報を書くファイル。

・ansible.cfg: Ansibleの設定を行うファイルで機能のON/OFFなどを設定する。

・nginx.yml / apache.yml / main.yml: ターゲットノードの構成情報を書くファイル。ファイル名は任意。書式はYAML

・rolesディレクトリ: roleの構成ファイルを格納するディレクトリ。

 

 

Ansibleのインストール

CentOSにAnsibleをインストールする

yum install epel-release // epel リポジトリを追加
yum install ansible // ansible をインストール

Windowsの場合

1, Cygwinを使用する。

2, 仮想マシンを使用する。

Macの場合

1, Homebrewを使用する。

 

 

hosts (Inventoryファイル)の書き方

[local_host] // ターゲットノードの接続情報を書く。[]の文字は任意でOK
localhost // 今回はローカルホストを指定。127.0.0.1でもok

[target_node]
192.168.0.xxx

 

 

playbookの書き方

1, 1行目は --- で開始すること (任意)

2, インデントは半角スペース2つ

3, # でコメント

・nginx.yml: ローカルホストにnginxをインストールして起動する処理 ※tasksを使用

---
- hosts: local_host
connection: local
tasks:
- name: install nginx
yum:
name: nginx
state: latest

- name: run nginx
service:
name: nginx
state: started
enabled: yes

 

 

 ・ターゲットノードにapacheをインストールして起動する処理 ※rolesを使用

---
- hosts: target_node
connection: ssh
roles:
- httpd

roles/httpd/tasks/main.yml

---
- name: Install httpd
yum:
name: httpd
state: latest

- name: run httpd
service:
name: httpd
state: started
enabled: yes

ssh接続できるように設定

[コントロールノード]での設定

.sshディレクトリが無いなら作成して、権限を変更する。
[root@localhost ~]# mkdir .ssh
[root@localhost ~]# chmod 700 .ssh/

秘密鍵、公開鍵を作成する。
[root@localhost .ssh]# ssh-keygen -t dsa

公開鍵(id_dsa.pub)をターゲットノードに転送する。
[root@localhost .ssh]# scp id_dsa.pub root@192.168.0.xxx

公開鍵をauthorized_keysファイルに追加する。
[root@localhost .ssh]# cat id_dsa.pub >> authorized_keys

PubkeyAuthenticationを有効にする。
[root@localhost .ssh]# vi /etc/ssh/sshd_config
PubkeyAuthentication yes

sshdを再起動する。
[root@localhost .ssh]# systemctl restart sshd

 

[ターゲットノード]での設定
※コントロールノードから公開鍵が届いてることを前提に進める。

.sshディレクトリが無いなら作成して、権限を変更する。
[root@192.168.0.xxx ~]# mkdir .ssh
[root@192.168.0.xxx ~]# chmod 700 .ssh/

公開鍵をauthorized_keysファイルに追加する。
[root@192.168.0.xxx ~]# cat id_dsa.pub >> .ssh/authorized_keys

PubkeyAuthenticationを有効にする。
[root@192.168.0.xxx ~]# vi /etc/ssh/sshd_config
PubkeyAuthentication yes

sshdを再起動する。
[root@192.168.0.xxx ~]# systemctl restart sshd

 

 

Ansibleの実行

書式:  ansible-playbook -i Inventoryファイル playbookファイル

ansible-playbook -i ./hosts [nginx.yml or apache.yml]

□オプション

-i = Inventoryファイルを指定する時に使う。

--list-hosts = コマンド実行時に対象となるホスト名が表示される。

 

□tagsについて

taskまたはroleにtagsを付けると、選択したタグだけを実行したり、スキップできたりする。

--tags all               #全てのタグを実行する。
--tags [tag1, tag2] #選択したタグを実行する。
--skip-tags [tag3, tag4] #選択したタグをスキップする。
--tags tagged #タグが付いてる処理を実行する。
--tags untagged #タグが付いてない処理を実行する。