Ansibleを使って、EC2のAmazonlinux2023にApache+Tomcat+MySQLの環境を構築する

はじめに

Ansibleを使って、よく使う環境の構築をしたかったので実際にやってみる。
備忘録として、この記事を書いておく。

環境

WSL 2 (Ubuntu22.04 LTS)
Ansible [core 2.15.2]

準備

EC2インスタンスの作成

項目設定値
名前server
OSAmazonLinux2023 AMI
アーキテクチャ64ビット(Arm)
インスタンスタイプt4g.micro
キーペアserver(新規で作成)
セキュリティグループssh,http,https (自分のIPのみ)
ストレージ8GB (gp3)

SSHログイン

   ,     #_
   ~\_  ####_        Amazon Linux 2023
  ~~  \_#####\
  ~~     \###|
  ~~       \#/ ___   https://aws.amazon.com/linux/amazon-linux-2023
   ~~       V~' '->
    ~~~         /
      ~~._.   _/
         _/ _/
       _/m/'
[ec2-user@ip-172-31-31-248 ~]$ 

ログインできた!

Ansibleの構築&実行

※構築したプレイブックについてはGitHubの下記に公開しておく。

構築

GitHubのリポジトリは下記
https://github.com/katsuobushiFPGA/ansible-apache-tomcat-mysql

実行

README.md の手順通りに構築する。

  1. hostsの準備
cp hosts.example hosts

vim hosts

※IPアドレスと鍵ファイルの場所を指定しておく。

  1. group_vars の認証情報を編集する。
vim group_vars/all.yml
  1. MySQLのモジュールを入れる。
ansible-galaxy collection install community.mysql
  1. テスト
ansible-playbook -i hosts test.yml

PLAY [Test] *********************************************************************************************************************************************************************************************************************

TASK [Gathering Facts] **********************************************************************************************************************************************************************************************************
[WARNING]: Platform linux on host 13.230.86.72 is using the discovered Python interpreter at /usr/bin/python3.9, but future installation of another Python interpreter could change the meaning of that path. See
https://docs.ansible.com/ansible-core/2.15/reference_appendices/interpreter_discovery.html for more information.
ok: [13.230.86.72]

TASK [Ping pong check] **********************************************************************************************************************************************************************************************************
ok: [13.230.86.72]

PLAY RECAP **********************************************************************************************************************************************************************************************************************
13.230.86.72               : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

問題なさそう。

  1. プレイブックの実行
ansible-playbook -i hosts site.yml
....
TASK [mysql : Removes the MySQL test database] **********************************************************************************************************************************************************************************
skipping: [13.230.86.72]

TASK [mysql : Restart mysqld] ***************************************************************************************************************************************************************************************************
changed: [13.230.86.72]

PLAY RECAP **********************************************************************************************************************************************************************************************************************
13.230.86.72               : ok=32   changed=3    unreachable=0    failed=0    skipped=7    rescued=0    ignored=0   

できた!

確認

SSHで対象のサーバにログインする

  • Apache
$ httpd -v

Server version: Apache/2.4.56 (Amazon Linux)
Server built:   Mar 15 2023 00:00:00

$ ps aux | grep httpd
root       31812  0.0  0.9  57596  9056 ?        Ss   19:16   0:00 /usr/sbin/httpd -DFOREGROUND
apache     31833  0.0  0.4  68552  4060 ?        S    19:16   0:00 /usr/sbin/httpd -DFOREGROUND
apache     31835  0.0  0.5 1598584 5544 ?        Sl   19:16   0:00 /usr/sbin/httpd -DFOREGROUND
apache     31836  0.0  0.5 1598584 5544 ?        Sl   19:16   0:00 /usr/sbin/httpd -DFOREGROUND
apache     31837  0.0  0.5 1763448 5532 ?        Sl   19:16   0:00 /usr/sbin/httpd -DFOREGROUND
ec2-user   39835  0.0  0.1 221724  1784 pts/0    S+   19:24   0:00 grep --color=auto httpd
  • Java
$ java --version

openjdk 11.0.20 2023-07-18 LTS
OpenJDK Runtime Environment Corretto-11.0.20.8.1 (build 11.0.20+8-LTS)
OpenJDK 64-Bit Server VM Corretto-11.0.20.8.1 (build 11.0.20+8-LTS, mixed mode)
  • Tomcat
$ tomcat9 version

NOTE: Picked up JDK_JAVA_OPTIONS:  --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED
Server version: Apache Tomcat/9.0.71
Server built:   Jul 17 2023 00:00:00 UTC
Server number:  9.0.71.0
OS Name:        Linux
OS Version:     6.1.41-63.114.amzn2023.aarch64
Architecture:   aarch64
JVM Version:    11.0.20+8-LTS
JVM Vendor:     Amazon.com Inc.

