どうもなまこです。
本ブログはAWSのEC2をWebサーバーとして運用しています。ブログを書く上でもうそんなにSSHキー接続する必要なんてないなー、と思いながらもふとファイルの内容を編集したいなと思った昨今。SSHキー接続用の秘密鍵(pemファイル)を探してみたら・・・なんと見つからない。。。
バックアップも取っててあんなにわかりやすいところに置いていたのに・・・。1日探しても見つからなかったので諦めることにした。原因は定かではないがクラウドストレージの同期のオンオフ時にやらかしたっぽい。
例えて言うなら職場の工場の鍵を無くしたと言ったところでしょうか。職場に入れなくても工場(ブログ)は動いているのでまあいいかと思いながらも、やっぱりなんかあった時怖いと思い、対処しました。
とにかく無くしたものはどうにもならないので今回対処した方法を備忘録として残しておきます。
同様の例がないか調べる
まず同じように困った人がいないかを調べました。まず公式の見解です。
最初の起動後に SSH キーペアを紛失した場合、Amazon EC2 インスタンスに接続するにはどうすればよいですか?
うーん、なんか難しそうだし、やっぱりインスタンス(ブログ)は停止しないといけなさそう。その他Qiitaなどをみても同様に困っている人はいたので、その中から簡単そうな方法で復旧をしてみました。
起動しているインスタンスからAMIを作成する
冗長化した際の過去の記事でもそうでしたが、インスタンスのコピーを作ることならAMI(Amazon Machine Image)が簡単です。そしてAMIから新しいインスタンスを作成し、その際に新しいキーペアを使用することにしました。
インスタンス自体は動いているのでAMIを使ってスナップショットを取り、イメージを作成していきます。EC2のメニューボードからインスタンス -> イメージを作成したいインスタンスを選択します。上の方のアクションボタンからイメージ -> イメージの作成をクリックすることで作成が可能です。

わかりやすいようにイメージ名に日付を入れておきます。イメージの作成をクリックします。
EC2メニューのイメージの場所にあるAMIに作成したイメージが存在します。起動の青いボタンからインスタンスを起動します。するとEC2のインスタンス作成画面が出てくるため、既存のインスタンスと同スペックのマシンを選択していきます。スペックを決めて起動ボタンを押すと既存のキーペアを使うか新規のキーペアを使うかを聞いてきます。この時に新しいキーペアを作成し、ダウンロードしておきます。これで新しいキーペアを作成することができました。新しいキーペアでインスタンスを起動します。
セキュリティーグループもコピー前のインスタンスと同じにします。
インスタンスを停止してElastic IPを開放する
IPアドレスとドメインがElastic IPで紐づいているため、Elastic IPを開放します。Elastic IPの開放はインスタンスを停止しないといけないのでインスタンスを停止します。この間ブログサイトにアクセスできなくなりますが致し方なし。
新しいインスタンスにElastic IPを関連付けする
Elastic IP -> アクション -> アドレスの関連付け から上のAMIから作成したインスタンスとElastic IPを関連付けます。

これでこれまで通りブログにアクセスできる・・・あれ?できない。セキュリティグループもあってるはずなのになぜ?
ロードバランサーのターゲットを変更する
ロードバランサーのターゲットグループが古いインスタンスのままでした。
EC2の画面からロードバランシング -> ターゲットグループ -> ターゲットのタブを選択し、編集ボタンからターゲットの登録および登録解除の画面から新しく作成したインスタンスをターゲットに登録します。

ターゲットには最低でも1つは登録している必要があるので新しいインスタンスを登録してから、古いインスタンスの登録を解除するようにします。
これで元通りブログにアクセスすることができました!
まとめ
PEMファイルを無くしてもなんとかなりましたが、PEMファイルは厳重に管理しておくべきです。OSの自動バックアップを過信せずに厳重に何重にもファイル管理すべきでした。あとここには書いていませんが監視用のCloud Watchも設定しなおさなければならず、上記の設定含めて結構面倒でした。
- PEMファイルは厳重に管理する
- もしPEMファイルを無くした場合はAMIでイメージを作成し、新たにインスタンスを作成する
- Elastic IPを新しいインスタンスに関連付けさせる
- ロードバランサーのターゲットを変更する
ともあれブログは続けられそうでよかった。。。