[WordPress EC2 網元]インスタンスがReboot出来ない時の対応
WordPressをAmazon EC2でホスティングしています。突然社員から、SSHで接続出来なくなりましたと言われました。トラブル発生です…
ssh_exchange_identification: Connection closed by remote host
こんなエラーがでて怒られます。これについてはどうやらssh接続元のIPアドレスが弾かれているようで、別回線からアクセスを試みたら問題なく接続出来ました。また同じような事が起こると困るのでこちらを参照に修正。
ssh_exchange_identification: Connection closed by remote host
/etc/hosts.allow
まさかね。
これじゃないよね。でも何も書いてないよな。このページを参考にして「sshd:all」と一行追加。
よーし、ssh接続出来たと思ったのですが、インスタンスのRebootをしてみると、なにやらちゃんと起動出来ない。タイムアウトしちゃう。もうこの辺からパニックですよ。ヤバい…復活出来ないんじゃ…というね。
どこで止まるかというと、インスタンスのStatus checkです。Instance Status Checksにこんなことを言われます。エラーがでる(涙
These checks monitor your software and network configuration for this instance.
とりあえず、ということで現状のファイルをスナップショットにとっておきます。
Volumeから、そのReboot出来なくなったインスタンスのVolumeを選び、Create snapshotを選択。これで、適切に名前をつけて保存しておきましょう。データだけは守れます。
次に、インスタンスを作りなおしてみましょう。先ほど作ったスナップショットを選択してCreate Imageを選びます。それによってAMIを作るんですね。名前は適当につけて下さい。
何度もやってハマったポイント1:Architectureは適切に選択しましょう
このパターンでは網元というAMIを使っています。
Architectureはx86_64を選択。Kernel IDは、Reboot出来なくなってしまったインスタンスと同じ物を選択してください。これで作成。
AMIからインスタンスをLaunch
次に、AMIのページへ移動して、先ほど作った「適切な名前(英字じゃないと多分ダメだと思う)」のAMIにチェックを入れて、Launchボタンを押します。右カラム画面左上あたりにあります。これでOK。
あれ?参照しているDBが違う?
EC2初心者だからでしょうか、作ったSnapshotを直接参照してくれるように作れると思うのですが、うまく行かず、
/var/www/vhosts/
の下に、元のフォルダ(つまり、Reboot出来なくなってしまったインスタンスで作られていたフォルダ)と、新しいフォルダが出来ちゃっていました。
/var/www/vhosts/i-元のフォルダ/var/www/vhosts/i-新しいフォルダ
こんな感じで。そして、そのインスタンスのPublic DNS(URL)にアクセスすると、新しい方を参照してしまうので、Wordpressのインストール画面に富んじゃうんですよね。こりゃあかん。ということで、
- 元のフォルダから、新しいフォルダにファイルをコピー
- wp-config.phpを書き換えて、元のインスタンスで使っていたDBを参照するようにします
1については
¥cp /var/www/vhosts/i-元のフォルダ/wp-content/* /var/www/vhosts/i-新しいフォルダ/wp-content/
というコマンドでwp-contentの中身を全部コピーします。
後は /var/www/vhosts/i-元のフォルダ/wp-config.php の中身をまるっとコピーしてしまえば完了。
もしかすると、wp-contentの中身の所有ユーザがおかしくなってるかもしれませんので、最後に
chown -Rf nginx:nginx /var/www/vhosts/i-新しいフォルダ
としておけば解決すると思います。
ElasticIPの紐付けを
最後に、当初利用していたElasticIPの設定を、立ち上げたインスタンスに紐付ければ作業完了。お疲れ様でした。
アドバイス求む
なんか変な感じがするので、もう少しスマートにやれる方法がある気がします。知ってたら教えて下さい…