EC2がRoute info failedで突然繋がらなくなった場合の対処
0. はじめに
ブログにアクセスできなかった障害ですが、先ほどサーバの復旧が完了しました。
昨日からブログが見れなかったようで、訪問された方にはご迷惑をお掛けしました。先ほど復旧が完了しました。
同じような現象でお困りの方へ参考になればと、対処方法を書かせて頂きます。
1. 環境
- OS: Ubuntu14.04
2. 現象
本日ブログにアクセスした際、503エラーで画面が真っ白になっているのに気付き、何事かとAWSを確認しました。
すると、ELBのヘルスチェックで、インスタンスからの応答がないため、ステータスがOutOfServiceになっていました。ところが、AWS上ではインスタンス自体は正常になっていたため、どうしたものかと色々調べていました。
セキュリティグループをいじって直接インスタンスにアクセスしたところ、確かにpingやsshが通らないことを確認したため、インスタンスを再起動しました(これがいけなかった)。
その後、何度起動してもインスタンスステータスのチェックで引っ掛かるようになりました。シスログを見ると、以下のエラーが吐かれていました。
ci-info: +++++++++++++++++++++++Net device info++++++++++++++++++++++++
ci-info: +--------+-------+-----------+-----------+-------------------+
ci-info: | Device | Up | Address | Mask | Hw-Address |
ci-info: +--------+-------+-----------+-----------+-------------------+
ci-info: | lo | True | 127.0.0.1 | 255.0.0.0 | . |
ci-info: | eth0 | False | . | . | xx:xx:xx:xx:xx:xx |
ci-info: +--------+-------+-----------+-----------+-------------------+
ci-info: !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!Route info failed!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2016-09-03 13:01:30,245 - url_helper.py[WARNING]: Calling 'http://169.254.169.254/2009-04-04/meta-data/instance-id' failed [0/120s]: request error [HTTPConnectionPool(host='169.254.169.254', port=80): Max retries exceeded with url: /2009-04-04/meta-data/instance-id (Caused by <class 'socket.error'>: [Errno 101] Network is unreachable)]
調べていると、Ubuntu14.04でのcloud-initのバグらしいことが判明。
データの救出とサーバの復旧に取り掛かります。
3. 対処
とりあえず前述の記事を参考に、AMIを作って別インスタンスを立てましたが、同じく起動せず。
インスタンスが立たない→アクセス出来ない→設定を変えられない
という状況のため、以下の手順でデータの救出と設定変更を試みました。
- 一旦新しくUbuntuインスタンスを立てる
- 現行のインスタンスからボリュームをデタッチ
- 2のボリュームを、1で立てたインスタンスにアタッチ
- インスタンスを再起動してSSHログイン
- 4でアタッチしたボリュームを適当なディレクトリにマウント
- /etc/network/interfaces へ以下を追記
auto eth0
iface eth0 inet dhcp
- 以下をコメントアウト
source /etc/network/interfaces.d/*.cfg
- インスタンスを停止
- ボリュームをデタッチし、もとのインスタンスにルートボリュームでアタッチ(Ubuntuは
/dev/sda1
) - インスタンスを再起動
これで、元の環境を復元して、ネットワークの設定も変更することが出来ました。
4. おわりに
ブログ見れなくなったのに気付いた時は焦りました笑
でもまあこういった障害があるととても勉強になるので、良い機会だったかもしれません。