AMIMOTO (PVM版)からAMIMOTO (HVM版)へのインスタンス移行方法

AMIMOTO(PVM版)で作成したインスタンスをAWS EC2の新しいインスタンスT2ファミリー(t2.micro、t2.small、t2.medium)に対応したAMIMOTO (HVM版)に移行するための手順です。
なお、PVM版とHVM版とではAMI IDが異なるためEC2ダッシュボードから行える「インスタンスタイプ」の変更では対応出来ませんのでご注意ください。

1. AMIMOTO (HVM版)でインスタンスを作成

「使い方」 を参考に AMIMOTO (HVM版) で新しいインスタンスを作成します。
T2ファミリー(t2.micro、t2.small、t2.medium)を利用する場合は VPC 環境下にインスタンスを作成する必要があります。

WordPress powered by AMIMOTO (HVM) on AWS Marketplace

インスタンス起動後ブラウザから Public IP でアクセスしてみて WordPressのインストール画面が確認できれば起動は完了です。
ただし、この時点では WordPressのインストールは行わないでください。

2. 新しいインスタンスにEIP付与

新しいインスタンスにSSHでアクセスする必要があるため先にEIPを付与しておきます。
EIP used in : では 「VPC」 を選択してください。

EIP-VPC

3. 必要に応じて旧インスタンスと同じ設定を行う

root ユーザのパスワードを変更や Nginx ユーザーの作成が必要な場合はこの段階で行ってください。

また、旧インスタンスで WordPress をバーチャルホストで複数インストールしていた場合は wp-setup コマンドで予め新しいインスタンスにも同じバーチャルホストを作成しておいてください。

マルチサイトの WordPress をご利用の場合、新しいインスタンスでも nginx の設定ファイルの変更が必要ですので、この段階で行っておいてください。

ここまでが新しいインスタンスでの下準備となります。

4. 旧インスタンスでデータベースを書き出す

作業前に旧インスタンスのスナップショットを取っておく事をおすすめします。

旧インスタンスに ssh で接続し、WordPress をインストールしているディレクトリに移動後、
wp db export でデータベースを書き出します。

$ cd /var/www/vhosts/{Instance ID or Virturl Host Domain }/
$ wp db export

これでWordPressと同階層に sql ファイルが書き出されます。

5. rsync によるデータの移行

予め新しいインスタンスの /home/ec2-user/ に旧インスタンスの .pem ファイルをコピーしておきます(SFTPクライアントでコピーできます)。

鍵ファイルのコピーが終わったら新しいインスタンスに SSHで接続します。

次に新しいインスタンスの wp-config.php を旧インスタンスのファイルで上書きされないように ec2-user のルートディレクトリに移動させておきます。

$ cp /var/www/vhosts/{ Instance ID or Virturl Host Domain }/wp-config.php ~/

次に rsync コマンドで旧インスタンスのデータを新しいインスタンスにコピーします。

$ sudo rsync -avz --delete -e 'ssh -i hoge.pem' ec2-user@{old_server ip}:/var/www/vhosts/{old_instance id}/ /var/www/vhosts/{new_instance id}/

old_server ip には旧インスタンスのIPアドレスを、hoge.pem は先ほどコピーした旧インスタンスの .pem ファイルです。
old_instance id には旧インスタンスのWordPressディレクトリ(インスタンス名またはバーチャルホスト名を、new_instance id には新しいインスタンスのWordPressディレクトリ(インスタンス名またはバーチャルホスト名を入れてください。
(バーチャルホストの場合はこの部分が同一になるように注意してください。)

ファイルのコピーが始まり、

sent 444747 bytes  received 123553640 bytes  9919870.96 bytes/sec
total size is 184523184  speedup is 1.49

のような表示が出たら完了です。

このとき、予め書き出しておいた sqlファイルもコピーされますので、 /var/www/vhosts/{new_instance id}/ にコピーされていることを確認してください。

最後に退避させた wp-config.php を戻します。

$ sudo cp ~/wp-config.php /var/www/vhosts/{new_instance id}/

6. 新インスタンスへのデータベースのインポート

新しいインスタンスでデータベースのインポートを行います。
WordPressのインストールディレクトリまで移動し、

$ wp db import {wordpress.sql}

を実行します。wordpress.sql は書き出した sqlファイルの名前になります。

データベースのインポート完了後、バーチャルホストや独自ドメインを割り当てていた場合でも、お使いのマシンの hosts ファイルに新しいIPアドレスとホスト名(ドメイン)を書き加えることでDNS切り替え前に移行の確認が出来ます。

確認できたら新しいインスタンスにある sqlファイルなど不要なデータを削除しましょう。

※バーチャルホストで複数の WordPress をインストールしていた場合は4〜6の手順を繰り返してください。

7. DNSの書き換え

hosts ファイル書き換えで新インスタンスでの表示が確認できたらネームサーバーの切り替えを行います。

ドメインのAレコードに記載されているIPアドレスを新しいインスタンスのIPアドレスに置き換えます。
ネームサーバーの設定が切り替わったかどうかは

$ dig example.com

で確認できます。

ネームサーバーの切り替えが確認できたら書き換えた hosts ファイルは元に戻しましょう。

8. 旧インスタンスの停止など

ネームサーバーが切り替わったら、旧インスタンスを Terminate します。
廃棄するインスタンスを選択し、Actionメニューから「Terminate」を選択します。

Terminate

ダイアログで旧インスタンスに紐付けていたIPアドレスを破棄するチェックボタンがあるので、忘れずにチェックして破棄しましょう。
※Elastic IPsで取得したIPアドレスはサーバーインスタンスに紐付けないと課金されます(月5$)。

Terminate-EIP

旧インスタンスのスナップショットも必要なければ削除しましょう。