$ ps aux | grep java
tomcat     32680  0.9  7.9 3066272 75368 ?       Ssl  19:16   0:04 /usr/lib/jvm/jre/bin/java -Djavax.sql.DataSource.Factory=org.apache.commons.dbcp.BasicDataSourceFactory -classpath /usr/share/tomcat9/bin/bootstrap.jar:/usr/share/tomcat9/bin/tomcat-juli.jar: -Dcatalina.base=/usr/share/tomcat9 -Dcatalina.home=/usr/share/tomcat9 -Djava.endorsed.dirs= -Djava.io.tmpdir=/var/cache/tomcat9/temp -Djava.util.logging.config.file=/usr/share/tomcat9/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager org.apache.catalina.startup.Bootstrap start
ec2-user   39838  0.0  0.1 221592  1788 pts/0    S+   19:24   0:00 grep --color=auto java
  • MySQL
$ mysql --version

mysql  Ver 8.0.34 for Linux on aarch64 (MySQL Community Server - GPL)

$ ps aux | grep mysql
mysql      39405  0.7 39.9 1801216 379412 ?      Ssl  19:18   0:02 /usr/sbin/mysqld
ec2-user   39833  0.0  0.1 221592  1856 pts/0    S+   19:23   0:00 grep --color=auto mysql
  • crontab
$ sudo crontab -l

0 0 * * * echo "test" > /dev/null 2>&1

他の確認

$ date 

2023年  9月  1日 金曜日 19:23:24 JST


$ systemctl list-unit-files | grep enabled
amazon-ssm-agent.service               enabled         enabled
atd.service                            enabled         enabled
auditd.service                         enabled         enabled
chrony-config.service                  enabled         enabled
chronyd.service                        enabled         enabled
cloud-config.service                   enabled         disabled
cloud-final.service                    enabled         disabled
cloud-init-local.service               enabled         disabled
cloud-init.service                     enabled         disabled
crond.service                          enabled         enabled
dbus-broker.service                    enabled         enabled
getty@.service                         enabled         enabled
hibinit-agent.service                  enabled         enabled
httpd.service                          enabled         disabled
import-state.service                   enabled         enabled
irqbalance.service                     enabled         enabled
libstoragemgmt.service                 enabled         enabled
mysqld.service                         enabled         disabled
nfs-convert.service                    enabled         disabled
rngd.service                           enabled         enabled
rpmdb-rebuild.service                  enabled         enabled
rsyslog.service                        enabled         enabled
selinux-autorelabel-mark.service       enabled         enabled
sshd.service                           enabled         enabled
sssd.service                           enabled         enabled
sysstat.service                        enabled         enabled
systemd-fsck-root.service              enabled-runtime disabled
systemd-homed-activate.service         enabled         disabled
systemd-homed.service                  enabled         enabled
systemd-network-generator.service      enabled         enabled
systemd-networkd-wait-online.service   enabled         disabled
systemd-networkd.service               enabled         enabled
systemd-pstore.service                 enabled         enabled
systemd-remount-fs.service             enabled-runtime disabled
systemd-resolved.service               enabled         enabled
tomcat9.service                        enabled         disabled
update-motd.service                    enabled         enabled
dbus.socket                            enabled         enabled
sssd-kcm.socket                        enabled         enabled
systemd-networkd.socket                enabled         disabled
systemd-userdbd.socket                 enabled         enabled
cloud-init.target                      enabled-runtime disabled
nfs-client.target                      enabled         disabled
reboot.target                          enabled         enabled
remote-cryptsetup.target               enabled         enabled
remote-fs.target                       enabled         enabled
chrony-config.timer                    disabled        enabled
fstrim.timer                           enabled         enabled
logrotate.timer                        enabled         enabled
sysstat-collect.timer                  enabled         enabled
sysstat-summary.timer                  enabled         enabled
update-motd.timer                      enabled         enabled

良さそう。

ブラウザで確認する。

BASIC認証 confirm-http-1

httpの確認 confirm-http-2

httpsの確認 confirm-http-3

参考

おわりに

Ansibleを使ってApache+Tomcat+MySQLの環境を構築した。
MySQLのインストールでめっちゃハマってかなり時間を使ってしまった…。
冪等性を考えて構築するのは難しい、構築したのも保てているか怪しいところだ。
あとはベストプラクティスに沿って、ファイルツリーが作れているかというとこれもまた怪しいところ。
このあたりは何回かインフラを構築する上で学べていければ良いかなと思う。

Hugo で構築されています。
テーマ StackJimmy によって設計されています。