😨

EC2にgitをインストールして再起動したらサイトが立ち上がらなくなった

2021/09/01に公開

はじめに

はじめまして、メディアエンジン株式会社のナバロです!

弊社で WordPress 環境を立ち上げることがあるのですが、その時に起こった奇妙な出来事を書いていこうと思います。

環境たちあげ

まずいつものように、AWS のコンソールから EC 2を立ち上げます。
今回は WordPress を立ち上げるということで、下記の Bitnami の AMI を使っていました。
https://aws.amazon.com/marketplace/pp/prodview-bzstv3wbn5wkq?ref=cns_1clkPro

立ち上げると、こんな感じで表示されます(IP アドレスはもう閉じているので悪さできないですよ!笑)

インフラ担当ということで、EC2 内で SSL 対応などを一通り終えた所で、開発担当の方に SSH 情報をお渡しして、バトンタッチしました。
無事開発も進み、本番リリースもされて稼働もうまくいってました。

問題発生

ひょんなことで AWS のコンソールを眺めていると EC2 のインスタンスタイプを間違えていたことに気づきます。
今回のサーバーはステージング環境と本番環境の2つを用意していたのですが、インスタンスタイプが逆になってしまっていたようです。
本番サーバーのインスタンスタイプを t3.micro から t3.small に変更することにしました。

本番のインスタンスタイプの変更を行う前に、テストとしてステージング環境で変更が問題ないか試してみました。(今思うといきなり本番でやらなくて本当に良かった・・・

インスタンスタイプの変更方法は下記の通りです

  1. インスタンスを停止
  2. インスタンスタイプを変更
  3. インスタンスを開始

開始されたらサイトが立ち上がっているはずでしたが、なぜか、通常のサイトの代わりに 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 点の問題に切り分けました。

  1. 再起動すると Bitnami の Wordpress と関係ない Apache がシステムの起動時に自動で起動してしまう
  2. 再起動するとシステムの立ち上げに 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 を再起動したら、無事サイトが起動しました!
その後、本番サーバーも気をつけながら同様の作業をし、インスタンスタイプを変更することに成功しました。

おわりに

  • 本番環境でいきなり作業しない
  • インストールは最低限に
  • 表示されたログはちゃんと読みましょう

などと、今回の出来事は個人的に学びが多かったです
少しでも参考になりましたら幸いです。

最後に、弊社ではエンジニアやデザイナーなどの職種で積極的に採用中です!

弊社チームの紹介ページがあるのでぜひ、見に来てください!
https://mediaengine.notion.site/ba128c5708fc480198f5d8c9440a7062

Discussion