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

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


# 今回の流れ
AWSのEC2に作成したインスタンス（仮想サーバー）をWebサーバーにします。

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


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

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

### インストールの作成手順

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

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

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

IPアドレスは作成したインスタンスのパブリックIPです。
例）
% ssh -i my-key.pem ec2-user@54.95.164.166
```

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

### WARNINGと表示され、インスタンスにログインできない場合
キーペアが原因だと思われます。
以下の入力をします。

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

chmodはchange modeの略で、キーペアファイル（今回は「my-key.pem」というものを作成しました。）の属性を変更します。
400の最初の4は所有者、真ん中の0は所有グループ、最後の０はその他のユーザーにそれぞれ割り当てられます。
4は読み取り、2は書き込み、1は実行の権限を表し、全て行える場合には4と２と１を足して、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は８０番ポートで待ち受けていることが確認できます。


# ファイアウォールの設定

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

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

* ルールを追加します。

「ルールの追加」をクリックし、タイプを「カスタムTCPルール」、ポート範囲を「８０」、ソースを「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 基礎からのネットワーク＆サーバー構築」
著者：大澤文孝、玉川憲、片山暁雄、今井雄太

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