乗り換えのきっかけ
1年強前に勉強を兼ねてAWSの無料トライアル期間を利用してWordspressを使ったサービスを公開していました。
「そうえば、そろそろ無料期間終わってるんじゃない?」と思い、請求画面を開くと、案の定、複数月に跨いで多額の請求が...
コロナで自宅待機だし、今やるしかない!と思い行動に移りました。
アーキテクチャとしては、よくある一般的なインフラ構成で、EC2(t2.micro)とRDS(MySQL)を使い、それをALBで流すような構築をしていました。
ちなみに請求内訳はこんな感じで、ALBとRDSがほぼ占めていました。(放置してただけなのに高っ)
RDS使わずにEC2の中にMySQL入れれば安くなるんじゃないかと思いつつ、せっかくならもっと安く運用したい...そう思ってググっていると Amazon Lightsail というものが良いらしいという情報が。
せっかくなのでこれを使ってみよう!と思い、記事を書きました。
Amazon Lightsail とは
公式:https://aws.amazon.com/jp/lightsail/
月額 3.50 USD からのプラン 使いやすいクラウドプラットフォーム Lightsail は、アプリケーションやウェブサイトの構築に必要なすべてのものに加えて、コスト効率が良い月額プランを提供します。クラウドに慣れていないお客様でも、信頼している AWS インフラストラクチャを使用してすぐにクラウドにアクセスしようとしている場合も、対応できます。
つまり、簡潔で安いEC2のようなものらしいです。
詳細については、AWS中の人が作ったSlideShareにまとまっています。
EC2との主な違い
転送量が無料
LightSailでは各料金プランに応じて一定量までの転送量が無料で、最安3.5$/月の512MBプランで転送量1TB/月まで無料という驚きの価格!
インスタンスを停止時でも課金発生
EC2はインスタンスを止めれば課金されませんでしたが、LightSailでは課金されるそうです。
DNS管理機能が標準であり、Route53を使わなくていい
管理画面から簡単に設定できるそうです
EC2から高速で移行していく
さっそくシステムを移行していきます。
Lightsailのインスタンス作成〜WordPressログインまで
基本的に 参考記事 の手順通りです。
WordpressのExportとImport
なんと便利な既存機能がありました。プラグイン等丸ごと移行する場合は、all-in-one-wp-migration等を利用するとできるそうです。(後から気づきました)
ドメインの設定切り替え
自分はRoute53でDNS管理していたため、Lightsailで作成したElasticIPをAレコードに設定します。
ネームサーバー(NS)レコードの書き換えも忘れずに行います。
続いて、参考記事に倣って wp-config.php
を修正していきます。(略)
常時SSL対応
以前はALBを使い対応していましたが、今回は Letsencrypt
を利用します。
こちらの記事を参考にさせて頂きました。
$ 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を利用する場合
こちらの記事を参考にするとできると思います。
APIの認証方法が、GCP-APIの許可と、GmailAPIの許可の両方が必要 なので注意です。(結構わかりづらい..)
AWS SESを利用する場合
公式リファレンスのこちらの記事通りにやればできます。
手順通り、DNSゾーンの編集で、発行した「MX record」「TXT record」「CNAME record」をそれぞれ追加していきます。
ちなみにSESを利用する場合、WP Mail SMTP に課金する必要がある ので注意です。
総仕上げ
最後に、問題なく移行し終わったか確認していきます。
自分の場合、削除済の移行前ドメインを参照しているパスが残っており、一部のレスポンスが異常に遅かった なんてことがありました。
最初が高すぎるのもありますが、これでコストを1/10以上抑えられたはず..!
参考
AWS LightsailでWordPressを構築しSSL化する方法
Lightsailで常時SSLのWordPress
WordPress on Amazon LightsailでGmailを送受信する
Amazon Lightsail の WordPress で E メール を有効にする