【AWS】Amazon Lightsail上にPHPサイトを立ち上げて、独自ドメインでアクセスできるようにするまでの全手順

はじめに

Amazon EC2を使って”Hello World”だけを表示するサイトを作ったところ、月額料金が2,500円もかかっていました。EC2は安いと思っていたのに、普通のレンタルサーバーより高いなんて…

ということで、EC2より安くて、簡単にWebサイトを作れるという『Amazon Lightsail』でWebサイトを立ち上げてみることにしました。

↓ EC2の請求書

Amazon Lightsailとは

Amazon Lightsailは、Amazonが提供する定額制VPSパッケージサービスです。簡単、安いが特徴です。

簡単

立上げの簡単さはレンタルサーバーよりは難しくて、ECよりは簡単というレベルです。

数あるAWSのサービスの中で、Lightsailはもっとも簡単にWebサイトを構築できるサービスと言われています。でも、独自ドメインやHTTPS化などをすると、ロリポップなどの一般的なレンタルサーバーよりは設定が難しいです。
EC2に比べると設定は随分と楽です。ApacheとPHPを入れて、MySQLを入れて…などの設定がいりません。

安い

月額3.5ドルとレンタルサーバー並みの安さが特徴です。EC2ではIPアドレスを固定するため月額3~4ドルのElastic IPオプションが必要でしたが、Lightsailは固定IPアドレスも含んで3.5ドルです。

ただし、Lightsail上でデータベースを作ると月額15ドル発生します。データベースを持つサイトであれば、一般的なレンタルサーバーの方が安い場合もあるでしょう。

Lightsailとレンタルサーバーの比較

レンタルサーバーは提供会社がサーバーの構築・運用をしているので、サーバーに自由にアプリケーションをインストールしたり、容量の変更などを行うことはできません。多少の知識があって、サーバーに自由度を求める人はLightsailがお勧めです。

レンタルサーバーと比べたメリット:スペックが高い、自由度が高くカスタマイズしやすい、他のユーザーの影響を受けにくい。

レンタルサーバーと比べたデメリット:サーバーの設定や運用は全て契約者が行う必要がある。

LightsailとEC2の比較

大きな違いは、EC2にはアクセス集中時に自動的にサーバの数を増やすオートスケーリング機能がありますが、Lightsailはないという点です。
LightsailからC2に移行できます。EC2は価格も高く立上げが面倒なので、Lightsailでまず簡単に始めて人気が出てから、EC2に移行するという流れがお勧めです。

EC2と比べたメリット:安く、早く、簡単にサーバーを作れる。

EC2と比べたデメリット:サーバーのスペックを変更できない、アクセス集中に強い。

サーバーを作る

では、実際にサーバーを作っていきます。

↓ AWSのコンソールにログインして、「サービスを検索する」にLightsailと入力します。

↓ 「インスタンスの作成」をクリックします。AWSでは、仮想サーバーのことをインスタンスといいます。
インスタンスローケーションは東京、インスタンスイメージはLinuxを選択します。

↓ 設計図の選択は「アプリ + OS」、LAMPを選択します。

↓起動スクリプト、SSHキーペアマネージャーは変更せずに進みます。

SSHは後で設定します。「自動スナップショットを有効化」には、今回チェックを入れません。
チェックを入れると、サーバーのバックアップを自動的に保存できるのですが、バックアップは月額0.05ドル/GBかかってしまいます。Lightsailの一番安いプランはストレージは20GBなので、必ず月額で1ドルかかります。スナップショットは差分でとるため、容量がどんどん増えていくということはありませんが、バックアップの1つ目は必ず20GBで保存するようです(未確認)。

今回はなるべく安く済ませたいのと、バックアップはローカルに保存することにしたため、チェックを入れません。

↓ インスタンスプランの選択では、$3.5のプランを選びます。

↓ インスタンスの確認はデフォルト設定のまま、キーオンリータグ、キー値タグは設定しません。「インスタンスの作成」ボタンを押します。

↓ インスタンスを作成できました。ここまでは簡単ですね!

↓ しばらくすると、保留中から実行中に変わります。

パブリックIPアドレスを固定(静的IP)にする

初期状態だとインスタンス(サーバー)のIPアドレスは動的になっています。動的インスタンスだと、インスタンスを停止して、再度起動するとIPアドレスが変わってしまいます。

インスタンスを再起動のたびにIPアドレスが変わってしまうと、独自ドメインを設定した時にアクセスできなくなってしまうので、IPアドレスを固定します。Lightsailでは、インスタンスが起動している限り、静的IPアドレスにかかる費用は無料です。
Lightsail 静的 IP にかかるコストはどれくらいですか?

↓ 「ネットワーキング」→「静的IPの作成」をクリックします。

↓ 「インスタンスへのアタッチ」で今回作成したインスタンスを選択します。「静的IPの指定」は初期設定の「StaticIp-1」のままにして、「作成」をクリックします。

