Ansibleという存在はうっすら頭の片隅に常にいたわけではあるが、何しろ私は面倒なことが嫌いなので、DevOpsなんてことは気にせず、自分でサーバーにssh接続してメンテやらなんやらをこなしてきたわけだ。
しかし、このAnsibleという奴がすっごい便利だということにふと気づかされることになった。
したがって、今までの己の馬鹿さを改めるために今回Ansibleというやつをちゃんと勉強してみようと思ったのである。
###目標
Ansibleを使ってnginxを仮想環境にインストールされた状態を作る
Ansible基本
Ansibleは構成管理ツールの一環で、いわゆる所のShefやPuppetのようなものである。後発のツールであるが、(2012年誕生)人気は高く、エージェントをサーバーに入れる必要性がないため管理が楽であることがなどが挙げられる。Ansibleは主にPlaybook, Ansible本体, Inventoryファイル,Moduleから構成されている。
Ansibleインストール
今回はVM+Vagrant+Ansibleの構成で触ってみたいと思う。(VM,Vagrantはすでにインストールされている前提で話を進めて行きたい。)
開発環境はMACなのでhomebrewを用いてAnsibleをインストールして行きたいと思う。
brew install ansible
上記コマンドでAnsibleをインストール完了できたら、
適当なパスに移動して今回のチュートリアル用の仮想空間を作る
mkdir ansible/test
cd ansible/test
vagrant init bento/centos-7.2
vagrant up
エラーが出る。。。ぐぬぬ。
Vagrant was unable to mount VirtualBox shared folders.
This is usually
because the filesystem "vboxsf" is not available. This filesystem is
made available via the VirtualBox Guest Additions and kernel module.
Please verify that these guest additions are properly installed in the
guest. This is not a bug in Vagrant and is usually caused by a faulty
Vagrant box. For context, the command attempted was:
mount -t vboxsf -o uid=1000,gid=1000 vagrant /vagrant
The error output from the command was:
/sbin/mount.vboxsf: mounting failed with the error: No such device
vagrant plugin install vagrant-vbguest
vagrant ssh-configで表示される中身は後々必要になるのでメモしておきましょう。
好好
Inventoryファイルの作成
InventoryファイルはAnsibleが捜査対象に接続するための定義のこと。
どうやらInventoryファイルはいろいろなことができるらしいが今回は初心者向けということで簡易的な物を組むことにする。
hostsという名前のファイルを作成する(Inventoryファイル)
vagrant-machine ansible_host=127.0.0.1 ansible_port=2202 ansible_user=vagrant ansible_ssh_private_key_file=.vagrant/machines/default/virtualbox/private_key
ansible_*** で記載されている情報は全てvagrant ssh-configによって参照される値を入れればよい
Inventoryファイルを作成したらまずはテストをしてみよう
ansible all -i hosts -m ping
iオプションは Inventoryファイルへのパスを指定することができる。
allはInventoryファイル場で定義されている全てのホストに対して当てはまるグループ名である。pingはPingモジュールである。
基本の部分であとマスターする必要があることはtaskの実行内容を記載したymlファイルを作成すること
今回はsite.ymlという名前のものを作成しておきたいと思う。
---
- name: チュートリアル
hosts: all
tasks:
中身の説明をしていこう。。
- nameはログに表示される名前。
- hostsはデプロイ対象ホスト名。allによって Inventoryに定義されているすべてのホストに対して実行する.
- tasksは実タスクの定義。今はからになっている。
ansible-playbook -i hosts site.yml
- name: Playbookチュートリアル
hosts: all
become: true
tasks:
- name: libselinux-pythonをインストール
yum:
name: libselinux-python
state: present
- name: EPELリポジトリをインストール
yum:
name: epel-release
state: present
- name: Nginxのインスト〜る
yum:
name: nginx
state: present
- name: Nginxサービスの自動起動を設定
service:
name: nginx
state: started
enabled: true
これを入力して最後に http://192.168.33.10/
を入力すると無事nginxのページが表示されました!
Ansibleなかなか使い勝手良さそう〜
次回編ではもっと高度なものに挑戦して行きます!