本シリーズではAnsibleを適用してWeb3層システム(Apache/Tomcat/Postgres)を自動構築する方法をご紹介しています。
今回は最後のStep5としてApacheのインストールおよびTomcatとの連携方法をご紹介しますので、ぜひ参考していただければと思います。
まだAnsibleインストール、OS基本設定、Postgresインストール、Tomcatが済んでいない方は下記のStep1、Step2、Step3、Step4の記事を参考にしてみて下さい。
【Ansible/インフラ構築自動化】Step1:Ansibleのインストール方法(AWS EC2/CentOS7)
【Ansible/インフラ構築自動化】Step2:AWS EC2に構築したCentOSの基本設定
【Ansible/インフラ構築自動化】Step3:Postgresインストール/データベース作成
【Ansible/インフラ構築自動化】Step4:Tomcatのインストール・Postgres連携
1. ymlファイル作成
1.1 ディレクトリ作成
まずはAnsibleユーザでmkdirコマンドを実行し、下記の通りディレクトリを作成して下さい。
[ansible@ip-172-31-81-212 ~]$ tree
.
└── websystem
└── roles
├── apache
│ ├── files
│ ├── tasks
│ ├── tests
│ └── vars
1.2 プレイブック作成(main.yml)
次はtasksディレクトリにmain.ymlを作成していきます。各タスクの内容は下記の通りです。
・check_install.yml:インストール前の事前準備
・install.yml:インストール作業
・configure.yml:設定作業
[ansible@ip-172-31-81-212 ~]$ vi ./websystem/roles/apache/tasks/main.yml
[ansible@ip-172-31-81-212 ~]$ cat ./websystem/roles/apache/tasks/main.yml
---
# tasks file for ./roles/
- include_tasks: roles/apache/tasks/check_install.yml
- include_tasks: roles/apache/tasks/install.yml
- include_tasks: roles/apache/tasks/configure.yml
[ansible@ip-172-31-81-212 ~]$
1.3 インストール事前設定用yml作成(check_install.yml)
インストールする前の設定確認・変更を行います。下記の通りtasksディレクトリにcheck_install.ymlを作成して下さい。ここではApacheが使うポートの許可設定を入れています。実際に使用するポート番号(80)の情報は後ほど/varsディレクトリのファイルに記載しますので、ここでは一旦、下記の通り作成してみて下さい。
[ansible@ip-172-31-81-212 ~]$ vi ./websystem/roles/apache/tasks/check_install.yml
[ansible@ip-172-31-81-212 ~]$ cat ./websystem/roles/apache/tasks/check_install.yml
---
# tasks file for ./roles/apache
- name: check_install / Allow ports for firewalld
firewalld:
port: "{{ item }}"
permanent: yes
immediate: yes
state: enabled
loop: "{{ apache_firewalld_port }}"
1.4 インストール用yml作成(install.yml)
続いてApacheのインストールです。tasksディレクトリに配下にinstall.ymlを作成して下さい。yumコマンドでパッケージをインストールしていきます。
[ansible@ip-172-31-81-212 ~]$ vi ./websystem/roles/apache/tasks/install.yml
[ansible@ip-172-31-81-212 ~]$ cat ./websystem/roles/apache/tasks/install.yml
---
# tasks file for ./roles/apache
- name: install / Install required packages
yum:
name: "{{ apache_packages }}"
state: present
1.5 設定変更用yml作成(configure.yml)
続いてApacheの設定作業です。tasksディレクトリに配下にconfigure.ymlを作成して下さい。各処理の詳細は下記の通りです。
- httpd.confの配置
Apacheの設定ファイルであるhttpd.confファイルを置き換える処理を記載しています。httpd.confファイルは事前に編集してfilesディレクトリに格納しておく必要があるので後述します。 - Apache起動
systemdコマンドでApacheを起動しています。 - Apache起動確認
Apache起動後のステータスを確認する処理を記載しています。起動に少し時間がかかるので適当なdelay、timoutの時間を指定します。
[ansible@ip-172-31-81-212 ~]$ vi ./websystem/roles/apache/tasks/configure.yml
[ansible@ip-172-31-81-212 ~]$ cat ./websystem/roles/apache/tasks/configure.yml
---
# tasks file for ./roles/apache
#1.httpd.conf配置
- name: configure / Setup global configuration file
copy:
src: httpd.conf
dest: /etc/httpd/httpd.conf
owner: root
group: root
mode: 0644
#2.Apache起動
- name: configure / Start apache service
systemd:
name: httpd
state: reloaded
enabled: yes
#3.Apache起動確認
- name: configure / Wait for apache restart
wait_for:
host: "{{ ansible_default_ipv4.address }}"
port: "{{ apache_service_port }}"
delay: 3
timeout: 60
1.6 設定ファイル作成
1.5で反映するための設定ファイル(httpd.conf)をfilesディレクトリ配下に格納しておいてください。要件に応じて設定内容を変更します。今回はTraceEnable設定をOFFにしています。
[root@ip-172-31-81-212 ~]# vi /home/ansible/websystem/roles/apache/files/httpd.conf
[root@ip-172-31-81-212 ~]# cat /home/ansible/websystem/roles/apache/files/httpd.conf |grep TraceEnable
TraceEnable off
[root@ip-172-31-81-212 ~]# ll /home/ansible/websystem/roles/apache/files/
total 24
-rw-r--r--. 1 ansible ansible 1834 Mar 2 16:21 httpd.conf
1.7 変数定義
続いて変数を定義しましょう。varsディレクトリ配下にmain.ymlを作成して変数に具体的な値を入れます。
[ansible@ip-172-31-81-212 ~]$ vi ./websystem/roles/apache/vars/main.yml
[ansible@ip-172-31-81-212 ~]$ cat ./websystem/roles/apache/vars/main.yml
---
# vars file for ./roles/apache
apache_service_port: 80
apache_firewalld_port:
- "{{ apache_service_port }}/tcp"
apache_packages:
- httpd
1.8 実行対象有効化
最後にTomcatのplaybookが実行されるように、前のStepで作成したwebsystem_install.ymlのrole:postgresに関する記載のコメントアウトを外しておきましょう。
[ansible@ip-172-31-81-212 ~]$ vi /home/ansible/websystem/websystem_install.yml
[ansible@ip-172-31-81-212 ~]$ cat /home/ansible/websystem/websystem_install.yml
---
- name: Install for web system
hosts: websystem
become: true
roles:
- { role: common, tags: common } ##OS setting
- { role: postgres, tags: postgres } ##Postgres Install/setting
- { role: tomcat, tags: tomcat } ##Tomcat Install/setting
- { role: apache, tags: apache } ##Apache Install/setting
[ansible@ip-172-31-81-212 ~]$
2. プレイブック実行
2.1 プレイブック実行
続いてansible-playbookコマンドを実行していきましょう。NGだった場合には-vvvvオプションをつけてエラー内容を確認して修正してみて下さい。
[ansible@ip-172-31-81-212 websystem]$ ansible-playbook -i ./inventory/inventory.ini ./websystem_install.yml -t apache
PLAY [Install for web system] ***********************************************************************************************************************************************
TASK [Gathering Facts] ******************************************************************************************************************************************************
ok: [web1i]
TASK [apache : include_tasks] ***********************************************************************************************************************************************
included: /home/ansible/websystem/roles/apache/tasks/check_install.yml for web1i
TASK [apache : check_install / Allow ports for firewalld] *******************************************************************************************************************
ok: [web1i] => (item=80/tcp)
TASK [apache : include_tasks] ***********************************************************************************************************************************************
included: /home/ansible/websystem/roles/apache/tasks/install.yml for web1i
TASK [apache : install / Install required packages] *************************************************************************************************************************
ok: [web1i]
TASK [apache : include_tasks] ***********************************************************************************************************************************************
included: /home/ansible/websystem/roles/apache/tasks/configure.yml for web1i
TASK [apache : configure / Setup global configuration file] *****************************************************************************************************************
changed: [web1i]
TASK [configure / Start apache service] *************************************************************************************************************************************
changed: [web1i]
TASK [configure / Wait for apache restart] **********************************************************************************************************************************
ok: [web1i]
PLAY RECAP ******************************************************************************************************************************************************************
web1i : ok=9 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
ok, changedになっていたら成功です。
2.1 プレイブック実行結果確認
プレイブック実行によってApacheが適切にインストールおよび設定されているか確認しましょう。
1. Apacheの起動確認
systemdコマンドで状態確認しましょう。Activeの項目がactive (running)になっていれば正常に起動できています。
[ansible@ip-172-31-81-212 ~]$ sudo systemctl status httpd
httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
Active: active (running) since Sat 2024-02-17 11:12:53 JST; 32min ago
Docs: man:httpd(8)
man:apachectl(8)
Process: 10374 ExecReload=/usr/sbin/httpd $OPTIONS -k graceful (code=exited, status=0/SUCCESS)
Main PID: 7999 (httpd)
Status: "Total requests: 0; Current requests/sec: 0; Current traffic: 0 B/sec"
CGroup: /system.slice/httpd.service
7999 /usr/sbin/httpd -DFOREGROUND
10376 /usr/sbin/httpd -DFOREGROUND
10377 /usr/sbin/httpd -DFOREGROUND
10378 /usr/sbin/httpd -DFOREGROUND
10379 /usr/sbin/httpd -DFOREGROUND
10380 /usr/sbin/httpd -DFOREGROUND
Feb 17 11:12:53 ip-172-31-81-212.ec2.internal systemd[1]: Starting The Apache HTTP Server...
Feb 17 11:12:53 ip-172-31-81-212.ec2.internal systemd[1]: Started The Apache HTTP Server.
Feb 17 11:43:21 ip-172-31-81-212.ec2.internal systemd[1]: Reloading The Apache HTTP Server.
Feb 17 11:43:21 ip-172-31-81-212.ec2.internal systemd[1]: Reloaded The Apache HTTP Server.
[root@ip-172-31-81-212 ~]#
[root@ip-172-31-81-212 ~]# [ansible@ip-172-31-81-212 websystem]$ exitlsof -i:80
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
httpd 7999 root 3u IPv4 46464 0t0 TCP *:http (LISTEN)
httpd 10376 apache 3u IPv4 46464 0t0 TCP *:http (LISTEN)
httpd 10377 apache 3u IPv4 46464 0t0 TCP *:http (LISTEN)
httpd 10378 apache 3u IPv4 46464 0t0 TCP *:http (LISTEN)
httpd 10379 apache 3u IPv4 46464 0t0 TCP *:http (LISTEN)
httpd 10380 apache 3u IPv4 46464 0t0 TCP *:http (LISTEN)
2. Apacheが使用しているポート確認
lsof コマンドでApacheが使用しているポートが80であることを確認しましょう。
[ansible@ip-172-31-81-212 ~]$ sudo lsof -i:80
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 9091 tomcat 44u IPv4 59214 0t0 TCP *:webcache (LISTEN)
3. Apacheの設定ファイル確認
catコマンドでApacheの設定ファイル(httpd.conf)が想定通り編集されているか確認しましょう。
[ansible@ip-172-31-81-212 ~]$ cat /etc/httpd/httpd.conf |grep TraceEnable
TraceEnable off
4. Apache管理コンソール接続
Apacheの管理コンソール画面にアクセスできるか確認します。EC2インスタンスのInboundルールにポート80を追加して、ブラウザからアクセスできたら成功です。
アクセス先:http://{サーバホスト名}:80
Inboundルール追加の詳細については下記サイトを参照ください。
※セキュリティの観点から、ひととおり構築が終わったら本管理コンソールは外部から接続できないようしておくことを推奨します。
5. テストアプリ動作確認
では最後にテストアプリが動作するか確認しましょう。Step4ではポート8080を指定してTomcatに直接アクセスしていましたが、今回はポート指定を外してデフォルトの80番ポートでアクセスします。下記の通りテストデータが表示できたら成功です!
アクセス先:http://{サーバホスト名}/testjsp/test.jsp
まとめ
Step5ではApacheのインストール、各種設定、Apache/Tomcat連携まですべてAnsibleで自動構築する方法をご紹介しまいした。以上でAnsibleを適用してWeb3層システム(Apache/Tomcat/Postgres)を自動構築する方法のご紹介は終了となります。ひととおりこのシリーズで記載していることが実装できたら、ある程度Ansibleの基本はマスターできていると思いますので、ぜひ皆さんの環境に合わせてAnsibleによる構築を進めてもらえればと思います。ここまで読んでいただきありがとうございました!!
参考文献
Ansible実践ガイド
アシタカブログ:Apache HTTP ServerとApache Tomcatを連携させる
コメント