EC2にgitをインストールして再起動したらサイトが立ち上がらなくなった
はじめに
はじめまして、メディアエンジン株式会社のナバロです!
弊社で WordPress 環境を立ち上げることがあるのですが、その時に起こった奇妙な出来事を書いていこうと思います。
環境たちあげ
まずいつものように、AWS のコンソールから EC 2を立ち上げます。
今回は WordPress を立ち上げるということで、下記の Bitnami の AMI を使っていました。
立ち上げると、こんな感じで表示されます(IP アドレスはもう閉じているので悪さできないですよ!笑)
インフラ担当ということで、EC2 内で SSL 対応などを一通り終えた所で、開発担当の方に SSH 情報をお渡しして、バトンタッチしました。
無事開発も進み、本番リリースもされて稼働もうまくいってました。
問題発生
ひょんなことで AWS のコンソールを眺めていると EC2 のインスタンスタイプを間違えていたことに気づきます。
今回のサーバーはステージング環境と本番環境の2つを用意していたのですが、インスタンスタイプが逆になってしまっていたようです。
本番サーバーのインスタンスタイプを t3.micro から t3.small に変更することにしました。
本番のインスタンスタイプの変更を行う前に、テストとしてステージング環境で変更が問題ないか試してみました。(今思うといきなり本番でやらなくて本当に良かった・・・)
インスタンスタイプの変更方法は下記の通りです
- インスタンスを停止
- インスタンスタイプを変更
- インスタンスを開始
開始されたらサイトが立ち上がっているはずでしたが、なぜか、通常のサイトの代わりに Apache のデフォルトページが起動していました。
すぐさま SSH して、WordPress のサービスをリスタートしようと思いましたが、失敗しました。
# とりあえずリスタートしてみる
$ sudo /opt/bitnami/ctlscript.sh restart
Starting services..
System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down
# ステータスを確認する
$ sudo /opt/bitnami/ctlscript.sh status
Cannot find any running daemon to contact. If it is running, make sure you are pointing to the right pid file (/var/run/gonit.pid)
System has not been booted with systemd as init system (PID 1). Can't operate.
こちらのエラーで PID 1 で systemd が起動していないと言われたので確認してみました。
$ ps -p 1
PID TTY TIME CMD
1 ? 00:00:00 init
どうやら SysVinit で起動されているようです。
ちなみに他に正常に起動しているサイトは systemd
が表示されています
$ ps -p 1
PID TTY TIME CMD
1 ? 00:00:02 systemd
問題点を整理したところ。2 点の問題に切り分けました。
- 再起動すると Bitnami の Wordpress と関係ない Apache がシステムの起動時に自動で起動してしまう
- 再起動するとシステムの立ち上げに systemd ではなく SysVinit が使われてしまう
原因
原因は最初は全くわからず、Bitnami の AMI が原因かと思いましたがそんなことはなかったです笑(ちゃんと自分を疑いましょう)
手順としては、サーバーセットアップの工程と、開発の工程を見直して怪しいところがないか検証しました。
サーバーセットアップの工程が終わった段階で、再起動しても問題は発見されませんでした。
それもそのはず、サーバーのセットアップ段階では、Apache のインストールや、SysVinit の導入などをしていないからです。
ただし、開発担当の方がやるとも考えづらくサーバーに実行されたコマンドを見つめていました。
$ history
34 sudo apt-get install git-all
git-all
ってなんだ・・・?
通常だったら git
だけインストールすれば良いはず・・・
調べたところ、git-all
をインストールすると関連のパッケージがたくさんインストールされてしまいます。
その関連パッケージに Apache と SysVinit がありました。
試しに、テスト環境を新しく立ち上げて sudo apt-get install git-all
を実行してみたところ、systemd 関連が削除されますと確認されるようになってました。
The following packages were automatically installed and are no longer required:
libargon2-1 libcryptsetup12 systemd
Use 'sudo apt autoremove' to remove them.
The following packages will be REMOVED:
libpam-systemd systemd-sysv
また、このタイミングで Apache もインストールされると表示されていたので、 まずい! と気づかないと行けなかったのかもしれません。
もしくは、パッケージのインストールの際は分かる範囲で最低限にしておくのが良さそうですね!
対応方法
2 つの問題は一つの動作から起きてしまいましたが、別々に解決しました。
再起動すると Bitnami の Wordpress と関係ない Apache がシステムの起動時に自動で起動してしまう
まずはこちら、git-all
のインストールの際に一緒にインストールされてしまった Apache を停止して削除してしまいます。
$ systemctl list-unit-files --type=service # 新しいApacheが自動起動されているのを確認
$ sudo service apache2 status
$ sudo service apache2 stop
$ sudo systemctl disable apache2
$ sudo apt-get remove --purge apache2
再起動するとシステムの立ち上げに systemd ではなく SysVinit が使われてしまう
こちらは、削除されてしまった systemd のパッケージを改めてインストールすることで対処しました。
インストールして再起動するだけで、SysVinit から systemd に変わるようで楽でした。
$ sudo apt-get install systemd-sysv libpam-systemd
対応後に EC2 を再起動したら、無事サイトが起動しました!
その後、本番サーバーも気をつけながら同様の作業をし、インスタンスタイプを変更することに成功しました。
おわりに
- 本番環境でいきなり作業しない
- インストールは最低限に
- 表示されたログはちゃんと読みましょう
などと、今回の出来事は個人的に学びが多かったです
少しでも参考になりましたら幸いです。
最後に、弊社ではエンジニアやデザイナーなどの職種で積極的に採用中です!
弊社チームの紹介ページがあるのでぜひ、見に来てください!
Discussion