AWS入門 EC2を使ったWebサーバー構築

前 [AWS入門 AWSアカウントの登録から静的サイトの表示まで](https://qiita.com/tseno/items/7c9ab5d50cb17cb4d16a)
次 [AWS入門 ELBを使った負荷分散（ロードバランサー）](https://qiita.com/tseno/items/2041e82a7f2f8e721a18)

# EC2を使ったWebサーバー構築

## EC2とは

- Amazon Elastic Compute Cloud(EC2)とは、仮想サーバー機能を提供するクラウドサービス。
- 初期費用は不要。スペックと稼働時間に応じて課金される。
- オートスケール機能を利用することで、インスタンスの処理能力を自由に拡張または縮小できる。

## EC2の基本用語

- インスタンス：1台のサーバー
- EBS（Amazon Elastic Block Store）：サーバーのハードディスクに相当する仮想ディスク
- AMI（Amazon Machine Image）：サーバーのインストールするOSや各種ミドルウェアやアプリのイメージ。同じ構成のインスタンスをいくつも起動できる。

## EC2インスタンスの起動

### EC2インスタンスの生成

- 東京リージョンを選択して、EC2を選択する。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/88686/f7e9ff76-9a6b-541b-04c3-b78ce16e29e4.png)

### Amazonマシンイメージ（AMI）の決定

- Amazon Linux AMIは、EC2上で実行するアプリのために、多数のAWS APIツールがインストール済み。
- セキュリティとメンテナンスアップデートを継続的に提供している。
- yumコマンドを使って、パッケージを自由に追加できる。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/88686/612ae62a-6252-c46c-9381-b146a8c69f66.png)

### インスタンスタイプの選択

- 無料利用枠の対象である、`t2.micro`を選択する

![image.png](https://qiita-image-store.s3.amazonaws.com/0/88686/35ada794-d686-15f2-d7f3-7f9ac3177948.png)

### インスタンスの詳細の決定

- そのままで、ストレージの追加を押す。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/88686/0916747b-61d7-7485-05e4-69a81d412a10.png)

### ストレージの追加

- ストレージは、デフォルトの8GiB、汎用SSDのままで、タグ付の追加を押す。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/88686/5e07138e-ac8c-99bf-f5bf-7f006bb34b1d.png)

### インスタンスのタグ付け

- タグに、Name=WebSampleを追加して、セキュリティグループの設定を押す。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/88686/50780acd-91ee-0db2-4cf4-fe7ccea7e196.png)


### セキュリティグループの設定

- 新しいセキュリティグループを作成する（セキュリティグループ名：WebSample、説明：WebServer Group）
- HTTPを追加する。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/88686/d9a46ee3-98ed-8a74-19ec-823406e6ebe4.png)


### 動作確認

- 確認して、作成を押す。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/88686/05783b7c-c3b0-62fd-f277-e9a505fb1ce7.png)

- 新しいキーペアの作成を選択して、キーペア名に、AWSkeypairを入力して、ダウンロードする。
- キーペアをダウンロードしたら、インスタンスの生成を押す。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/88686/faa4adec-a036-fc45-e415-6b00a80131dc.png)

- インスタンス生成完了

![image.png](https://qiita-image-store.s3.amazonaws.com/0/88686/d58ab7eb-ffd2-2d26-b1f6-463c356abacc.png)

- 固有のインスタンスIDが設定される。インスタンスの状態がrunningになっていれば、インスタンスが稼働している。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/88686/aa31272a-9394-a171-8c14-21e7f769d500.png)

## EC2インスタンスの状態確認

### EC2へのリモート接続

- EC2インスタンス作成時にダウンロードしたAWSkeypair.pemを~/.sshディレクトリにmvする。
- AWSkeypair.pemの権限を400に変更する。

```sh
$ chmod 400 AWSkeypair.pem
```

- ec2にログインする。

```ssh
$ ssh -i .ssh/AWSkeypair.pem ec2-user@13.230.7.103
The authenticity of host '13.230.7.103 (13.230.7.103)' can't be established.
ECDSA key fingerprint is SHA256:eBLnE0yOZMLCoZJ2S6D/7gI2sDZ1MQayt3INE1RV+rA.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '13.230.7.103' (ECDSA) to the list of known hosts.

       __|  __|_  )
       _|  (     /   Amazon Linux AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-ami/2018.03-release-notes/
10 package(s) needed for security, out of 21 available
Run "sudo yum update" to apply all updates.
[ec2-user@ip-172-31-42-150 ~]$
```

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

- yumのアップデート。最後にComplete!と出ればOK。

```sh
$ sudo yum -y update
```

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

- httpdのインストール。最後にComplete!と出ればOK。

```sh
$ sudo yum install -y httpd
```

- httpdの起動。

```sh
$ sudo service httpd start
Starting httpd:                                            [  OK  ]
```

### 動作確認

- パブリックIPか、パブリックDNSにアクセスして、Apacheの画面が出ればOK。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/88686/903e2cb2-f5d0-d1a1-8828-f193f52c4b4c.png)

### 自動起動の設定

- httpdを自動起動するためには、`sudo chkconfig httpd on`コマンドを使う。
- 自動起動を解除するためには、`sudo chkconfig httpd off`コマンドを使う。

```sh
$ sudo chkconfig --list httpd
httpd           0:off   1:off   2:off   3:off   4:off   5:off   6:off
$ sudo chkconfig httpd on
$ sudo chkconfig --list httpd
httpd           0:off   1:off   2:on    3:on    4:on    5:on    6:off
```

## Webコンテンツのアップロードと動作確認

### EC2へのアップロード

- ローカルから実行

```sh
scp -i .ssh/AWSkeypair.pem ~/index.html ec2-user@13.114.66.79:
```

- EC2で実行

```sh
$ sudo cp index.html /var/www/html/
```

### 動作確認

![image.png](https://qiita-image-store.s3.amazonaws.com/0/88686/91ac56b7-d8ca-28b7-d8b5-ec3e3bae5b1f.png)

### EC2インスタンスの開始／停止／再起動／削除

- EC2は稼働している間は、課金されているので、利用しないインスタンスは停止しておく。
- EBSはサイズにによって課金される。インスタンスが不要になった時は、すみやかに破棄する。
- サーバーの再起動はIPアドレスは変わらないが、停止／起動はIPアドレスが変わる。

参考
[Amazon Web Servicesではじめる新米プログラマのためのクラウド超入門](https://www.shoeisha.co.jp/book/detail/9784798144696)