はじめに
Ansibleを使って、よく使う環境の構築をしたかったので実際にやってみる。
備忘録として、この記事を書いておく。
環境
WSL 2 (Ubuntu22.04 LTS)
Ansible [core 2.15.2]
準備
EC2インスタンスの作成
項目 | 設定値 |
---|---|
名前 | server |
OS | AmazonLinux2023 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
の手順通りに構築する。
- hostsの準備
cp hosts.example hosts
vim hosts
※IPアドレスと鍵ファイルの場所を指定しておく。
group_vars
の認証情報を編集する。
vim group_vars/all.yml
MySQL
のモジュールを入れる。
ansible-galaxy collection install community.mysql
- テスト
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
問題なさそう。
- プレイブックの実行
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
良さそう。
ブラウザで確認する。
参考
Ansible Documentation
https://docs.ansible.com/ansible/latest/index.htmlPlaybook の概要
https://docs.ansible.com/ansible/2.9_ja/user_guide/playbooks_intro.htmlAnsible の使い方 | zenn.dev https://zenn.dev/y_mrok/books/ansible-no-tsukaikata/viewer/chapter1
【Ansible】メンテナンスしやすいPlaybookの書き方
https://densan-hoshigumi.com/server/playbook-maintainabilityHow to do mysql_secure_installation via ansible playbook?
https://serverfault.com/questions/1026554/how-to-do-mysql-secure-installation-via-ansible-playbookAnsibleの冪等性とPlaybook
https://dev.classmethod.jp/articles/ansible_playbook_with_idempotence/【Ansible】リポジトリ指定してインストールする MariaDB と phpMyAdmin のプレイブック作成メモ
https://oki2a24.com/2017/05/23/playbook-memo-to-install-mariadb-with-repository-and-phpmyadmin/
おわりに
Ansibleを使ってApache+Tomcat+MySQLの環境を構築した。
MySQLのインストールでめっちゃハマってかなり時間を使ってしまった…。
冪等性を考えて構築するのは難しい、構築したのも保てているか怪しいところだ。
あとはベストプラクティスに沿って、ファイルツリーが作れているかというとこれもまた怪しいところ。
このあたりは何回かインフラを構築する上で学べていければ良いかなと思う。