さくらレンタルサーバのWordPressをAWSに移行してみた

## はじめに
- [前回](https://qiita.com/tttmatsuo/items/a4d7d3785c65f46b3da8)は、AWSのアカウントを再登録し、無料利用枠を使うことができるようになるところまで行いました。
- そこで、今回は無料利用枠内でできる``WordPressのチュートリアル``を行います。また、この機会を利用して、就活のために作成した``さくらレンタルサーバ``上のポートフォリオを移行してみました。

## 目次
1. さくらサーバからデータを取得
2. AMIのWordPressを利用してEC2を構築
3. WordPressにログイン
4. EC2にWordPressのテーマデータをアップロード
5. WordPressにテーマが追加されているか確認

## 1. さくらサーバからデータを取得
- [WordPressのサイトを別のサーバーに移行する方法【初心者向け】](https://techacademy.jp/magazine/7859)の「WordPressのエクスポート・インポートを使用する方法」を参考に移行しようとしました。しかし、元となる自作のカスタムテーマの移行ができませんでした。そのため、そのテーマのみ``手動``で移行しました。
- さくらレンタルサーバ上のテーマを``sftp``コマンドを利用してローカルに取得します。

### 1.1さくらサーバにログイン
まず、sftpコマンドに必要なさくらサーバの情報を取得します。
さくらサーバにログインし、``FTPサーバ``と``FTPアカウント``を確認します。

### 1.2 ターミナルからさくらレンタルサーバへ接続
ターミナルを起動し、sshで接続できることを確認します。
``ssh [アカウント名]@[ドメイン名]``コマンドで実行します。途中パスワードを聞かれるので、入力します。

```
% ssh [アカウント名]@[ドメイン名].sakura.ne.jp
The authenticity of host 'xxxxxxxxxx.sakura.ne.jp (219.94.192.65)' can't be established.
ECDSA key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'xxxxxxxxx.sakura.ne.jp' (ECDSA) to the list of known hosts.
xxxxxxxx@xxxxxxxxxxx.sakura.ne.jp's password: 
FreeBSD 9.1-RELEASE-p24 (SAKURA17) #0: Thu Feb  5 10:03:29 JST 2015

Welcome to FreeBSD!
```
無事接続できました。以下の記事を参考にしました。

- [さくらレンタルサーバーにSSH＆公開鍵で接続してみよう！
](http://vdeep.net/sakura-ssh)
- [インフラエンジニアじゃなくても押さえておきたいSSHの基礎知識](https://qiita.com/tag1216/items/5d06bad7468f731f590e)


> ECDSA key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Are you sure you want to continue connecting(yes/no)?

途中、上記の質問が出てきました。
こちらは、SSHクライアントからSSHサーバへ最初に接続する際に出てくるみたいです。

接続先のサーバが正しいものか確認されます。そこで、yesを選択すると、``fingerprint``(IPアドレス、鍵の暗号方式、公開鍵)が~/.ssh/known_hostsへ保存されます。一度保存すると以後、この質問は聞かれません。
保存されている公開鍵と、次回以降に取得する公開鍵が一致しないとアラートが出ます。``なりすまし防止機能``の役割があります。

### 1.3 SFTPコマンドを利用してデータを取得
``sftp``コマンドを利用して、サーバのデータを取得します。
まず取得したいデータが存在するディレクトリまで移動します。その後、``get``コマンドを利用してデータを取得します。

```
% sftp [アカウント名]@[ドメイン名].sakura.ne.jp
Connected to [アカウント名]@[ドメイン名].sakura.ne.jp.
sftp> cd www
sftp> get -r myportfolio
```

無事さくらサーバのWordPressの自作テーマのデータを取得できました。

#### SFTPコマンド
> ftpコマンドのように対話的なファイル転送をするプログラムで、SSHで暗号化された通信経路でファイル転送を行います。
- [Linux入門 sftp - 安全なファイル転送 - Linuxコマンド](https://webkaru.net/linux/sftp-command/)

## 2. AMIのWordPressを利用してEC2を構築
- ここからは、AWSの[WordPressのチュートリアル](https://aws.amazon.com/jp/getting-started/tutorials/launch-a-wordpress-website/)を中心に進めていきます。
- AMIのWordPressを元にEC2を構築するところまで行います。

### 2.1 EC2ダッシュボードからインスタンスカテゴリへ遷移
AWSマネジメントコンソールにログインし、検索エリアで「EC2」と入力し選択すると、
![スクリーンショット 2020-05-02 11.55.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/572604/0b83c0be-be38-15db-172f-bbb2aa71c26f.png)

EC2ダッシュボードへ遷移します。
![スクリーンショット 2020-03-25 0.43.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/572604/6cb6bfef-e84c-d05f-6e66-052e5e1cde6b.png)

インスタンスカテゴリのインスタンスをクリックし、インスタンスの管理画面へ遷移します。
<img width="1223" alt="スクリーンショット 2020-05-02 12.17.04.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/572604/79aa1bb8-e76f-7145-7193-6acd2e578af0.png">

### 2.2 EC2を構築
これからEC2を構築するために、インスタンスの設定を行います。
手順は大きく分けて５つあります。
「インスタンスを作成」を押下し、Amazonマシンイメージ(AMI)を選択するページへ遷移します。

#### ①AMIの選択
最初に、左の項目から「AWS MarketPalce」を選択します。次に、検索エリアで「wordpress」と入力し検索します。すると、一番上位の検索結果に``WordPress Certified  Bitnami and Automattic``が出てくるので、それを選択します。
<img width="1428" alt="スクリーンショット 2020-03-25 0.52.48.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/572604/dc54e8cd-b5ac-6ca8-4b0c-6b190f0b8333.png">


#### ②インスタンスタイプの選択
次にインスタンスタイプの選択をします。
無料利用枠対象の``t2.micro``を選択します。こちら以外を選択してインスタンスを作成してしまうとお金がかかってしまいます。
<img width="1422" alt="スクリーンショット 2020-03-25 0.53.13.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/572604/55add7c2-6f51-c3b7-5ef5-b6f8ae91eb23.png">

#### ③タグの追加
インスタンスの設定とストレージの追加はデフォルトの設定を使うので、タグの追加のステップまでとばします。
キーに「Name」、値「wordpress」と入力します。
<img width="1415" alt="スクリーンショット 2020-03-25 0.54.52.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/572604/7f8b1f60-c7fc-6c67-b9d1-f3df09a5c0e1.png">


#### ④キーペアの作成
セキュリティグループの設定もデフォルトの設定を使うので、確認のステップまでとばします。

今までの設定内容を確認しながら、一番下までスクロールし、起動ボタンをクリックします。
<img width="1422" alt="スクリーンショット 2020-05-05 11.42.50.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/572604/99e13078-bb37-b182-9d32-1457ecce4ba1.png">

すると、キーペアの設定モーダルが表示されます。そこで、``新しいキーペアの作成``を選択し、キーペア名に「wordpress」と入力します。その後、``キーペアのダウンロード``を押下し、プライベートキーファイルをダウンロードします。このファイルは、後の自作のカスタムテーマをアップロードする際に使います。
最後に、「インスタンスの作成」をクリックし全ての設定が完了します。

<img width="746" alt="スクリーンショット 2020-05-05 11.44.27.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/572604/53f9c853-4e7a-3987-3ea8-aadf066edfcd.png">

※``キーペアなしで続行``を選択してはいけないです！！
選択すると自作のカスタムテーマを転送することができなくなります。インスタンス作成後に、修正することも不可能ではないですが、初心者にはとても難しく感じました。もしも間違えた場合は、一度作成したインスタンスを削除し、再度新しくインスタンスを作成するのが一番てっとり早いです。

#### ⑤設定完了
インスタンス設定が完了すると、こちらの画面が表示されます。
設定が完了したので、一度インスタンス管理画面へ遷移します。
<img width="1299" alt="スクリーンショット 2020-03-25 0.59.19.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/572604/2421993a-9a09-24ed-c5d9-8c47deefe77a.png">


すると、１つインスタンスが追加されていることが確認できます。ステータスチェックの項目が``初期化しています``になっているはずです。実は、インスタンスの作成には、``5~10分``ほど時間がかかってしまいます。つまり、この状態はまだインスタンスが作成されていないことを示しています。
そのため、インスタンスの作成完了ステータスである``2/2チェック...``になるまで放置する必要があります。
<img width="1422" alt="スクリーンショット 2020-05-05 13.41.15.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/572604/4bb53dfb-e791-a5b7-e4b4-3e1b33315d5d.png">

無事EC2インスタンスを作成することができました！！

## 3. WordPressにログイン
- WordPressにログインします。

### 3.1 wordressのログイン画面へ遷移
まず、先ほど作成したEC2インスタンスを選択し、``IPv4 パブリック IP``をコピーします。
<img width="1219" alt="スクリーンショット 2020-05-08 0.02.23.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/572604/18a954ce-0a8a-ed4e-54ed-2d83c332c3e5.png">

その後、任意のブラウザでIPアドレスを貼り付け、末尾に``/admin``を追加して検索します。
すると、以下のようなwordpressのログイン画面が表示されるはずです。
<img width="884" alt="スクリーンショット 2020-05-07 23.49.28.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/572604/021dd80e-5a7c-832c-0993-cc8d63b0cfa3.png">

### 3.2 パスワードをコピー
先ほどのEC2インスタンスのログからパスワードを取得することができます。
「アクション」→「インスタンスの設定」→「システムログの取得」と遷移します。
<img width="1264" alt="スクリーンショット 2020-03-26 16.00.07.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/572604/516efa6b-b6d9-a185-3871-42498ef7a98b.png">

モーダル画面が表示されるので、下にスクロールしてください。
スクロールしていくと、以下のような形でパスワードが書いてあるはずです。
<img width="717" alt="スクリーンショット 2020-05-07 23.56.54.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/572604/7c2e0c76-df37-5762-9bf5-a0a29add8f56.png">

### 3.3 ログイン
ユーザ名は``user``と入力し、パスワードは先ほどコピーしたものを入力すると....
無事、wordpressにログインすることができました！！
<img width="1424" alt="スクリーンショット 2020-03-26 17.17.17.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/572604/d35c227a-d766-3785-af89-78a034f23a60.png">


## 4. EC2にWordPressのテーマデータをアップロード
- [WordPressのインポート](https://techacademy.jp/magazine/7859)を行った後、自作のカスタムテーマをターミナルからアップロードします。

### 4.1 ターミナルからEC2インスタンスへ接続
まず、「2.2 EC2を構築、④キーペアを作成」を行った際に、ダウンロードした``wordpress.pem``ファイルを「~/.ssh/」配下に移します。
その後、``ssh -i [.pemファイル] [ユーザ名]@[public IP]``コマンドを利用して接続します。
この時、ユーザ名は``ec2-user``ではなく``ubuntu``にする必要があります。EC2で利用するOSによって``ユーザ名の初期値``が異なります。

```
% ssh -i ~/.ssh/wordpress.pem ubuntu@ec2-XXXXXXXXXXXXXX.us-east-2.compute.amazonaws.com
The authenticity of host 'ec2-XXXXXXXXXX.us-east-2.compute.amazonaws.com (XXXXXXXXXXXXX)' can't be established.
ECDSA key fingerprint is SHA256:GNlXYjcZdAj+atIK1/omBfETi+Hsn4J1YpO1VjH14Q0.
Are you sure you want to continue connecting (yes/no)? yes 
Warning: Permanently added 'ec2-XXXXXXXXXX.us-east-2.compute.amazonaws.com,XXXXXXXXXX' (ECDSA) to the list of known hosts.
Welcome to Ubuntu 16.04.6 LTS (GNU/Linux 4.4.0-1102-aws x86_64)
*** System restart required ***
       ___ _ _                   _
      | _ |_) |_ _ _  __ _ _ __ (_)
      | _ \ |  _| ' \/ _` | '  \| |
      |___/_|\__|_|_|\__,_|_|_|_|_|
  
  *** Welcome to the Bitnami WordPress 5.3.2-3                     ***
  *** Documentation:  https://docs.bitnami.com/aws/apps/wordpress/ ***
  ***                 https://docs.bitnami.com/aws/                ***
  *** Bitnami Forums: https://community.bitnami.com/               ***

#######################################################
###    For frequently used commands, please run:    ###
###         sudo /opt/bitnami/bnhelper-tool         ###
#######################################################

bitnami@ip-XXXXXXX:~$ ls
```
### 4.2 sftpコマンドを利用してデータを取得
sftpコマンドを利用して、EC2インスタンスへデータを転送します。
まず、sftpコマンドでsftpクライアントを立ち上げます。次に、cdコマンドで転送先のディレクトリまで移動します。その後、``put``コマンドでデータを転送します。

```
themes % sftp -i ~/.ssh/wordpress.pem ubuntu@ec2-XXXXXXXXXX.us-east-2.compute.amazonaws.com  
Connected to ubuntu@ec2-XXXXXXXXX.us-east-2.compute.amazonaws.com.
sftp> cd apps/wordpress/htdocs/wp-content/themes/
sftp> put -r myportfolio
Uploading myportfolio/ to /home/bitnami/apps/wordpress/htdocs/wp-content/themes/myportfolio
```

## 5. WordPressにテーマが追加されているか確認
先ほど転送した自作のカスタムテーマが存在するか確認します。
「外観」→「テーマ」でテーマの一覧が見れるページに遷移します。デフォルトのテーマ以外に、転送した自作のカスタムテーマが追加されているはずです！

## まとめ
- ``AMI``を利用することにより、非常に簡単に``WordPress``の``EC2``を構築することができました。
- ただ今回は、セキュリティーやドメインの設定、AWSの特性生かした冗長構成などは全く行っていません。
- そのため、次回はAMIを使用せずに、WordPress用のEC2を構築し、WordPressで利用するMySQL用のEC2も別途構築したいと思います。また、VPCやELB、Route53なども利用したいと思います。