はじめに

前回までにWEBサーバーとデータベースそしてPHPが動く様にしました。
今回はいよいよ ドメインの向き先を aws へ変更して WordPress を稼働させます。

本日の手順

  1. さくらインターネットで WordPress の既存データをエクスポート
  2. Elastic IP(静的IP) の割り当てとインスタンスへの関連づけ
  3. Route53 でドメインのDNSを切り替え
  4. HTTPSの設定(任意)
  5. WordPress のインストールとインポート

試行錯誤してこの手順になりました。一番簡単だと思っていた WordPress のデータ移行、主にメディアファイルの取り込みに失敗しないための順番になります。移行作業に利用したプラグインはデフォルトの WordPress のものを利用しました。All-in-one WP Migration も検討しましたが無料で取り込めるデータ容量上限が350Mだったのと、そもそも環境の影響?で設定をあれこれ変更しても8M までしかアップロード可能にならなかたためです。

1.さくらインターネットで既存データをエクスポートする

aws にドメインを関連づけてしまうと下記の問題が起こるため先にこちらのドメインを変更します。

  • ドメインを aws への移行後に元のページで確認したいことがあっても参照できなくなってしまう
  • メディアファイルを取得する時に参照出来なくなる(移行順序によります)

さくらのレンタルサーバーの場合は無料でさくらのサブドメインが利用できるので今回はそれにします。

サブドメインでHTTPSが利用できないかつ、管理画面を強制的にHTTPに飛ばす設定にしている場合は管理画面が開けなくなるので解除しておきます。(wp-config.php FORCE_SSL_ADMIN)

新しいドメインのWPが見られることを確認したら wp-admin の[ツール] – [エクスポート]を開きます。

ここでのポイントは固定ページ、投稿、メディアを別々にエクスポートすることです。

より多くの項目が表示される環境もあると思いますが僕が試した感じでは全て別々にエクスポートするのがおすすめです。しかしエクスポートするだけでは何の問題もないのであらゆるパタンのデータをエクスポートしておくのもいいかもしれません。

僕の環境だけかもしれませんが「すべてのコンテンツ」でエクスポートしたデータは取り込みの際にメディアデータの取り込みに失敗してしまいました。理由はわかりませんが「メディア」でエクスポートしたデータはドメインの向き先を aws へ変更した後でも問題なくインポート可能でした。

注)ドメインの向き先を aws へ変更する前であれば「すべてのコンテンツ」でエクスポートしたデータも問題なく取り込むことができますが、その手順で取り込むと投稿内の画像リンクがその時点のホスト名になってしまいます。

2.Elastic IP の割り当てとインスタンスへの関連づけ

ここでは静的IPを発行してEC2のインスタンスへ関連づけます。こうすることで今後EC2インスタンスを停止、起動してもIPアドレスが変わらなくなります。

Elastic IP の割り当て

1.EC2のコンソール画面左メニューから 「ネットワーク&セキュリティー」-「 Elastic IP」 を選択します

aws-ec2-eip_1-1024x590.png

2.「Elastic IP アドレスの割り当て」を選択します

aws-ec2-eip_2-1024x159.png

3.「Amazon の IPv4 アドレスプール」を選択します(既に選択されているはず)。これを選択することで Amazon が所有している IP アドレスから1つ割り当ててもらうことになります。他の方法としては既に保有しているものを持ち込んだりすることも可能らしいです

aws-ec2-eip_3-1024x698.png

4.「割り当て」を選択すると即時にパブリックIPアドレスが割り当てられます

aws-ec2-eip_4-1024x278.png

5.割り当てられたIPアドレスにチェックを入れ「アクション」-「Elastic IP アドレスの関連づけ」を選択します

6.リソースタイプ:インスタンスが選択されていることを確認し、インスタンスのテキストボックスで関連づけるインスタンスを選択します。「関連づけるプライベートIPアドレス」は選択しないで構いません

aws-ec2-eip_6-1024x904.png

7.「関連づける」を選択します

aws-ec2-eip_7-1024x666.png

これだけでパブリックIPアドレスの割り当てから関連付けまで完成です。

割り当てられたIPアドレス(またはパブリックDNS)をブラウザで入力してみてください。インスタンスに配置されているアプリケーションが表示されるはずです。

また今後インスタンスを停止、そして起動してもIPアドレスは変わりません。

EC2インスタンスの詳細画面のパブリックIP(またはパブリックDNS)も割り当てられたものに変わってるのが確認できると思います。

注意

Elastic IP の割り当ては 1つだけ無料で行えますが、

割り当てれらたIPがどのインスタンスにも関連づけられていなかったり、関連づけたインスタンスが停止している場合は $0.005/時間 で課金されますのでご注意を。

EIPを発行してEC2インスタンスへ関連づけないまま一月放置すると下記のコストがかかってしまいます ^^;

0.005 × 730 = $3.65/月

0.005USD: 実行中のインスタンスと関連付けられていない Elastic IP アドレス/時間あたり(比例計算)

Amazon EC2 オンデマンド料金

3.Route53 でドメインのDNSを切り替える

続けてドメインの向き先を変更します。

ホストゾーンを作成する

