AWSを使ってwebサーバ（nginx）を構築する（初心者向け）2019年6月

# AWSでwebサーバの構築をする
オンプレで実際のサーバを構築してnginxをインストールして。。と時間もお金もかなりかかりますが、AWSなどのクラウドを使えば比較的簡単に、更に構築するだけなら無料枠で可能です。その手順を書いていきます。
※操作端末はMacです。Windowsの場合はSSH接続の部分でteratermなどの接続ツールを用意する必要があります。それ以外は同じです。

### 手順の概要
1.EC2インスタンスの作成
2.セキュリティグループの設定
3.EC2インスタンスにSSH接続
4.nginxインストール、起動
5.ブラウザ上からnginxの起動を確認

### 事前準備
AWSアカウントを準備する必要があります。
AWSのサイトで無料で作成できます。</br>
[こちら](https://aws.amazon.com/jp/)


### 手順詳細
1. EC2インスタンス作成</br>

* AWSコンソールにログインする。
* 右上のアカウント名の横にどこの国（リージョン）にサーバを立てるかを選択出来るので東京にします。（しなくても問題ないですが、操作するところから近いところにした方が動作が速いです）
* 左上にある「サービス」を選択し、展開します。コンピューティング欄に「EC2」があるので選択。
<img width="641" alt="スクリーンショット 2019-06-27 21.08.29.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321507/3a711585-5325-2b5b-0db7-61279536fe44.png">

* 選択すると、EC2ダッシュボード画面に切り替わります。インスタンスの作成にある「インスタンスの作成」をクリックします。
<img width="923" alt="スクリーンショット 2019-06-27 21.09.00.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321507/1ae12e6d-a468-2c22-b188-ccb8d2d7198b.png">

* マシンイメージ選択画面になります。無料で使える一番上部の「Amazon Linux 2 AMI (HVM), SSD Volume Type」を選択します。
<img width="1143" alt="スクリーンショット 2019-06-27 21.09.18.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321507/fe760014-3f04-4415-a9f5-c002055952f4.png">

* インスタンスのタイプを選びます。デフォルトで選択されているものでOKです。画面が途切れていて恐縮ですが、下部の方に「確認と作成」という青いボタンがあるのでそちらを選択します。 
<img width="1164" alt="スクリーンショット 2019-06-27 21.09.30.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321507/309b42d6-af99-72d9-b340-a06ef054e311.png">

* 確認画面になります。下部に「起動」というボタンがあるので選択します。
* 選択後、キーペアの作成ポップが出てきます。上部を「新しいキーペアの作成」、下部がキーファイルの名前になるので好きな名前を入れてください。ここではwebserverにしています。キーペアとは、サーバにSSHログインする際に必要な認証キーです。
* 入力が完了すれば、キーペアのダウンロードを選択し、ダウンロードします。
* ダウンロードが完了したらインスタンスの作成を選択します。
<img width="696" alt="スクリーンショット 2019-06-27 21.14.13.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321507/7b20d4f7-8302-075f-aca8-6a5096dc536d.png">

* インスタンスが作成されます。「次のインスタンスの作成が開始されました:」の青字の番号をクリックすると、EC2のダッシュボード画面に移動し、サーバが作成中であることが確認できます。
<img width="700" alt="スクリーンショット 2019-06-28 21.40.04.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321507/14645281-8e71-db49-1d2b-bcc87a1e634c.png">

* インスタンスの状況が「running」になればOKです。
<img width="400" alt="スクリーンショット 2019-06-27 21.16.05.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321507/d6690474-0b37-753f-bb1c-b1ebbd153884.png">


2.セキュリティグループの設定
ポートの許可設定を行なっていきます。現在のデフォルトだと、「どこの端末からでもSSH接続が可能」という設定がされているだけなので、これを「SSH接続は自端末からのみ。HTTP接続はどこからでも可能」という設定に変更します。

* EC2ダッシュボードで作成したインスタンスを選択すると、下部の方に設定情報が出てきます。そこから「セキュリティグループ」欄に記載されているセキュリティグループ名（参考画像だとlaunch-wizard-3）を選択します。

<img width="701" alt="スクリーンショット 2019-06-28 21.43.36.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321507/c16b2bc9-3b2b-aa6e-f51c-a7e3bc59597a.png">

* セキュリティグループの画面になります。対象のセキュリティグループを選択し、下部に出てくる情報から「インバウンド」のタブを選択します。2の冒頭で言った通りSSHだけ許可されてる状態です。「ソース」の0.0.0.0/0はどのIPアドレスからでも、要は全IP対象です。「編集」を選択して内容を修正していきます。

<img width="734" alt="スクリーンショット 2019-06-28 21.49.01.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321507/07a0df95-0ce0-760d-82c6-cec675fcf0a1.png">

* SSHの許可IPアドレスを変更します。IPは人により異なります。自分のIPを調べる手っ取り早い方法が[ここのサイト](https://www.cman.jp/network/support/go_access.cgi)にアクセスすること。ドット区切りで4分割された数字が出てます。それが自分のIPアドレスです。タイプSSHのところの0.0.0.0/0を修正して"自分のIP"/32にします。これで自分しかSSH出来ません。認証キーが無いとアクセス出来ないのでここまでする必要はないっちゃ無いですが念のため。（鍵を取られたら誰でもアクセス出来ますし）
* ルールの追加を選択し、タイプをHTTPに、ソースを0.0.0.0/0にします。
* 下記のような状態になります。作業が終わったら「保存」を選択します。
<img width="1123" alt="スクリーンショット 2019-06-28 22.17.48.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321507/dfc4fe33-7a71-6c36-503b-80f99560bb60.png">

ここまででコンソール上での作業は完了です。


3. EC2インスタンスにSSH接続
この手順ではターミナルを使用してサーバに接続します。

* ターミナルを起動し下記コマンドを実行します。2箇所修正する必要があります。


```
$ sudo ssh -i "/xxxx/xxxx/Downloads/webserver.pem" ec2-user@"インスタンスIPアドレス"
```

* -iのオプションのあとは証明書のフルパスが必要です。1の手順で格納した証明書のフルパスを記載します。

*インスタンスIPアドレスは作成したインスタンスのIPアドレスになります。EC2ダッシュボードで作成したインスタンスを選択し「IPv4 パブリック IP」に記載されているIPアドレスを入力します。

* sudoコマンドを実行しているので、パスワードを求められます。MacのログインパスワードでOKです。

* ログイン出来ると下記の画面が出てきます。

<img width="347" alt="スクリーンショット 2019-06-28 22.52.32.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321507/083acbb7-175d-1845-5765-5856bf130d47.png">


* nginxをインストールします。下記コマンドを実行してください。
（通常はyum install nginxなどのコマンドでインストールしますが、AWSのこのインスタンスだとエラーが出ます。）
* コマンド実行途中に「Is this ok [y/d/N]:」と出て処理が止まりますが、yを入力しエンター押してください。

```
$ sudo amazon-linux-extras install nginx1.12
```


* 完了したらnginxを起動させる為、下記コマンドを実行しnginxを起動してください。

```
$ sudo systemctl start nginx
```

* ここまで実行したら最後は確認です。ブラウザのURL上で「http://IPアドレス」を入力すればnginxの起動を確認できます。

<img width="1203" alt="スクリーンショット 2019-06-29 10.49.21.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321507/52750903-508e-a0e2-0bea-c8660ac0a5d6.png">


###最後に
以上で終わりになります。これでAWS上にwebサーバを立てることが出来ました。あとはhtmlファイルだとかを所定の場所に格納すればwebサーバとして運営させることが出来ます。


####おまけ
私がこの手順を作成する前に一度自分でサーバを構築しましたが、1回目2時間ほどかかってしまいました。その時の原因を書いておきます。

・セキュリティグループのSSHに記載するIPアドレスを間違えていた。
これ地味にやりがちです。IPのコピペミスってました。設定見ても問題ないはずなのに接続出来ないなんで！？ってずっと調べてました。

・nginxの確認画面が見れなかった
nginxをちゃんと起動させても何故かいつまでも接続出来ないって状況になりました。nginxも起動してるのに何故！？と。最終的にはキャッシュが残ってるせいと判明しました。キャッシュ読み込みなしで更新した所普通に見れました。

これらのせいで1回目は構築に2時間ほどかかりました。。
ただ、わかったあとで構築したら3分で終わりました。

ITは知ってるか知らないかが大きな差になりますねー


####注意事項
この手順は本当に最低限しかやってません。
サーバ再起動したらnginx起動しないといけないし、IPアドレスも再起動の度に変わるしHTTPS通信も出来ないです。ここから先は興味があれば調べてみてください。


何か不明点とか、書いてる通りにやったけど出来なかったとかあったら教えて欲しいです。