AWSの仮想サーバーをWebサーバーにする方法


はじめに

AWSはAmazon Web Servisesの略で、Amazonが提供しているクラウドサーバーのサービスです。
AWSへの理解度を高めるために、学んだことをアウトプットします。
今回はネットワークとの関係を記載します。

今回の流れ

AWSのEC2に作成したインスタンス(仮想サーバー)をWebサーバーにします。

  • Webサーバーソフトのインストール
  • ファイアウォールの設定
  • DNSサーバーの設定

Webサーバーソフトのインストール

サーバーをWebサーバーとして機能させるには、サーバーにWebサーバーソフトをインストールします。
今回は世界で最も多く利用されている「Apache HTTP Server」をインストールします。

インストールの作成手順

① インスタンスにログインします。

インスタンスにログインするためには、インスタンスにSSH接続する必要があります。(SSHとはターミナルから直接サーバー操作を行うことができるプロトコルのこと)

ターミナル
% ssh -i キーペアファイル ec2-user@IPアドレス
=> 「%」と表示されていた先頭の記述が「[ec2-user@ip-10-0-1-10 ~]$」のように変わります。(@以下は人によって変わります)

IPアドレスは作成したインスタンスのパブリックIPです。
例)
% ssh -i my-key.pem [email protected]

初回はおそらくセキュリティ警告が出て、[yes/no]?と出るため、「yes」を打ち込みます。

WARNINGと表示され、インスタンスにログインできない場合

キーペアが原因だと思われます。
以下の入力をします。

ターミナル
% chmod 400 my-key.pem

chmodはchange modeの略で、キーペアファイル(今回は「my-key.pem」というものを作成しました。)の属性を変更します。
400の最初の4は所有者、真ん中の0は所有グループ、最後の0はその他のユーザーにそれぞれ割り当てられます。
4は読み取り、2は書き込み、1は実行の権限を表し、全て行える場合には4と2と1を足して、7となります。
例えば、全てのユーザーが全ての権限があるようにしたい場合は「777」を指定します。
今回はキーペアファイルは自身だけが読み取れるものにし、自身で書き込みや実行は行わないので、4にし、他人に見せないものなので、他は0にします。

再度、SSH接続のコマンドを実行してください。

② Apacheをインストールします。

ターミナル
$ sudo yum -y install httpd

「sudo」はその後ろのコマンドをroot権限(管理者権限)で実行するためのコマンドです。
「yum」はアプリケーションをインストールしたり、アンインストールする時に使用するコマンドです。
「-y」はインタラクティブな質問を全てyesで答えてくれるコマンドです。
「install」はインストールするコマンドです。
「httpd」はApacheを後世する実行ファイル名です。

③ Apacheを起動します。

ターミナル
$ sudo systemctl start httpd.service

「systemctl start」は起動するコマンドです。

④ Apacheを自動起動するようにします。
サーバーを再起動した際には、Apacheは停止してしまいます。
サーバー起動時にApacheも自動で起動する世にしましょう。

ターミナル
$ sudo systemctl enable httpd.service

「system enable」は設定するコマンドです。

⑤ 設定を確認する

ターミナル
$ sudo systemctl list-unit-files -t service

「httpd.service」が「enabled」になっていることが確認できれば、OKです。

⑥ ポートを確認する

ターミナル
$ sudo lsof -i -n -P
=> 以下のような表示がでます。
httpd    6840     root    4u  IPv6 144355      0t0  TCP *:80 (LISTEN)
httpd    6841   apache    4u  IPv6 144355      0t0  TCP *:80 (LISTEN)
httpd    6842   apache    4u  IPv6 144355      0t0  TCP *:80 (LISTEN)
httpd    6843   apache    4u  IPv6 144355      0t0  TCP *:80 (LISTEN)
httpd    6844   apache    4u  IPv6 144355      0t0  TCP *:80 (LISTEN)
httpd    6845   apache    4u  IPv6 144355      0t0  TCP *:80 (LISTEN)

「TCP *:80」という表示から、Apacheは80番ポートで待ち受けていることが確認できます。

ファイアウォールの設定

現状ではパブリックIPアドレスをブラウザ上にコピー&ペーストしても、Webサーバーにアクセスできません。
それはApacheの80番ポートがファイアウォールでブロックされているためです。
ここでは、Webサーバーにアクセスできるようにします。

  • セキュリティグループを選択し、インバウンドルールを編集します。
    Webサーバーをインストールしたインスタンスのセキュリティグループを選択します。
    (私は「WEB-SG」というものを作成したため、そちらを選択しました。https://qiita.com/daisuke30x/items/91307c94e8f5a702a42f)
    画面右下に表示される「インバウンドルール」タブ内の「インバウンドルールを編集」をクリックします。

  • ルールを追加します。

「ルールの追加」をクリックし、タイプを「カスタムTCPルール」、ポート範囲を「80」、ソースを「0.0.0.0/0」にし、保存します。
ソース「0.0.0.0/0」は全てのホストを示します。

  • ブラウザで表示されるか確認します。 パブリックIPアドレスをブラウザにコピー&ペーストします。
    先程、表示されなかったページが表示されるようになればOKです。

DNSサーバーの設定

DNSサーバーとは

「IPアドレス」と「ドメイン名」を変換するものです。
IPアドレスは数字の並びなので、覚えにくいものになります。
そこで、人間が理解できるようなドメイン名を付けることが一般的です。
AWSでもドメイン名を作成することができます。

  • VPCの設定ページを開きます。
    AWSでVPCページへ遷移し、作成したVPCを選択します。

  • DNS名を付けるように設定します。
    「アクション」から「DNSホスト名を編集」をクリックし、「有効化」にチェックを入れます。

  • インスタンスで確認します。
    「EC2」ページからインスタンスを確認すると、パブリックIPにDNSがついたものがあることが確認できます。
    それが、DNS名です。

参考

「Amazon Web Services 基礎からのネットワーク&サーバー構築」
著者:大澤文孝、玉川憲、片山暁雄、今井雄太

最後に

本投稿が初学者の復習の一助となればと幸いです。