基本 ここの通りに作業。
元のPVのインスタンスのスナップショット作成して、それを1cのアベイラビリティゾーンでボリューム化。面倒なことに元のインスタンスは1bにあるのだが、ここだとHVMのインスタンスが作れないので。1cにHVMのインスタンスを作成して、アタッチするとエラー。AWSマーケットプレイス起源のボリュームはルートボリュームとしてしかアタッチ出来ない模様。
1bのゾーンに元と同じサイズのボリュームを作成して、元インスタンスにアタッチ。nginxやPerconaのサービスを落とした上でdd使って丸ごとディスクコピー。このボリュームからスナップショット経由で1cにボリュームを作成し、後は先に挙げた参考ページの手順で。手順の中でchrootしたまでラベル変更してますがエラーになったのでchroot抜けてから実施した。
で、やっとHVMのAMI化して無事に起動。自宅からのみ接続できるようにして動作確認するものの、データベース接続エラーとの文字がでかでかとw。
どうもPerconaが上がっていない。ログにエラー。メッセージの感じだとデータベースファイル壊れたかなと。
逆の手順でHVMインスタンスのボリュームを1bに持って行って、元インスタンスにマウントして/var/lib/mysqlをrsyncして、またAMI化して新インスタンス作成。今度はPerconaも立ち上がって使える。
ElasticIPsの付替えをしようとしたら、つけ先インスタンスに新インスタンスが出てこない。どうやらEC2で取得したグローバルIPはVPCで使うことは出来ないらしい。新しくVPC側でグローバルIPを取得して割り当てた。Route53のレコードも新アドレスに変更。セキュリティグループも共用出来無いようなので同じ内容を記載。
作業で使ったインタンス、ボリューム、スナップショット、AMIを整理してサーバ側完了。
サーバ側以外に何の作業があるかというと、AWSにセンサーデータや水槽画像をアップしている自宅のArduinoマイコン2つの変更。通信先が名前じゃなくてIPアドレスなんだよね。名前を引くコードが載るようなメモリがないのです。2つのコードを変更して再コンパイルしてマイコンに書き込んで完了。
あとは、明日あたりに旧サーバを停止してOKです。リザーブドインスタンスは先ほど買いました。ヘビーのt2.micro 1c Linux/Unixで1年。
今回の作業、何がツラかったかといえばアベイラビリティゾーンが異なるので、スナップショットやボリューム作成などの時間のかかる操作が何度もあったことかな。