こんにちは。ヤスタカです。 【Ansible入門】サーバーの構成管理をコード化してみよう
前回の「【Ansible入門】サーバーの構成管理をコード化してみよう」は、Ansibleの基礎編。対象サーバーを登録するinventoryファイルと、inventoryファイルに登録したサーバー群に対して実行する処理を記載した「playbook」というものを作っていきました。
今回はこのモジュールを使って、サーバーにLAMP環境を構築します。その後、roleという概念を使ってタスクを別ファイルに切り出して、再利用しやすいようにしていきたいと思います。
前回までのおさらい
playbookの書き方をおさらいしておくと、
- hosts: allなど処理を実行するサーバー群をまず指定する
- sudo: yesで管理者権限で実行するよう設定する
- その後のtasks:モジュールの指定とモジュールごとのオプションを指定する
以上の手順で、サーバーに処理を実行させることができました。
Apacheのインストール
まずはwebserver群に対して、Apacheをインストールして起動するplaybookを書いてみます。
- hosts: webserver sudo: yes tasks: - name: apacheのインストール yum: name=httpd state=latest - name: apacheの起動設定 service: name=httpd state=started enabled=yes
PHPのインストール
続いてphpをインストールしていきましょう。
tasks: の下に新たに追加する記述は以下の通りです。- name: phpのインストール yum: name={{item}} state=latest with_items: - php - php-devel - php-mbstring - php-mysql notify: - restart apache handlers: - restart apache service: name=httpd state=restarted
with_items: を使うと、{{item}}の中にwith_itemsで指定した項目を次々に代入して処理を繰り返してくれます。
notify: と handlers: この2つのモジュールはnotifyで指定した名前(今回の場合はrestart apache)を変更がある度に実行してくれるようになります。restart apacheの処理内容についてはhandlersで指定します。MySQLのインストール
続いてMySQLのインストールとDBの作成です。
- name: mysqlのインストール yum: name={{item}} state=latest with_items: - mysql-server - MySQL-python - name: mysqlの起動設定 service: name=mysqld state=started enabled=yes - name: データベースの作成 mysql_db: name=mydb state=present - name: データベースユーザーの設定 mysql_user: name=dbuser password=dbpassword priv=mydb.*:ALL state=present
with_items: phpのインストールのときにもでてきましたね。{{item}}の中にwith_itemsで指定したリストを順番に代入して実行してくれます。
mysql_db: このモジュールでデータベースの作成をします。nameオプションでデータベース名を指定します。
mysql_user: データベースのユーザーとパスワードの設定ができます。includeで他のplaybookを取り込んでみる
タスクをファイルに分割してそれを取り込むことで汎用性を高めることもできます。
例えばphpのインストールの部分を別ファイルにする場合は、install_php.ymlなどの名前でファイルを作り、そこに- name: phpのインストール yum: name={{item}} state=latest with_items: - php - php-devel - php-mbstring - php-mysql notify: - restart apache handlers: - restart apache service: name=httpd state=restarted
上記部分をmain.ymlから切り取り、install_php.ymlにコピーします。
その後main.ymlの方でinclude: tasks/install_php.yml
とtasks: の下の階層で読み込めば、install_php.ymlの内容を実行してくれます。
roleでtasksを分割してみる
roleは一連のtaskを共有する仕組みです。includeと違う点はincludeは必要な部分のみを別ファイルに書き出して共有するという機能に対して、roleはそれ単体で使用することを前提としており、他の人と共有がしやすくなっています。
またroleはansible-galaxyコマンドを使うと、世界中で投稿された他の人が作ったroleを利用することができます。
今回はこのansible-galaxyを使ってroleを利用してみます。まずはどんなroleがあるのか見てみましょう。
このサイトからbrowse rolesをクリックして、検索したいroleの名前を入れます。
今回はApacheの代わりにnginxに変更してみたいので、nginxと入れて検索します。
Download数が多いと安心できそうなので、sortでDownloadを選択してトップに出てきたやつを試してみましょう。
roleを選択すると、roleをインストールするコマンドが表示されるのでそれをコピペして実行しましょう。$ ansible-galaxy install geerlingguy.nginx
そうすると/etc/ansible/roles/以下にインストールされます。
あとはroleを指定すれば使用できます。roles: -{role: nginx, nginx_http_params: { sendfile: "on", access_log: "var/log/nginx/access.log"}, nginx_sites: none }
いかがでしたか?
Ansibleを使えばいつでも同じ状態のサーバーをいくつでも設定することができ、メンテナンスもしやすくなります。導入の敷居も低いので、この機会にぜひAnsibleを利用してみてください。
LIGはWebサイト制作を支援しています。ご興味のある方は事業ぺージをぜひご覧ください。