自作FIREアプリのデプロイで起きた3つの障害と原因|pm2・fail2ban・ファイアウォール

その他

結論:自作の「FIREトラッカー」に新機能を追加して本番環境にデプロイしたところ、pm2のプロセスクラッシュ、fail2banによる自己IPのBAN、クラウド側のファイアウォール設定という3つの問題が同時に発生しました。個人開発で本番障害に対応した際の記録です。

FIREトラッカーに機能を追加した

FIRE健康診断(自作のFIRE達成度シミュレーター)に、以下の機能を追加しました。

  • JPX公式のJ-Quants APIで国内株、Yahoo Financeの非公式APIで米国株の価格と円換算を自動取得
  • 配当金ベースの不労所得予測機能(成長率スライダーでシミュレーション、Barista FIREの想定収入とも連動)
  • 目標年齢でFIREするために必要な支出削減・積立額を自動算出するアドバイス機能

あわせてGoogle Analytics(GA4)も導入しましたが、新しいサーバーのDNS設定が完了しておらず、計測が正しく動いていませんでした。

本番デプロイで3つの障害が同時に発生した

機能追加後、本番サーバーにデプロイしたところ、画面が「読み込み中」のまま止まってしまいました。

調べたところ、Node.jsの管理ツールpm2のプロセスがクラッシュしていました。再起動しようとSSH接続を試みましたが、今度は接続自体ができません。

設定はあっているはず。。。

原因は、ログインを何度か間違えたことで、サーバーの防御システム「fail2ban」が自分自身のIPアドレスを不正アクセスとみなしてBAN(遮断)していたことでした。

以下のコマンドをroot権限のユーザーで実行することで解除できます。

fail2ban-client set sshd unbanip <あなたのIP>

IP制限を解除してブラウザをリロードしましたが、まだ外部からアクセスできません。原因はクラウド側の「セキュリティグループ(ファイアウォール)」の設定で、HTTP/HTTPSのポートが閉じられていたことでした。

  1. pm2のプロセスクラッシュ
  2. fail2banによる自己IPのBAN
  3. クラウド側のファイアウォール設定ミス

3つはそれぞれ独立した原因でしたが、連鎖するように同時に発生したため、1つずつ切り分けて解決する必要がありました。

まとめ

今回のトラブルで、原因を切り分けて対応する経験が積めました。個人開発では、コードを書く力だけでなく、こうした運用トラブルに一人で対応する力も必要になります。

コメント

タイトルとURLをコピーしました