Ansibleを利用して簡単にLAMP環境を構築する
久しぶりにブログを書いています。
今回はAnsibleを使って、簡単なLAMP環境を構築するPlaybookを作成します。
今回のゴール
今回は下記内容を記載し、記事を見ながら同じ作業ができることを目標とします。
- 「Ansibleとは?」という概要の説明
- Ansibleのインストール方法説明
- Playbook作成方法
- LAMP環境構築Playbook
Ansibleとは
Ansibleを検索すると、構成管理ツールとして紹介されることがよく見られます。
構成管理でググると次のような文章が出てきます。
構成管理とは、システムの構成やプロジェクトにおける成果物を管理することである。
つまり、システム構成を管理してくれるソフトウェアということです。Ansibleというツールを利用することによって、Ansibleを利用できる条件が整っている任意のサーバに例えばPHPのインストールを行うことができます。
Ansible以外の構成管理ツールとしては、Chef(シェフ)やPuppet(パペット)と呼ばれるツールもあります。
AnsibleとChef,Puppetの大きな違いは、エージェントレスかどうかということです。
先ほどの例で挙げたPHPのインストールですが、Ansibleで利用できる条件が整っている場合のみインストールすることが可能です。インストールする条件は下記の2つのみです。
- インストールする対象サーバ(管理対象サーバ)にpython2.4以上がインストールされている
- 管理対象サーバにsshにて接続ができる
エージェントのインストールといった、管理対象サーバに変更を加えることをAnsibleは行いません。
ChefやPuppetは管理対象サーバに対してエージェントをインストールすることが前提となります。管理対象サーバに変更を加える必要があるため、変更を加えたくない場合はAnsibleを使うほうがいいと思います。
Ansibleのインストール方法
Ansibleのインストール方法はとても簡単です。RHEL、CentOSであれば基本的に下記コマンドで一発でインストール可能です。
ただし、インストールするサーバにpython2.6以上がインストールされていることが条件です。事前にpythonのバージョンを確認しておき、インストールやバージョンアップが必要な場合は適宜行ってください。
python --version
今回実行する環境ではバージョン2.7.5がインストールされているため、特にバージョンアップの必要がありませんでした。そのためさっとインストールしてしまいます。
yum -y install ansible
コマンド実行後、下記のような画面が表示されます。
~中略~
インストール完了後、ansible --version
にてインストールしたバージョン確認が行えます。
今回OSをCentOS7にて実行しました。
これにて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を記載し実行してみます。
無事実行ができました。
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を記載するのもいいかもしれません。