AWSの無料トライアル期間が終わって毎月高額請求されていたサービスをLightsailに移行して1/10にした

# 乗り換えのきっかけ
1年強前に勉強を兼ねてAWSの無料トライアル期間を利用してWordspressを使ったサービスを公開していました。

「**そうえば、そろそろ無料期間終わってるんじゃない？**」と思い、請求画面を開くと、案の定、複数月に跨いで多額の請求が...

コロナで自宅待機だし、今やるしかない！と思い行動に移りました。

![スクリーンショット 2020-03-08 1.08.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191919/2bf716d9-0a91-2244-099e-d0f27ca29143.png)

アーキテクチャとしては、よくある一般的なインフラ構成で、EC2（t2.micro）とRDS（MySQL）を使い、それをALBで流すような構築をしていました。

こんな感じです（AWSの公式サイトから引用しました）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191919/6a07b675-ecc3-4b38-3a68-1940262fc907.png)

ちなみに請求内訳はこんな感じで、ALBとRDSがほぼ占めていました。（放置してただけなのに高っ）
![スクリーンショット 2020-03-08 1.12.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191919/23415dec-2046-246b-423f-933067ff1e66.png)

RDS使わずにEC2の中にMySQL入れれば安くなるんじゃないかと思いつつ、せっかくならもっと安く運用したい...そう思ってググっていると **[Amazon Lightsail](https://aws.amazon.com/jp/lightsail/)** というものが良いらしいという情報が。

せっかくなのでこれを使ってみよう！と思い、記事を書きました。

# Amazon Lightsail とは

公式：https://aws.amazon.com/jp/lightsail/

> 月額 3.50 USD からのプラン 使いやすいクラウドプラットフォーム Lightsail は、アプリケーションやウェブサイトの構築に必要なすべてのものに加えて、コスト効率が良い月額プランを提供します。クラウドに慣れていないお客様でも、信頼している AWS インフラストラクチャを使用してすぐにクラウドにアクセスしようとしている場合も、対応できます。

つまり、簡潔で安いEC2のようなものらしいです。

詳細については、[AWS中の人が作ったSlideShare](https://www.slideshare.net/AmazonWebServicesJapan/aws-black-belt-online-seminar-amazon-lightsail)にまとまっています。
![スクリーンショット 2020-03-08 6.37.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191919/b014498d-5fdc-ec1e-f877-46e8094a3335.png)

## EC2との主な違い
### 転送量が無料
LightSailでは各料金プランに応じて一定量までの転送量が無料で、最安3.5$/月の512MBプランで転送量1TB/月まで無料という驚きの価格！

### インスタンスを停止時でも課金発生
EC2はインスタンスを止めれば課金されませんでしたが、LightSailでは課金されるそうです。

### DNS管理機能が標準であり、Route53を使わなくていい
管理画面から簡単に設定できるそうです

# EC2から高速で移行していく
さっそくシステムを移行していきます。

## Lightsailのインスタンス作成〜WordPressログインまで
基本的に [参考記事](https://www.karelie.net/aws-lightsail-build-wordpress-ssl/) の手順通りです。

画面がかわいいです。
![スクリーンショット 2020-03-08 6.51.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191919/9e3af82b-fa87-911c-b609-d2d4335bae3e.png)

## WordpressのExportとImport
なんと便利な既存機能がありました。プラグイン等丸ごと移行する場合は、[all-in-one-wp-migration](https://wordpress.org/plugins/all-in-one-wp-migration/)等を利用するとできるそうです。（後から気づきました）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191919/21b867c3-1886-aeea-c006-a40bd4303822.png)


## ドメインの設定切り替え
自分はRoute53でDNS管理していたため、Lightsailで作成したElasticIPをAレコードに設定します。
![スクリーンショット 2020-03-08 6.44.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191919/2a33e5fc-5963-6795-a715-dc237b5f2938.png)

ネームサーバー（NS）レコードの書き換えも忘れずに行います。

続いて、参考記事に倣って `wp-config.php` を修正していきます。（略）

## 常時SSL対応
以前はALBを使い対応していましたが、今回は `Letsencrypt` を利用します。
[こちらの記事](https://qiita.com/fk_2000/items/545a835ba2f2a1d0a974)を参考にさせて頂きました。

```
$ cd /tmp
$ git clone https://github.com/letsencrypt/letsencrypt

$ cd letsencrypt
$ ./letsencrypt-auto
$ ./letsencrypt-auto certonly --webroot -w /opt/bitnami/apps/wordpress/htdocs/ -d [ドメイン名]
# 管理者のメールアドレスを聞かれるので答える
# 何回か質問されるが基本OKで大丈夫

$ sudo cp /etc/letsencrypt/live/[ドメイン名]/fullchain.pem /opt/bitnami/apache2/conf/server.crt
$ sudo cp /etc/letsencrypt/live/[ドメイン名]/privkey.pem /opt/bitnami/apache2/conf/server.key

$ sudo /opt/bitnami/ctlscript.sh restart apache
```

httpsにリダイレクトさせる設定を、ApacheとWordpressのconfigにそれぞれ書く。

```
# opt/bitnami/apps/wordpress/conf/httpd-prefix.conf

- RewriteCond "%{HTTP_HOST}" ^ec2-([0-9]{1,3})-([0-9]{1,3})-([0-9]{1,3})-([0-9]{1,3})\..*\.amazonaws.com(:[0-9]*)?$
- RewriteRule "^/?(.*)" "%{REQUEST_SCHEME}://%1.%2.%3.%4%5/$1" [L,R=302,NE]
+ RewriteCond %{HTTPS} !=on
+ RewriteRule ^/(.*) https://[ドメイン名]/$1 [R,L]
```

```
# /opt/bitnami/apps/wordpress/htdocs/wp-config.php

define('WP_SITEURL', 'https:/[ドメイン名]/');
define('WP_HOME', 'https://[ドメイン名]/');
```

### 証明書の更新をCronで自動化する
`Let's Encrypt` の証明書は有効期限が3ヶ月なので、これを更新させる必要があります。

この時点で既に `/etc/letsencrypt/renew-certificate.sh` のシェルがあるはずなので、これを定期実行させます。
今回は `mycron.log` に吐かせて実行ログを確認できるようにしておきます。

```
$ crontab -e

# 以下を追記（毎月1日の0時00分にshellを実行）
0 0 1 * * /etc/letsencrypt/renew-certificate.sh > /var/log/mycron.log 2>&1
```

#### status確認
```
$ /etc/init.d/cron status
```

#### crontabを確認
```
$ crontab -u bitnami -l
```


## メール機能の有効化
LightsailではデフォルトでEメールが有効化されておらず、一手間かける必要があります。

### Gmailを利用する場合
[こちらの記事](https://nana4-story.com/how-to-enable-mail-address-in-wp)を参考にするとできると思います。
APIの認証方法が、**GCP-APIの許可と、GmailAPIの許可の両方が必要** なので注意です。（結構わかりづらい..）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191919/f050f39c-4a92-0073-4267-6f07e91ac331.png)


上手くいくと、鳩さんからメールが届きます。
![スクリーンショット 2020-03-08 7.19.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191919/50b6335f-71e6-d4c9-3cea-3cb7761c9b0a.png)

### AWS SESを利用する場合
公式リファレンスの[こちらの記事](https://lightsail.aws.amazon.com/ls/docs/ja_jp/articles/amazon-lightsail-enabling-email-on-wordpress)通りにやればできます。
手順通り、DNSゾーンの編集で、発行した「MX record」「TXT record」「CNAME record」をそれぞれ追加していきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191919/cf39982b-677d-5704-59d7-780f6f86f325.png)

ちなみに**SESを利用する場合、WP Mail SMTP に課金する必要がある** ので注意です。

# 総仕上げ
最後に、問題なく移行し終わったか確認していきます。
自分の場合、削除済の移行前ドメインを参照しているパスが残っており、一部のレスポンスが異常に遅かった なんてことがありました。

最初が高すぎるのもありますが、これで**コストを1/10以上抑えられた**はず..！

# 参考
[AWS LightsailでWordPressを構築しSSL化する方法](https://www.karelie.net/aws-lightsail-build-wordpress-ssl/)
[Lightsailで常時SSLのWordPress](https://qiita.com/fk_2000/items/545a835ba2f2a1d0a974)
[WordPress on Amazon LightsailでGmailを送受信する](https://nana4-story.com/how-to-enable-mail-address-in-wp)
[Amazon Lightsail の WordPress で E メール を有効にする](https://lightsail.aws.amazon.com/ls/docs/ja_jp/articles/amazon-lightsail-enabling-email-on-wordpress)