Ansibleを利用して簡単にLAMP環境を構築する

久しぶりにブログを書いています。
今回はAnsibleを使って、簡単なLAMP環境を構築するPlaybookを作成します。

今回のゴール

今回は下記内容を記載し、記事を見ながら同じ作業ができることを目標とします。

  • 「Ansibleとは?」という概要の説明
  • Ansibleのインストール方法説明
  • Playbook作成方法
  • LAMP環境構築Playbook

Ansibleとは

Ansibleを検索すると、構成管理ツールとして紹介されることがよく見られます。
構成管理でググると次のような文章が出てきます。

構成管理とは、システムの構成やプロジェクトにおける成果物を管理することである。

www.weblio.jp

つまり、システム構成を管理してくれるソフトウェアということです。Ansibleというツールを利用することによって、Ansibleを利用できる条件が整っている任意のサーバに例えばPHPのインストールを行うことができます。
Ansible以外の構成管理ツールとしては、Chef(シェフ)やPuppet(パペット)と呼ばれるツールもあります。
AnsibleとChef,Puppetの大きな違いは、エージェントレスかどうかということです。

先ほどの例で挙げたPHPのインストールですが、Ansibleで利用できる条件が整っている場合のみインストールすることが可能です。インストールする条件は下記の2つのみです。

  • インストールする対象サーバ(管理対象サーバ)にpython2.4以上がインストールされている
  • 管理対象サーバにsshにて接続ができる

エージェントのインストールといった、管理対象サーバに変更を加えることをAnsibleは行いません。
ChefやPuppetは管理対象サーバに対してエージェントをインストールすることが前提となります。管理対象サーバに変更を加える必要があるため、変更を加えたくない場合はAnsibleを使うほうがいいと思います。

Ansibleのインストール方法

Ansibleのインストール方法はとても簡単です。RHELCentOSであれば基本的に下記コマンドで一発でインストール可能です。
ただし、インストールするサーバにpython2.6以上がインストールされていることが条件です。事前にpythonのバージョンを確認しておき、インストールやバージョンアップが必要な場合は適宜行ってください。
python --version
f:id:free_money:20180814004512p:plain
今回実行する環境ではバージョン2.7.5がインストールされているため、特にバージョンアップの必要がありませんでした。そのためさっとインストールしてしまいます。

yum -y install ansible

コマンド実行後、下記のような画面が表示されます。
f:id:free_money:20180814003952p:plain
~中略~
f:id:free_money:20180814004026p:plain

インストール完了後、ansible --versionにてインストールしたバージョン確認が行えます。
今回OSをCentOS7にて実行しました。
f:id:free_money:20180814004236p:plain
これにてAnsibleのインストールは終わりです。

playbook作成方法

playbookとは、管理対象の構成を記述したファイルの名称です。playbookに記載する内容が、サーバの構成に直結します。
例えば、「対象サーバにPHPをインストールしたい!」と思った場合、playbookにPHPをインストールするplaybookを記載する必要があります。もちろん、記載して実行する必要があります。
playbookはYAML形式で記載します。簡単なplaybookであれば、playbookを実行する対象サーバと実行するタスクを記載する程度で十分だと思います。他にも記載方法はいろいろありますが、まずは簡単なところから実行していきます。
playbookはどこでも作成可能です。対象ホスト名はIPアドレスのべた書きでも大丈夫ですが、一般的にはhostsというファイルを作成し、その中に構築対象サーバのIPアドレスを記載していきます。hostsを読み込ませるためには、ansible.cfgというファイルを作成し、実行するホストを反映させるなど作業が必要です。
今回は、デフォルトの/etc/ansibleディレクトリ内で作成していきます。
playbookの構文は以下の通りです。通常もう少し複雑ですが、本記事ではわかりやすさを求めるためいったん実行できるplaybookを作成します。
test.yml

- hosts: test_host      #管理対象サーバのIPアドレスを記載したグループ名。
                        #IPアドレス直書きでもOKだが、今回はホスト名を設定。  
  tasks:                #tasks以降に管理対象サーバに加えたい変更を記載する。
   yum:
     name:  xxx         #インストールしたいMWを選択。PHPやApache等
     state: present     #既にインストールされている場合の対応を選択。
                        #presentは既にインストールされている場合変更を加えないという設定。

hosts

[test_host]  
IPアドレス  

あとは作成したplaybookを実行するだけです。コマンドは、ansible-playbook test.ymlです。上記playbookをもとに、PHPをインストールするplaybookを記載し実行してみます。
f:id:free_money:20180819010559p:plain
無事実行ができました。

LAMP環境構築Playbook

ここからが本題です。LAMP環境を構築するplaybookを記載し実行します。playbookは下記のとおりです。本来はyumが複数あるためwith_itemsでループしたりするほうがいいのですが、一つ一つをわかりやすくするためあえてべた書きにしています。

- hosts: test-server
  tasks:
  #httpdインストール  
  - name: install httpd
    yum:
      name: httpd
      state: present

  #phpインストール  
  - name: install php
    yum:
      name: php
      state: present

  #MariaDB(旧MySQL)インストール 
  - name: install mariadb
    yum:
      name: mariadb
      state: present

  - name: install mysql-python
    yum:
      name: MySQL-python
      state: present
  - name: install mariadb-server
    yum:
      name: mariadb-server
      state: present

  #httpdサービススタート  
  - name: start httpd
    service:
      name: httpd
      state: started

  #MariaDBサービススタート  
  - name: start mysql
    service:
      name: mariadb
      state: started

  #MariaDB用ユーザ作成  
  - name: create mariadb user
    mysql_user:
      name: mariadb
      password: mariadb

  #databases作成
  - name: create mariadb database
    mysql_db:
      name: testdb
      state: present

  #MariaDB設定ファイルを反映する場合実行  
  #コメントアウトを削除し反映
  #  - name: copy mariadb config file
  #    copy:
  #      src: /root/my.cnf
  #      dest: /etc/my.cnf

  #MariaDBサービス起動  
  - name: start mysql
    service:
      name: mariadb
      state: started

これでLAMP環境が構築できます。インストールしてから設定ファイルを変更していないため、設定ファイルを変更するplaybookを記載するのもいいかもしれません。