Ansibleを使ってできること
- サーバの構成管理。Chefと同じ目的で使うものという認識
- 設定として記述したパッケージ・ソフトウェアを簡単に導入できる
- 冪等性を保ちながらサーバの構築を繰り返し行うことができる(使い方によっては当然冪等性を損なうこともできるけど)
インストール
AnsibleWorksのサイトにあるので参照。たとえば次の方法がある- GitHubレポジトリからcloneしてインストール
- pipインストール
- yum, apt
ローカルMacにpipが既に入っていたので、pipインストール
$ pip install paramiko PyYAML jinja2 httplib2
$ sudo pip install ansible
Ansibleで管理対象となるホスト設定を作成
# /etc/ansible/hosts
[experiments]
dev ansible_ssh_port=<ssh port> ansible_ssh_host=<your hostname> ansible_ssh_user=<ssh user>
- experimentsはAnsible管理のホストをグルーピングしてる
- devはサーバのニックネーム
Ansibleの動作設定を作成
以降のコマンド実行の際にControlPathが長過ぎて怒られるのを予防。デフォルトは control_path=%(directory)s/ansible-ssh-%%h-%%p-%%r らしいがこれだと長過ぎるみたい。# /etc/ansible/ansible.cfg
[ssh_connection]
control_path=/tmp/ansible-ssh-%%h-%%p-%%r
テスト
$ /usr/local/share/python/ansible all -m ping
dev | success >> {
"changed": false,
"ping": "pong"
}
OKそう。さらにテストしてみる
$ /usr/local/share/python/ansible all -a "/bin/echo hello"
dev | success | rc=0 >>
hello
OKですな
幾つかコマンドサンプル
$ /usr/local/share/python/ansible dev -m copy -a "src=/etc/hosts dest=/tmp/hosts"
#=> ローカルの/etc/hostsをdevの/tmp/へコピー
$ /usr/local/share/python/ansible dev -a "/sbin/reboot" —sudo
#=> devを再起動
$ /usr/local/share/python/ansible -m yum -a 'name=mysql-server state=installed’ dev --sudo#=> devでmysql-serverをyumインストール
# /etc/ansible/builds_server.yml
- hosts: experiments
remote_user: ec2-user
sudo: no
tasks:
- name: test connection
ping:
- include: tasks/begins_pkg.yml
# /etc/ansible/tasks/begins_pkg.yml
- name: ensure all packages are at the latest version
yum: name=* state=latest
sudo: yes
- name: ensure git is installed
yum: name=git state=latest
sudo: yes
- name: ensure apache is running
service: name=httpd state=started
sudo: yes
上記を用意した上で、次のコマンドを実行する
$ /usr/local/share/python/ansible-playbook /etc/ansible/builds_server.yml
PLAY [experiments] ************************************************************
GATHERING FACTS ***************************************************************
ok: [dev]
TASK: [test connection] *******************************************************
ok: [dev]
TASK: [ensure all packages are at the latest version] *************************
ok: [dev]
TASK: [ensure git is installed] ***********************************************
ok: [dev]
TASK: [ensure apache is running] **********************************************
ok: [dev]
PLAY RECAP ********************************************************************
dev : ok=5 changed=0 unreachable=0 failed=0
こんな感じで実行結果が出力される。言うまでもないが、
builds_server.ymlで次を記述
- pingテスト
- begins_pkg.ymlをインクルード
begins_pkg.ymlで次を記述
- yum -y update
- 最新のgitパッケージをyumインストール
- apacheを起動する(パッケージが無ければインストール)
後編では次のものをする予定
- EC2イメージからのインスタンスローンチ(Elastic IP貼り付け等も併せて)
- rbenvベースのrubyインストール