#はじめに
Ansibleを使用してLAMP環境を作成していきます。
作成するサーバはユーザ登録がされている状態です。
詳細は、以下の記事に記載しています。
CentOS7 の初期設定をしてみよう
コードだけ見たい方はこちら
#環境
CentOS7
ansible 2.4.2.0
#Ansibleとは
システム構築、運用を自動化できるツールです。
Ansibleをインストールしているサーバから、SSH接続をして対象サーバを操作します。
何台でも同時に操作することが可能で、全く同じ設定を反映させることができます。
#構成
Ansibleは主に次の3つのファイルで構成されています。
###inventry
どのサーバを管理するかを設定する
###ansible.conf
inventryファイルの場所を設定する
###playbook
どのような構成にしたいのかを設定する。構築手順書のようなものです。
このファイルがAnsibleの肝となる部分になります。
(例:httpdをyumでインストールして、起動させる)
#ホストサーバー(指示をだすサーバー)の設定
##Ansibleのインストール
インストールする前に、epelというリポジトリが必要なため、
合わせてyumでインストールします。
# yum install epel-release.noarch
# yum install ansible
$ ansible --version
ansible 2.4.2.0
##鍵認証でログイン設定
鍵を作製して、操作したいサーバに公開鍵を渡し、SSH接続できるようにします。
$ ssh-keygen -t rsa
$ ssh-copy-id -p ポート番号 ユーザ名@IPアドレス
$ ssh -p ポート番号 ユーザ名@IPアドレス
##inventryを作成してみよう
ファイル名は何でもよいです。
[]に任意のグループ名を記載することで、操作するサーバをグループ分け出来ます。
$ vim inventory
[lamp]
IPアドレス:ポート番号
lampというグループを作成して、操作するサーバ情報を登録しています。
##ansible.confを作成してみよう
作成したinventoryファイルを指定することで実行できますが、
ansible.cfgファイルにinventoryファイルのパスを記載することによって、
ファイルを指定しないで実行できるようになります。
vim ansible.cfg
[defaults]
inventory = ./inventory
##さっそく実行してみよう!
lampグループに対して、pingコマンドを実行してみます。
(全てのサーバを対象にしたい場合は、「lamp」⇒「all」に変更します)
$ ansible lamp -m ping
IPアドレス | SUCCESS => {
"changed": false,
"ping": "pong"
}
##Playbookを作成してみよう
Apache、MySQL、PHPをインストールする手順をPlaybookに記載していきます。
###Apacheをインストールして起動し、自動起動の設定をしよう
yml形式で記載します。
vim playbook.yml
---
- hosts: lamp
sudo : yes
tasks:
- name: install httpd
yum: name=httpd state=latest
- name: apache start / enable
service: name=httpd state=started enabled=yes
上から順番に説明していきます。
- hostsで操作したいサーバを指定します。今回は「lamp」グループが対象です。
sudoでsudu権限をつけています。
tasksに何をするのかを、記述していきます。
- nameは任意の名前です。何をしているのか、分かりやすい題名にします。
yumのnameでインストールするhttpdを指定し、state=latestで最新版を選択しています。
serviceのnameでhttpdを指定し、state=startedで起動しています。また、enabled=yesで自動起動の設定をしています。
###MySQLをインストールして起動し、自動起動の設定をしよう
先ほど作成したファイルに続けて記載していきます。
- name: install mysql repository
yum: name=http://dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpm state=present
- name: install mysql
yum: name=mysql-server state=latest
- name: mysql start / enable
service: name=mysqld state=started enabled=yes
基本的には、Apacheの時と同じです。
CentOS7はyumのパッケージにmysql-serverがないため、
リポジドリをインストールしてから、mysqlをインストールしています。
state=presentはインストール済みの場合(ここではmysql-serverがある場合)は、何もしません。
###PHPのインストールをして、Apacheを再起動させよう
- name: install php
yum: name={{item}} state=latest
with_items:
- php
- php-devel
- php-mbstring
- php-mysql
- php-gd
notify:
- httpd restart
handlers:
- name: httpd restart
service: name=httpd state=restarted
{{item}}で変数を設定できます。中身はwith_itemsに記載します。
notifyに任意の名前を付けて、PHPのインストールが完了した後に、一度だけ処理を実行させることができます。
handlersでPHPのインストールが完了した後の処理を記載します。nameには先ほどの任意の名前を対応付けます。
ここでは、PHPがインストールされたら、apacheの再起動をするように設定しています。
###Ansibleを実行してみよう!
実行する前に、playbookの文法があっているか確認できます。
ansible-playbook playbook.yml --syntax-check
また、実際に実行したらどういう結果になるかシミュレーションできます。
ansible-playbook playbook.yml --ask-become-pass --check
--ask-become-passは、sudoでパスワードが設定がされている場合に必要です。
問題がなければ以下のコマンドで実行できます。
ansible-playbook playbook.yml --ask-become-pass
#まとめ
一度実行して、インストールできているものは、二度目以降は実行されません。
そのため、playbookを書いたらすぐに実行して、どんどん設定を追加していけるので
思っていたよりも、スラスラかけました。
テストサーバの構築時にそのまま実行すれば
同じサーバーが自動でできることになるので、積極的に使っていきたいなと思います!
ファイルのコピーとかもできるので、脆弱性対応時に設定ファイルを変更して、
一斉に対応させることとかできそうですね。
あとは、playbookファイルがそのまま構築手順書のようになり
何をしたか見直せるのが、個人的には感動しました!