【Amazon Lightsail】Lightsailで構築したウェブサーバをEC2に移行してみた

この記事を書いたメンバー:

糸山和毅

【Amazon Lightsail】Lightsailで構築したウェブサーバをEC2に移行してみた

目次

1.はじめに

こんにちは、BeeXの糸山です。
前回投稿した「【Amazon Lightsail】構築したウェブサーバをbncert-toolでHTTPS化させてみた」の続きです。今回はスナップショットからLightsail内にもう一台サーバを起動したり、LightsailからEC2へ移行してみようと思います。

EC2はプライベートサブネットに構築し、ALB経由のHTTPS接続という構成でやってみます。

2.Amazon Lightsailとは

一言でいうと「専門知識がなくても、迅速にwebサーバをデプロイできるサービス」です。

VPCやEC2を構築して、パッケージをインストールして,etc...とする場合、それに伴う専門知識が必要になり、構築完了までに時間がかかります。
しかし、Lightsailを使用すれば数分でサーバをデプロイすることが可能です。

今回はWordpressを使ったwebサーバを構築予定です。
EC2から構築してデプロイするよりも圧倒的に難易度が低く、時間もかからないので初めて触ったときは感動しました...

しかも、最初の3か月は無料で利用できます。
初めて触るサービスは使い方がよくわからないのに課金されてしまった...なんてこともよくあるので無料期間が設けられているのはは非常にありがたいです。

3.スナップショットを作成する

Lightsailのメニューから「Create snapshot」を選択しスナップショットを作成します。
スナップショットの名前とは別に、復元時にインスタンス名を指定できるので好きな名前を付けて構いません。

取得完了です。非常に簡単にスナップショットを作成できます。

4.インスタンスを復元する

取得したスナップショットからLightsailインスタンスとして「restored-instance」という名前で復元してみます。

復元完了したので、パブリックIPアドレスで接続してみます。
パブリックIPアドレスを使用した接続は問題なさそうです。

HTTPS接続可能なインスタンスのスナップショットから復元しているため、Route53の設定を変更してHTTPS接続が可能か確認します。念のためスナップショット取得元のインスタンスは停止しておき接続できないようにしておきます。
HTTPで接続してみるとHTTPSにリダイレクトされていることがわかります。
また、接続先URLも「restored-instance」のグローバルIPに変わっており、問題なく接続できてそうです。

5.LightsailからEC2に移行する(AMIエクスポート)

スナップショットの画面から「Export to Amazon EC2」を選択します
ALBを経由したHTTPS接続を想定してるため、エクスポートするスナップショットはHTTPする『前』の状態のものを指定しています)

こんな感じのポップアップが出るので、「Yes,Continue」を選択します。
メッセージによるとLightsailのスナップショットはAMIとしてエクスポートされるようです。

エクスポート完了しました。元のディスクサイズによっては時間がかかりますが、気長に待ちましょう。

6.AMIからEC2を復元する

以下の構成でリソース作成します。
サーバへの接続はパブリックサブネットに別途構築するALB経由で行います。

インスタンス名itoyama-beex
VPCパブリックサブネット×2
プライベートサブネット×2
EC2プライベートサブネットに構築
ALBパブリックサブネットに構築
SG(EC2用)インバウンドルール:ALB用SGからHTTPを許可
SG(ALB用) ※ALBは別途作成します

インバウンドルール:任意のIPからHTTP,HTTPSを許可(自宅のIPや0.0.0.0/0など)
アウトバウンドルール:EC2用SGにHTTPを許可

7.パブリックALBを構築する

プライベートサブネットに構築したEC2に接続するためのALBを構築します。
ALBに付与するSGは以下の内容で作成します。

次にターゲットグループを作成します。

続いてインターネット向け(パブリック)ALBを作成します。

8.ALB経由のHTTP接続

接続する前にヘルスチェックのステータスを確認します。
ヘルスチェックはELBの『ターゲットグループ』から確認することができます。
SGの設定ミスなどで通信がうまくいっていない場合はヘルスチェックに失敗しますのでうまくいかない場合は再度確認してみてください。

今回はヘルスステータス「Healty」と表示されているので、ALBのヘルスチェックはうまくいっているようです。

次にALBのパブリックドメイン名でHTTP接続が可能か確認してみます。ロードバランサーの画面に表示される『DNS名(Aレコード)に接続してみます。
無事につながりました!
これでALB経由のHTTP接続の確認ができました。つぎはALBへの接続をHTTPS化させます。
今回はbncert-toolを使用してウェブサーバへの接続をHTTPS化させてみま

9.ACMによる証明書発行と検証

ALBにHTTPS接続するためには証明書が必要になります。
今回は「AWS Certificate Manager」を使用して証明書を発行します。

ACMの画面から「リクエスト」をクリックし、証明書タイプは「パブリック証明書」選択します。


パブリック証明書のリクエスト画面でドメインや検証方法を指定します。
今回は「*.所有するドメイン名」で証明書をリクエストしします。
検証方法は「DNS検証」を選択します。
発行されるとステータスが「保留中の検証」の証明書が追加されます。
検証方法に「DNS検証」を選択したため、CNAMEレコードを指定したRoute53に追加していきます。
証明書IDをクリックし、「Route53でレコードを作成」を選択します。
そのまま「レコード作成」を選択すれば、指定したRoute53ホストゾーンにCNAMEレコードが追加されます。

こんな感じのCNAMEレコードが追加されていればOKです。
CNAMEレコードが追加されてしばらくたつと証明書のステータスが「保留中の検証」から「発行済み」に変わります。
次はスナップショットから復元したり、AWSにスナップショットをエクスポートしてEC2インスタンスとして起動したり、ALBやCloudFrontを交えつつ色々いじってみる予定です。

10.ALB経由のHTTPS接続

証明書の発行、登録が完了したので、あとはALBに証明書を紐づけて、専用のレコードをRoute53に登録すれば完了です。

まずはALBのリスナーに「HTTPS:443」を登録し、証明書を紐づけます
ロードバランサーの「リスナーとルール」から追加できます。

リスナーにHTTPSが追加されました

しかし、リスナーに追加するだけではHTTPS接続できません。

追加でRoute53にitoyama-albというサブドメインを登録します。
AレコードでALBのエイリアスを指定していますが、CNAMEレコーを指定し、値にALBのDNS名を登録しても接続できるかと思います。

無事に接続できました!!

11.さいごに

本検証ではLightSailをEC2に移行し、ALB経由のHTTPS接続が可能な状態まで構築してみました。次回はALBやCloudFrontを使用したリダイレクトやAWS WAFによるアクセス制御をやってみる予定です。

最後まで読んでいただきありがとうございました!!


カテゴリー
タグ

この記事を書いたメンバー

SAPシステムや基幹システムのクラウド移行・構築・保守、
DXに関して
お気軽にご相談ください

03-6260-6240 (受付時間 平日9:30〜18:00)