OPS

Ansibleに挑戦してみた(Ansible超入門)

2019.06.27

本記事のポイント

構成管理ツールは便利そうだけど、どうやって試してみたら良いかわからない。。。
私もそんな一人でしたが、構築作業のスキルアップを図るべくAnsibleに挑戦してみました。

Ansibleの経験がない方でも実践できるように、具体例を挙げながら分かりやすくご紹介させて頂きます。

はじめに

はじめまして、監視チームのS.Nです。

最近、レッドハットが開発するオープンソースの構成管理ツール「Ansible(アンシブル)」に初めて触れる機会がありましたので、動作検証手順を記録として残したいと思います。

※ Ansibleに触れたことがない方向けの内容になっていますので、Ansible経験者は、すみませんが読み飛ばしてくださいね。



> AWS、Google Cloud、Azure の利用料が、今なら最大8%OFF!

> 各種クラウド・オンプレの「導入支援・監視運用」なら JIG-SAW OPS

目標

Anisbleを実行して、Apacheとtomcatをインストールと起動する。

実行環境

PC(Windows10)
VirtualBox6.0.4
CentOS7.6.1810(Python2.7インストール済み)

作業概要

1.Ansibleインストール
2.Anisble設定
3.Ansibleを使用してApacheインストール



> AWS、Google Cloud、Azure の利用料が、今なら最大8%OFF!

> 各種クラウド・オンプレの「導入支援・監視運用」なら JIG-SAW OPS

実作業

Ansibleの実行環境としてPython2.7もしくはPython3(versions3.5以上)がインストールされている必要があります。
CentOS7であれば標準でPython2.7がインストールされているので、新規にインストールする必要はありませんでした。

作業を進めていきます。

0.pythonのインストール状況確認

# rpm -qa python
python-2.7.5-76.el7.x86_64

1.ansibleパッケージをインストール
yum コマンドでansibleのパッケージをインストールします。

# yum install ansible

2.作業ディレクトリへ移動
以降は /etc/ansible 配下ディレクトリで作業します。

# cd /etc/ansible/

3.「/etc/ansible/hosts」ファイルを編集
「/etc/ansible/hosts」ファイルには構成管理(「playbook」を適用)したいサーバの「IP」と環境に応じて「Port」情報を記載します。

# vi ./hosts

今回はローカルホスト上の検証のため、最後の行に次のように追記します。
▼記述内容

# This is the default ansible 'hosts' file.
#
# It should live in /etc/ansible/hosts
#
# - Comments begin with the '#' character
# - Blank lines are ignored
# - Groups of hosts are delimited by [header] elements
# - You can enter hostnames or ip addresses
# - A hostname/ip can be a member of multiple groups

# Ex 1: Ungrouped hosts, specify before any group headers.

・
・
・
中略
・
・
・

# Here's another example of host ranges, this time there are no
# leading 0s:

## db-[99:101]-node.example.com

[test-local] #★1
localhost #★2

★は追記箇所を示しています。

★1
[ ]内は任意の文字列を指定します。今回は[test-local]としました。[ ]内の文字列はターゲットグループ名を示しています。ansibleはグループに所属する全てのサーバに対して同一の構成(「playbook」)を一括で適用することができます。

★2
ターゲットグループ名の直下に構成管理(「playbook」を適用)したいサーバを記載します。ターゲットホストが複数ある場合は、全て記載します。運用上、通常はリモートサーバの「IP」と「Port」を指定することが多いかと思いますが、今回はローカル上での検証のため、「localhost」もしくは「127.0.0.1」とします。

4.実行処理のための「yml」ファイルを作成
管理対象サーバ(今回はローカルホスト自身)に自動で実行したい処理をYAMLで記述します。Chefに置き換えると「recipes/default.rb」に相当するイメージかと思います。任意のファイル名で作成しますが、今回は「test-ansible.yml」としました。今回は「apache」と「tomcat」をインストール後、両プロセスを起動し自動実行をオンにする処理を記述しました。

# vi ./test-ansible.yml

▼記述内容

- hosts: test-local #★3
connection: local #★4
tasks:
- name: install httpd #★5
yum: #★6
name: httpd #★7
state: latest #★8

- name: run httpd
service: #★9
name: httpd
state: started #★10
enabled: yes #★11

- name: install tomcat
yum:
name: tomcat
state: latest

- name: run tomcat
service:
name: tomcat
state: started
enabled: yes

一つずつ補足説明していきます。