↓ 静的パブリックIPアドレスが生成されました。

PHPファイルをサーバーに転送して、Hello Worldを表示する

ここでは、ファイル転送ソフトを使って、PHPファイルをLightsailのサーバー上にアップロードしていきます。SSHという暗号化通信を行うため、SSHキーと呼ばれる秘密鍵が必要となります。

SSHキーをダウンロードする

↓ Lightsailトップページの上部の「アカウント」をクリックして、「アカウント」を選びます。

↓ 「SSHキー」タブを選び、「ダウンロード」をクリックします。

FTPクライアントソフトをインストールする

オープンソースのFTPクライアントソフト(ファイル転送ソフト)のFilezillaをインストールします。
参考サイト:FileZillaのダウンロードとインストールの方法

FTPクライアントソフトにサーバー情報を登録する

↓ Filezillaを開き、「ファイル」→「サイトマネージャー」→「新しいサイト」をクリックして、今回作成するサイトの名称を登録し、右側の「一般」タブに以下を入力します。

  • プロトコル:SFTP – SSH File Transfer Protocol
  • ホスト:Lightsailのパブリック IP
  • ログオンタイプ:鍵ファイル
  • ユーザー:bitnami
  • 鍵ファイル:さきほどダウンロードしたPEM Fileを指定。ファイルの種類を「PPK files」から「All files」に変えると、PEM Fileを選択できるようになります。

↓ ホストは以下の赤四角部に表示されています。

↓ 鍵ファイルを参照する際、ファイル名を「PEM files」に変更すると、さきほどダウンロードした鍵ファイルを選択できるようになります。

↓ 接続に成功すると「状態:”/home/bitnami” のディレクトリ リストの表示成功」と表示されます。

PHPファイルをサーバーに転送する

今回は、”Hello World”を表示するシンプルなPHPファイルを作ります。index.phpという名前で保存しておきます。

<?php
  echo "Hello world";
?>

index.phpをLightsailのドキュメントルートに保存します。
Lightsailのドキュメントルートは /opt/bitnami/apache/htdocs です。
FileZillaの右側をルートディレクトリまで移動します。デフォルトで入っているindex.htmlを削除します。

↓ index.phpを右クリックして、「アップロード」を選択します。

ブラウザでアクセスして、Hello Worldを表示してみましょう。ブラウザのURL入力項目に、http://54.150.160.XX/ などパブリックドメインを入力します。

↓ Hello Worldが表示されました。

独自ドメインを設定する

www.example.com のような独自ドメイン名でアクセスできるようにするには追加で設定が必要です。Lightsailは他のサイトで取得したドメインを設定できます。今回は、Route53で取得したドメインを設定していきます。

Route53でドメインを取得するのは簡単なので、他のサイトを参考にして取得してください。

DNSゾーンを作成する

DNSゾーンとは、DNSサーバーがドメイン名を管理する範囲のことです。

↓ Lightsailの「ネットワーキング」タブの「DNSゾーンの作成」をクリックします。

↓ 取得したドメインを「example.com」のように「www」無しで入力し、「DNSゾーンの作成」をクリックします。wwwなしで入力するのがポイントです。wwwを入れると、独自ドメインを設定できない場合があります。私はwwwを入れてしまい、しばらくはまりました。。
参考:Lightsail_ドメイン名を入力するときに www を含める必要はありません

DNSゾーンにAレコードを追加する

DNSサーバーで、IPアドレスとドメインを結びつける項目をAレコードといいいます。

↓ 「DNSゾーンの作成」をクリックした後に表示されるページで、「レコードの追加」をクリックします。

↓ ここでAレコードとCNAMEレコードを登録します。

Aレコードとは、ドメイン名とホスト名を静的 IP アドレスに割り当てるレコードのことです。
「サブドメン」には、www有をトップページURLにするなら「www」を入力、www無をトップページURLにするなら「@」を入力します。

「解決先」の項目をクリックすると下に選択肢が表示されます。先ほど作成した静的IPアドレスのIDを選択し、緑のチェックマークをクリックします。

DNSホスティングプロバイダ(Route53)のネームサーバーを変更する

DNSホスティングプロバイダとは、DNSサーバーを維持する会社のことです。今回はRoute53で取得したので、DNSホスティングプロバイダはAmazonです。Route53でドメインを取得したら、Route53の管理画面にアクセスし、左側のメニューで「登録済みのドメイン」を選択し、今回取得したドメインをクリックします。

↓ 「ネームサーバーの追加/編集」をクリックします。

↓ ネームサーバーを入力する画面が表示されます。

↓ Lightsailの「詳細」タブにネームサーバーが記載されています。ネームサーバーとDNSサーバーは同義です。この4項目をそれぞれコピーして、さきほどのRoute53のネームサーバー画面の項目にペーストし、「更新」をクリックします。