ホストゾーンと呼ばれるルーティング情報を定義するレコードのコンテナを作成します。

aws コンソールで route53 を検索、route53ダッシュボードから「ホストゾーンの作成」を選択します。

ドメイン名を入力し、タイプにパブリックホストゾーンを選択してホストゾーンを作成します。

ホストゾーンが作成される時に自動で2つのレコード(NS, SOA)が作成されます。
後にドメインのDNSを変更する際はNSレコードのトラフィックルーティング先に記載のある4つのDNSを登録します。

Aレコードを作成します

Aレコード(Addressレコード):ドメインとIPの関連づけを定義するレコード

「レコードを作成」から「シンプルルーティング」を選択します。

「シンプルなレコードを定義」を選択します。

ここにルーティング先のIPアドレスを登録します。

サブドメインは今回登録しないのでレコード名は空欄のまま、トラフィックのルーティング先に「レコードタイプに応じたIPアドレスまたは別の値」を選択します。

するとテキストエリアが表示されるのでそこへEC2インスタンスのIPアドレスを入力します。

このレコードはAレコード(Addressレコード)にするのでレコードタイプは A のままで「シンプルなレコードを定義」を選択して定義を完了します。

定義したAレコードに間違いがないことを確認して「レコードを作成」します。

Aレコードが作成されました。

これで、今回割り当てられた 4つの DNS へ knucklepunch.net への問い合わせがあった場合 Aレコードで定義した IPアドレス が返却されるようになりました。

ただし現状はまだ お名前.com のドメイン管理にて knucklepunch.net の DNS はさくらインタネットのままになっているためブラウザでこのドメインを入力してもさくらインターネットへ飛んでいきます。

DNSを変更します

お名前.com にログインして「メニュー一覧」から「ネームサーバーの変更」を選択します。

変更するドメインにチェックを入れて「ネームサーバーの選択」から「その他」のタブを選択してROUTE53のホストゾーンの詳細に記載のある4つのDNS名を全て登録して確認ボタンを押せばDNSの変更が完了です。

お名前.com には 切り替えられるのに 24時間から72時間 を要するとありますが、僕の場合、部分的には(古いのを指したり新しいのになったり)数分後には切り替えが確認できました。

4.HTTPSの設定

aws の チュートリアル 通りにコピペして進んだだけで結構簡単に設定できました。

5.aws にWordPress をインストールしてデータをインポート

基本的に下記の手順で進めれば滞りなく進めると思います。

また、テーマなどは引き継がれないため別途設定してください。

  1. WordPressをインストール
  2. メディアファイルをインポート(「添付ファイルも一緒にダウンロード」にチェックを入れます)
  3. 固定ページをインポート(「添付ファイルも一緒にダウンロード」にチェックを入れます)
  4. 投稿をインポート(「添付ファイルも一緒にダウンロード」にチェックを入れます)
注)2 でメディアのインポートは成功しますが、実際は足りません。

管理画面のメディアにあるファイルは全てインポートされるのですが、実はこれ以外にも画像が存在します。それは各画像の別サイズ版です 例)image_1024x768.jpg など。

今回どうしてもこれを自動でインポートさせる手段を見つけることができなかったので下記のコマンドで手動でインポートしました。

元のサーバー: orgsvr
元のサーバーのユーザー: orgusr
$ sudo scp -r orgusr@orgsvr:/xxx/wp-conent/uploads/* /xxx/wp-content/uploads/
$ sudo chown apache:apache -R /xxx/wp-content/uploads/

上記のようにインポートするのが僕が試した中ではうまく行くパターンでしたが、環境やドメイン移行のタイミングなどに関連してくるため万能の方法ではありません。

以下、僕がWordPressのインポートでつまづいたことです。

WrodPress純正のデータ移行ツールの場合

  • ドメインを移行する前にデータをインポートすると自分のドメイン下にある画像などへのリンクもドメインを設定する前のままになってしまう(設定画面でWordPressのURLを変更しても変わりませんでした)

以下、前提は元のWordPressでデータをエクスポートする際、設定からWordPressのURLを別のドメインへ変更してからエクスポートしたデータでのインポートのお話です。

  • ドメインを変更してからデータをインポートする場合、「全てのデータ」でエクスポートしたファイルのメディアの取り込みが失敗します。
    メディアファイルのダウンロードリンクに変更前のドメインが記載されているので aws へメデイアをダウンロードしに来ているみたいです。
  • WordPressでデータをエクスポートする際に「メディア」だけでエクスポートしたものは元のWordPressのサーバから問題なくデータがダウンロードできました。

All-in-one WP Migrationで移行した場合

  • データのエクスポートは問題なく行えました
  • 無料で取り込めるデータの上限は 350M とのことです
  • そもそも PHP のデフォルトのファイルアップロードの上限が 2M に設定されている
  • PHP のファイルアップロードの上限を 350M に変更しましたがなぜか All-in-one WP Migration のアップロード画面では 8M が上限になってしまう
  • どうしてもファイルアップロードの上限が変更できない人向けにツールも公開されていましたが今回は試しませんでした

シリーズリンク

#1 サーバー構築編
#2 WEBサーバー構築編
#3 DB構築編
#4 ドメインの設定とWrodPress稼働編