本シリーズではAnsibleを適用してWeb3層システム(Apache/Tomcat/Postgres)を自動構築する方法をご紹介しています。
前回の記事ではStep1として、CentOSにAnsibleをインストールしてAnsibleの基本的な動作を確認する手順をご紹介しました。
【インフラ自動構築】Step1:Ansibleのインストール方法(AWS EC2/CentOS7)
今回はStep2としてミドルウェアをインストールする前にOSの基本設定を行っていきます。SELinuxおよびipv6設定の無効化、パッケージ最新化を実施していきますのでぜひ参考にしてみて下さい。

1. ディレクトリ作成
まずは下記のようににディレクトリを作成して下さい。websystemというディレクトリの配下に各種ディレクトリ・ファイルを作成していきます。
[ansible@ip-172-31-81-212 ~]$ mkdir -p ./websystem/inventory
[ansible@ip-172-31-81-212 ~]$ mkdir -p ./websystem/roles/common/files
[ansible@ip-172-31-81-212 ~]$ mkdir -p ./websystem/roles/common/tasks
[ansible@ip-172-31-81-212 ~]$ mkdir -p ./websystem/roles/common/vars
[ansible@ip-172-31-81-212 ~]$ tree
.
├── roles
└── websystem
├── inventory
└── roles
└── common
├── files
├── tasks
└── vars
2. Playbook作成
上記で作成したwebsystemディレクトリ配下にPlaybookを作成していきましょう。最終的にはOSだけではなくApache、Tomcat、Posstgresの設定も行っていきますが、現時点では一旦、OS設定のroleのみを有効化しています。
[ansible@ip-172-31-81-212 websystem]$ vi websystem_install.yml
[ansible@ip-172-31-81-212 websystem]$ cat 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 websystem]$
続いてtasksディレクトリ配下にmain.ymlファイルを作成します。
- SELinuxの無効化
SELinuxが有効になっているとrootユーザに対してもアクセス制限がかかってしまって構築の難易度が高くなるので、ここでは無効化しておきます。 - ipv6インターフェースの無効化
一般的にipv4を使用していることがほとんどでipv6は不要ですので、余計な通信が発生しないようにipv6インターフェースを無効にしておきます。 - パッケージの最新化
yumコマンドで各種パッケージを最新化しておきましょう。 - EPEL Repository登録
yumコマンドでEPEL Repository登録をしておきましょう。EPELとはExtra Packages for Enterprise Linuxの略でRHELやCentOS向けの追加パッケージを提供するリポジトリとなります。 - 環境変数設定
各MWに必要な環境変数をここで定義しておきましょう。/etc/profileを編集します。
[ansible@ip-172-31-81-212 ~]$ cd ./websystem/roles/common/tasks/
[ansible@ip-172-31-81-212 tasks]$ vi main.yml
[ansible@ip-172-31-81-212 tasks]$ cat main.yml
---
# tasks file for ./roles/common
# 1.SELinuxの無効化
- name: configure / Selinux permissived
selinux:
policy: targeted
state: permissive
when : ansible_selinux.config_mode == 'enforcing'
# 2.ipv6インターフェースの無効化
- name: configure / Disable ipv6 interface
sysctl:
state: present
name: "{{ item }}"
value: '1'
sysctl_set: yes
reload: yes
loop:
- net.ipv6.conf.all.disable_ipv6
- net.ipv6.conf.default.disable_ipv6
# 3.パッケージの最新化
- name: configure / Update yum packages
yum:
name: '*'
state: latest
update_cache: yes
# 4.EPEL Repository登録
- name: configure / Import EPEL Repository
yum:
name: epel-release
state: latest
update_cache: yes
# 5.環境変数設定
- name: configure / deploy profile file
copy:
src: profile
dest: /etc/profile
owner: root
group: root
mode: 0644
[ansible@ip-172-31-81-212 tasks]$
/etc/profileをfilesディレクトリに配置しておきます。
[ansible@ip-172-31-81-212 ~]$ ls -l ./websystem/roles/common/files/profile
-rw-rw-r--. 1 ansible ansible 1987 Mar 1 06:19 ./websystem/roles/common/files/profile
[ansible@ip-172-31-81-212 ~]$ cat ./websystem/roles/common/files/profile
# /etc/profile
~省略~
#デフォルトから下記を追加
JAVA_HOME=/usr/lib/jvm/java-11-openjdk-11.0.22.0.7-1.el7_9.x86_64
CATALINA_HOME=/etc/tomcat
CLASSPATH=$CATALINA_HOME/lib/*.jar
export JAVA_HOME CATALINA_HOME CLASSPATH
3. Ansibleコマンド実行
ここまでできたら、いよいよansible-playbookコマンドを実行して自動設定変更をしてみましょう。まずは–checkオプションを入れてDry Runすることで、Ansibleの処理が問題なく動くかどうかを確認してください。下記のようにokやchangedが出力されており、NGが出力されていなければ問題なく設定できています。
[ansible@ip-172-31-81-212 ~]$ ansible-playbook -i ~/websystem/inventory/inventory.ini ~/websystem//websystem_install.yml -t common --check
PLAY [Install for web system] ***********************************************************************************************************************************************
TASK [Gathering Facts] ******************************************************************************************************************************************************
ok: [web1i]
TASK [common : configure / Selinux permissived] *****************************************************************************************************************************
skipping: [web1i]
TASK [common : configure / Disable ipv6 interface] **************************************************************************************************************************
ok: [web1i] => (item=net.ipv6.conf.all.disable_ipv6)
ok: [web1i] => (item=net.ipv6.conf.default.disable_ipv6)
TASK [common : configure / Update yum packages] *****************************************************************************************************************************
ok: [web1i]
TASK [common : configure / Import EPEL Repository] **************************************************************************************************************************
ok: [web1i]
TASK [common : configure / deploy profile file] *****************************************************************************************************************************
ok: [web1i]
PLAY RECAP ******************************************************************************************************************************************************************
web1i : ok=5 changed=0 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0
それでは続けて、–checkをはずして実際に実行していきましょう。yum updateに時間がかかるのでしばらく待ってください。
[ansible@ip-172-31-81-212 ~]$ ansible-playbook -i ~/websystem/inventory/inventory.ini ~/websystem//websystem_install.yml -t common
PLAY [Install for web system] ***********************************************************************************************************************************************
TASK [Gathering Facts] ******************************************************************************************************************************************************
ok: [web1i]
TASK [common : configure / Selinux permissived] *****************************************************************************************************************************
skipping: [web1i]
TASK [common : configure / Disable ipv6 interface] **************************************************************************************************************************
ok: [web1i] => (item=net.ipv6.conf.all.disable_ipv6)
ok: [web1i] => (item=net.ipv6.conf.default.disable_ipv6)
TASK [common : configure / Update yum packages] *****************************************************************************************************************************
ok: [web1i]
TASK [common : configure / Import EPEL Repository] **************************************************************************************************************************
ok: [web1i]
TASK [common : configure / deploy profile file] *****************************************************************************************************************************
ok: [web1i]
PLAY RECAP ******************************************************************************************************************************************************************
web1i : ok=5 changed=0 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0
もしエラーが起きてしまった場合は、ansible-playbookコマンドに-vvvvオプションをつけて実行すると処理の詳細が出力されますので、問題になっている箇所を特定して修正してみて下さい。
4. 設定変更の確認
念のため適切に設定変更ができているかどうか確認してみましょう。
- SELinuxの無効化
getenforceコマンドの結果がPermissiveになっていればSELinuxは無効になっています。 - ipv6インターフェースの無効化
“ip a”コマンドの結果にinet6の項目が表示されていなければipv6インターフェースは無効化されています。 - パッケージの最新化
yumコマンドの結果、No packages marked for updateと表示されれば最新化されています。 - EPEL Repository登録
rpmコマンドでepel-releaseがインストールされていれば正しい状態となっています。 - 環境変数確認
#1.SELinuxの無効化の確認
[ansible@ip-172-31-81-212 ~]$ getenforce
Permissive
#2.ipv6インターフェースの無効化の確認
[ansible@ip-172-31-81-212 ~]$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc pfifo_fast state UP group default qlen 1000
link/ether 12:bb:90:98:87:e1 brd ff:ff:ff:ff:ff:ff
inet 172.31.81.212/20 brd 172.31.95.255 scope global noprefixroute dynamic eth0
valid_lft 3274sec preferred_lft 3274sec
#3.パッケージの最新化の確認
[ansible@ip-172-31-81-212 ~]$ sudo yum update
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
epel/x86_64/metalink | 23 kB 00:00:00
* base: download.cf.centos.org
~省略~
No packages marked for update
#4.EPEL Repository登録の確認
[ansible@ip-172-31-81-212 ~]$ rpm -qa |grep epel-release
epel-release-7-14.noarch
#5.環境変数の確認
[ansible@ip-172-31-81-212 ~]$ echo $JAVA_HOME
/usr/lib/jvm/java-11-openjdk-11.0.22.0.7-1.el7_9.x86_64
[ansible@ip-172-31-81-212 ~]$ echo $CATALINA_HOME
/etc/tomcat
[ansible@ip-172-31-81-212 ~]$ echo $CLASSPATH
/etc/tomcat/lib/*.jar
5. まとめ
今回はOSの基本設定の方法をご紹介しました。Step3以降はいよいよPostgres/Tomcat/Apacheの構築方法を御紹介しますので、ぜひ見てもらえると嬉しいです。
6. 参考文献
Ansible実践ガイド
コメント