4月から新しいプロジェクトにアサインされ、Ansibleを使うことになる予定なので、事前にどんな感じか触ってみた。今までサーバーを手動で構築していたので、こういうツールで簡単に構築ができれば最高だなと。。。
始め方
自分のPCに仮想環境立てて試そうと思ったので、下記の記事を見てVirtualBox+Vagrant+CentOSでテスト環境を作成した。
ブラウザ上でお手軽に試したい場合は、Katacodaがおすすめ。
ansibleインストール
コントローラに対して以下のコマンドを実行する。
# yum install -y ansible
# ansible --version #ansibleのバージョン確認
インベントリ作成
インストールが完了したら、新しいディレクトリの中にインベントリ(対象サーバーの一覧)を作成する。
# mkdir ansible
# vim inventory/hosts
hostsインベントリの中身は、下記のようにグループ分けして記載する。
例
[targets]
xxx.xxx.xxx.xxx #target server IP
ターゲットに疎通確認
下記コマンドを実行して、ターゲットからpingが返ってくることを確認する。"SUCCESS"が表示されていればOK!
※targetsはインベントリファイルで指定したグループ名。"all"にするとインベントリに記載された全てのサーバーを選択する。
# ansible targets -i [inventory_file] -m ping
xxx.xxx.xxx.xxx | SUCCESS => {
"changed": false,
"ping": "pong"
}
ここでのpingは、icmpを使ったpingとは異なるので注意。
アドホックコマンドを使う
ansibleはplaybookに対象に行いたい処理を書き込んで実行することもできるが、ワンライナーのコマンドラインからも直接処理を行うことも可能だ。
アドホリックコマンドの基本形は以下の通り。
# ansible 対象 -i [inventory_file_name] -m [module_name] -a [command]
例えばapacheをインストールするときは、以下のように書く。
# ansible 対象 -i [inventory_file_name] -m yum -a "name=httpd state=present"
state=present"
192.168.xxx.xxx | SUCCESS => {
"changed": false,
"msg": "",
"rc": 0,
"results": [
"httpd-2.2.15-69.el6.centos.x86_64 providing httpd is already installed"
]
}
処理が成功すれば、"SUCCESS"が表示される。
Playbookを使ってみる
続いて、ansibleのスクリプトであるplaybookを使ってみる。
playbookはyamlファイルなので、先頭は"---"から書く必要がある。
---
- hosts: targets
name: install apache
become: yes
tasks:
- name: install apache
yum:
name: httpd
state: present
- name: start httpd
service:
name: httpd
state: started
YAMLファイルを書くときに気を付けるべき点は、TABキーで空白を作らないこと。
playbookはシンタックスに厳しいので、TABキーで文頭をそろえたくなるが、それで処理を実行するとエラーが発生してしまう。
There appears to be a tab character at the start of the line.
YAML does not use tabs for formatting. Tabs should be replaced with spaces.
ansibleは有難いことにシンタックスを確認するコマンドが存在するので、事前にチェック可能だ。
# ansible-playbook -i inventory_file install_apache.yml --syntax-check
playbook: install_apache.yml #成功した場合このように表示される
今回はここまで。
参考文献
- Software Design 2018年12月号
- Ansibleをはじめるひとに
https://qiita.com/t_nakayama0714/items/fe55ee56d6446f67113c
- Ansible 101 -Katacoda