Docker 構成の WordPress を EC2 から Lightsail にお引越し

EC2の無料期間が終了してしまい、正規の利用料金を払わなければならなくなり、
EC2とロードバランサーを合わせて、月額3,000円強かかるようになってしまいました。

そこで、EC2をLightsailにお引越しすることにしました。CDNは、CloudFront を継続利用することにします。
また、個人用途で冗長化やオートスケールといったリッチな機能は不要ということで、今まで無料だったロードバランサーは利用しないことにしました。

目次

Amazon Lightsail とは

Amazon Lightsail とは、 AWSが提供するVPSサービスで、EC2に比べて柔軟性では劣りますが、簡単/低価格であることを特徴としています。詳しくは、ここでは解説しません。以下を参考に。

移行元作業

移行元となるサーバー(ここではEC2インスタンス)にログインして、移行用にバックアップを作成します。
Docker構成にしているので、

  1. 永続化データをzipにまとめて
  2. zipをS3にアップロード

します。

$ cd /opt/webapp
$ ls
.env                    docker/                 wordpress-php/          docker-compose.yml
nginx/                  certs/                  mysql/                  wordpress/
$ zip -r blog-data.zip .
$ aws s3 cp blog-data.zip <s3_uri>

移行先作業

Lightsail インスタンスの作成

WordPressに必要なミドルウェア全部入りの blueprint も選択できますが、今回は Docker 構成のまま移行するので、
「OS Only」で 、OSは「AmazonLinux 2」を選択します。
※初めてWordPressを構築するのであれば、WordPress用の blueprint でインスタンス作成するのが良いかも。

Create an instance | Lightsail

インスタンスは、「$5」のプランにしました。
本当は一番安い「$3.5」のプランにしたかったのですが、メモリ不足でWordPress起動時にout of memoryになってしまいました。

Create an instance | Lightsail

そのほか、インスタンス名や必要であればタグを入力して、インスタンス作成します。
しばらく待っていると、インスタンスの作成が完了して、ステータスが「Running」になります。

Lightsail

静的IPの払い出しと割り当て

Lightsail が提供する CDN (Content Delivery Network) を利用する場合は、静的IPの払い出しは不要です。

今回は、CDNとしてCloudFrontを利用しますが、CloudFrontで直接Lightsailインスタンスをオリジンとして設定することは出来ないため、Global IP指定でオリジンを設定することになり、Global IPが必要になります。
CDNとしてCloudflareを利用する場合も同様で、Global IPが必要です。

インスタンス作成するとGlobal IPが割り当てられますが、固定ではありません。インスタンスを再起動するたびにIPが変わってしまいます。
そこで、静的IPを払い出して、インスタンスに割り当てます。

静的IPはインスタンスに割り当てていれば無料で利用できます。ただし、インスタンスに割り当てていない静的IPは課金対象で、月額400円弱かかってきます。使っていない静的IPは忘れずに消すようにしましょう。


Networking タブから「Create static IP」を選択すると、静的IPの作成画面が表示されます。
アタッチする(割り当てる)インスタンスや静的IP名を入力して、静的IPを払い出します。

Lightsail

インスタンスにSSH接続

ssh -i <秘密鍵> ec2-user@<ip>

Docker 環境構築

dockerとdocker-composeをインストールしていきます。

Docker インストール

$ sudo yum install -y docker
$ sudo systemctl enable docker
$ sudo systemctl start docker
$ usermod -a -G docker $USER

Docker Compose インストール

最新のdocker-compose※1をインストールしていきます。

$ sudo curl -L "https://github.com/docker/compose/releases/download/v2.6.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose

※1 2022/6/1時点の最新のdocker-composeのバージョンは v2.6.0 でした。最新バージョンの確認はGithubのリリースページを参照。

バックアップからリストア

バックアップをLightsailインスタンスにリストアします。