★3
「hosts:」には、「playbook」を実行したい任意のターゲットグループを記述します。指定したグループに所属しているサーバ群が「palybook」の実行対象になります。今回は、手順3.で「/etc/ansible/hosts」に記述した「test-local」を指定しましたので、ローカルホスト1台が実行対象です。

★4
「connection:」には、ローカルホストが対象の場合、「local」を指定します。

★5
任意のタスク名を記載します。

★6
モジュールを指定します。まずは「yum」で「apache」をインストールするので、「yum」モジュールを指定します。

▼yumモジュール参考
https://docs.ansible.com/ansible/latest/modules/yum_module.html

★7
「name」にはインストールするパッケージを指定します。今回は「apache」をインストールしたいので、「httpd」と指定します。

★8
「state」には具体的な実行内容を指定します。最新版をインストールしたり最新版にアップデートする場合は「latest」でよいかと思います。

★9
インストールしたapacheの起動をするため、「service」モジュールを指定します。

▼serviceモジュール参考
https://docs.ansible.com/ansible/latest/modules/service_module.html

★10
「state」には、具体的な実行内容を指定します。起動する場合は「started」と明記します。

★11
「enabled」では、サービスの自動起動の有無を「yes」か「no」で指定可能です。今回は有りのため、「yes」としました。

5.playbookを実行

# ansible-playbook -i ./hosts test-ansible.yml

以下が実行結果になります。

PLAY [test-local] ********************************************************************************************************************************************************************

TASK [Gathering Facts] ***************************************************************************************************************************************************************
ok: [localhost]

TASK [install httpd] *****************************************************************************************************************************************************************
changed: [localhost]

TASK [run httpd] *********************************************************************************************************************************************************************
changed: [localhost]

TASK [install tomcat] ****************************************************************************************************************************************************************
changed: [localhost]

TASK [run tomcat] ********************************************************************************************************************************************************************
changed: [localhost]

PLAY RECAP ***************************************************************************************************************************************************************************
localhost : ok=5 changed=4 unreachable=0 failed=0

出力結果が「unreachable=0 」「failed=0」であればひとまず問題はないと思います。

6.プロセス起動状況確認
早速psコマンドでApacheとTomcatの起動状況を確認します。
Ansibleのコマンドを理解するため、敢えてansibleコマンドを使用してpsコマンドを実行してみます。

# ansible -i ./hosts test-local -c local -a "ps auxwf" | grep httpd | grep -v grep
root 3370 0.0 0.4 224056 5020 ? Ss 01:43 0:00 /usr/sbin/httpd -DFOREGROUND
apache 3371 0.0 0.2 224056 2948 ? S 01:43 0:00 \_ /usr/sbin/httpd -DFOREGROUND
apache 3372 0.0 0.2 224056 2948 ? S 01:43 0:00 \_ /usr/sbin/httpd -DFOREGROUND
apache 3373 0.0 0.2 224056 2948 ? S 01:43 0:00 \_ /usr/sbin/httpd -DFOREGROUND
apache 3374 0.0 0.2 224056 2948 ? S 01:43 0:00 \_ /usr/sbin/httpd -DFOREGROUND
apache 3375 0.0 0.2 224056 2948 ? S 01:43 0:00 \_ /usr/sbin/httpd -DFOREGROUND
# ansible -i ./hosts test-local -c local -a "ps auxwf" | grep tomcat | grep -v grep
tomcat 3587 3.8 5.8 2310208 59320 ? Ssl 01:43 0:01 /usr/lib/jvm/jre/bin/java -classpath /usr/share/tomcat/bin/bootstrap.jar:/usr/share/tomcat/bin/tomcat-juli.jar:/usr/share/java/commons-daemon.jar -Dcatalina.base=/usr/share/tomcat -Dcatalina.home=/usr/share/tomcat -Djava.endorsed.dirs= -Djava.io.tmpdir=/var/cache/tomcat/temp -Djava.util.logging.config.file=/usr/share/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager org.apache.catalina.startup.Bootstrap start

無事にApacheとTomcatが起動していることが確認できました。
次回は、リモートホストに対して実行したいと思います。

お読みいただきありがとうございました。

▼参考
Ansibleドキュメント
https://docs.ansible.com/ansible/latest/index.html



> AWS、Google Cloud、Azure の利用料が、今なら最大8%OFF!

> 各種クラウド・オンプレの「導入支援・監視運用」なら JIG-SAW OPS