更新が完了するとメールが届きます。しばらく待つと、独自ドメインでHello Worldが表示されるようになります。

HTTPS化

インターネット上でのデータの通信を暗号化し、盗聴や改ざんを防ぐ仕組みをSSLといいます。
SSL化されたウェブサイトは、URLが「https」から始まり、ブラウザのアドレスバーに鍵マークが入ります。HTTPS通信ができると、Googleの検索にヒットしやすくなります。

LightsailでHTTPS化する3つの方法

Lightsailで作ったWebサイトをHTPPS化するには、主に3つの方法があります。

  1. Lightsail ロードバランサーを使用する
  2. 無料のLet’s Encryptの証明書を使用する
  3. Amazon CloudFrontを使用する

今回は3のAmazonCloudFrontを採用しました。

1:AWSのロードバランサ―月額18ドルと高額なため、今回は採用しませんでした。

2:Let’s Encryptの有効期限が90日なので、90日ごとに更新が必要です。更新自動化ができるようですが、設定が複雑なのでは今回は採用しませんでした。

3:Amazon CloudFrontはAWSのCDNサービスです。CDN経由のトラフィックに応じて、Amazon CloudFrontの利用費が発生します。単価は$0.114/GBです。仮に月に10GBの配信がある場合でも$1.1と安価です。今回は導入しやすく安価なCloudFrontを採用しました。

CloudFrontでディストリビューションを作る

Lightsail上でCloudFrontを登録できるようになったので、Lightsail上から設定していきます。

↓ Lightsailのロゴをクリックして、管理画面のトップページに移動します。「ネットワーキング」をクリックします。

↓ 「ディストリビューションを作成する」をクリックします。

↓ オリジンは「東京」を選択し、インスタンスはさきほど設定したインスタンスを選択します。

キャッシュすると表示が早くなりますが、AWSサーバーの設定を変更しても変更内容がすぐに反映されず、管理しにくいため、「何もキャッシュしない」を選択します。

ディストリビューションプランは最も安価な「50GB/月」を選択します。

「ディストリビューションは、HTTP のみを使用してオリジンからコンテンツをプルします」はデフォルト設定の「HTTPのみ」にします。これを「HTTPSのみ」にすると、HTTPSサイトが表示されなくなるので注意しましょう。ここもハマりました。CloudFrontがLightsailのサーバーから情報を引き抜いてくるときはHTTPです。

最後に「ディストリビューションを作成する」をクリックします。

↓ 設定が完了すると、ステータスが「進行中」と表示されます。しばらく待つと「有効」に変わります。

証明書を取得する

HTTPS化のための証明書を取得します。以前はAWS Certificate Managerにアクセスして証明書を取得する必要がありましたが、Amazon Lightsailの管理画面上で証明書を取得できるようになりました。

↓ Lightsailの管理画面に戻り、「ホーム」->「ネットワーキング」->さきほど作成したディストリビューション -> 「カスタムドメイン」タブをクリックします。プライマリドメインにwww付のドメインを入力し、「作成」をクリックします。

証明書情報をCNAMEに反映する

↓ Lightsailの管理画面に移動して、「ホーム」をクリックして、「ネットワーキング」タブの前段で登録したDNSゾーンをクリックします。

↓ 「レコードの追加」をクリックします。

↓ 「CNAMEのレコード」を選択します。
サブドメインには、先ほどのLightsailの証明書画面に表示されていた左辺の「名前」に表示されているテキストの.wwwまでの値を入力します。
例)ACMの「名前」項目:_2725xxxxxxxxxxxxxxxxxxxxxxxxxxxxx.www.example.com.
CNAMEに入力する値:_2725xxxxxxxxxxxxxxxxxxxxxxxxxxxxx.www

マップ先には、右辺の「値」に表示されているテキストを入力します。
緑のチェックマークをクリックします。

↓ ステータスが「進行中」になります。「有効、使用中」になったあとに「カスタムドメインが有効になっています」をONにします。

CloudFront経由でアクセスするようAレコードを追加する

これまでの設定でHTTPS化はできたのですが、独自ドメインを開いてもHTTPS化されません。

アクセスの導線を
独自ドメイン -> Lightsail を
独自ドメイン -> CloudFront -> Lightsail
に変更して、CloudeFrontをかませる必要があります。

LightsailでCloudFrontを使ったHTTPS通信の通信経路は以下のようになります。

↓ 「ホーム」->「ネットワーキング」->さきほど作成したDNS ゾーン -> Aのレコードを編集します。解決先の項目をクリックして、さきほど作成したディストリビューションを選択します。

これで https://www.example.com にアクセスできるようになりました。

以上で設定は終了です。簡単といわれているLightsailでも、独自ドメインやHTTPS化するとなると、そこそこの知識と手間がかかりますね。

コメント

タイトルとURLをコピーしました