EC2の無料期間が終了してしまい、正規の利用料金を払わなければならなくなり、
EC2とロードバランサーを合わせて、月額3,000円強かかるようになってしまいました。
そこで、EC2をLightsailにお引越しすることにしました。CDNは、CloudFront を継続利用することにします。
また、個人用途で冗長化やオートスケールといったリッチな機能は不要ということで、今まで無料だったロードバランサーは利用しないことにしました。
Amazon Lightsail とは
Amazon Lightsail とは、 AWSが提供するVPSサービスで、EC2に比べて柔軟性では劣りますが、簡単/低価格であることを特徴としています。詳しくは、ここでは解説しません。以下を参考に。
移行元作業
移行元となるサーバー(ここではEC2インスタンス)にログインして、移行用にバックアップを作成します。
Docker構成にしているので、
- 永続化データをzipにまとめて
- 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 でインスタンス作成するのが良いかも。
インスタンスは、「$5」のプランにしました。
本当は一番安い「$3.5」のプランにしたかったのですが、メモリ不足でWordPress起動時にout of memoryになってしまいました。
そのほか、インスタンス名や必要であればタグを入力して、インスタンス作成します。
しばらく待っていると、インスタンスの作成が完了して、ステータスが「Running」になります。
静的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を払い出します。
インスタンスに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のレコードを変更するなど