$ mkdir /opt/webapp
$ cd /opt/webapp
$ aws configure
AWS Access Key ID [None]: xxxxxxxxxxxxxxxxx
AWS Secret Access Key [None]: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Default region name [None]: ap-northeast-1
Default output format [None]: json
$ aws s3 cp <s3_uri> .
$ unzip blog-data.zip

Docker コンテナを起動します。

$ docker-compose up -d
[+] Running 40/40
 ⠿ nginx Pulled                                                                                                               16.6s
   ⠿ 42c077c10790 Pull complete                                                                                                5.7s
   ⠿ dedc95281b4f Pull complete                                                                                               12.4s
   ⠿ 919c6c8c0471 Pull complete                                                                                               12.8s
   ⠿ 7075bb870b9e Pull complete                                                                                               13.0s
   ⠿ e93f5d620ba9 Pull complete                                                                                               13.2s
   ⠿ 90a8adeea75b Pull complete                                                                                               13.3s
 ⠿ mysql Pulled                                                                                                               30.9s
   ⠿ c1ad9731b2c7 Pull complete                                                                                               10.0s
   ⠿ 54f6eb0ee84d Pull complete                                                                                               10.2s
   ⠿ cffcf8691bc5 Pull complete                                                                                               11.1s
   ⠿ 89a783b5ac8a Pull complete                                                                                               11.8s
   ⠿ 6a8393c7be5f Pull complete                                                                                               12.1s
   ⠿ af768d0b181e Pull complete                                                                                               15.7s
   ⠿ 810d6aaaf54a Pull complete                                                                                               16.0s
   ⠿ 81fe6daf2395 Pull complete                                                                                               16.2s
   ⠿ 5ccf426818fd Pull complete                                                                                               27.3s
   ⠿ 68b838b06054 Pull complete                                                                                               27.4s
   ⠿ 1b606c4f93df Pull complete                                                                                               27.5s
 ⠿ wordpress Pulled                                                                                                           35.4s
   ⠿ 8934009a9160 Pull complete                                                                                                6.3s
   ⠿ 5357ac116991 Pull complete                                                                                               21.8s
   ⠿ 54ae63894b5a Pull complete                                                                                               22.0s
   ⠿ 772088206f85 Pull complete                                                                                               24.1s
   ⠿ 3b81c5474649 Pull complete                                                                                               24.4s
   ⠿ c62a528527ae Pull complete                                                                                               24.6s
   ⠿ 4386b832d751 Pull complete                                                                                               25.2s
   ⠿ 23b4fb100c69 Pull complete                                                                                               25.4s
   ⠿ 9339b1ed77ad Pull complete                                                                                               26.8s
   ⠿ 6ad6583eba04 Pull complete                                                                                               27.0s
   ⠿ 05e5f60f6add Pull complete                                                                                               27.2s
   ⠿ 744e7c78b843 Pull complete                                                                                               27.4s
   ⠿ d23996fdbd01 Pull complete                                                                                               28.6s
   ⠿ e47d68ad6905 Pull complete                                                                                               29.6s
   ⠿ 06463c6b8395 Pull complete                                                                                               29.7s
   ⠿ 935032d9891a Pull complete                                                                                               29.8s
   ⠿ 7b825b5ea5ac Pull complete                                                                                               29.9s
   ⠿ 4f882ef71278 Pull complete                                                                                               31.8s
   ⠿ ed9050832178 Pull complete                                                                                               31.9s
   ⠿ 39f9aa71aa04 Pull complete                                                                                               32.0s
[+] Running 4/4
 ⠿ Network webapp_default   Created                                                                                            0.1s
 ⠿ Container web_mysql      Started                                                                                            1.0s
 ⠿ Container web_wordpress  Started                                                                                            1.7s
 ⠿ Container web_nginx      Started                                                                                            2.5s

CDN(DNS) 向き先変更

Webアクセスして問題がないことを確認したら、CDNの設定を変更して、Lightsailに向くようにします。
※CDNを使わない場合はDNSのレコードを変更するなど

この記事が気に入ったら
いいね または フォローしてね!

よかったらシェアしてね!
目次