AWS WEBサーバー構築

#はじめに
自作Laravelアプリを公開するべくAWSで環境構築した作業メモです。
AWSアカウント作成、AWSネットワーク構築　を事前にやってます。
（投稿順序が逆転してますが、今後投稿予定）

#手順
1. EC2インスタンスを設置する
2. SSHでEC2に接続
3. Apacheのインストール
4. ファイアウォールの設定
5. IPアドレスの固定　ElasticIP

#WEBサーバー構築
##EC2インスタンスを設置する

AWSマネジメントコンソールに入って、サービスの検索窓にEC2と入力し、EC2のダッシュボードに移動する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1007978/eba96d65-ed2c-249a-0b9e-ac0f3176b8ec.png)
左メニューのインスタンスを押し、右上のインスタンス起動を押す。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1007978/eb3c3a2c-99cc-0b52-e462-e10b70cb64b0.png)

### AMI作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1007978/ff48e7e7-c2ea-5978-8e15-a24dea4c45ab.png)
無料枠であるAmazon Linux 2 AMI (HVM), SSD Volume Typeを選択する。

### インスタンスタイプの選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1007978/411e6c6d-05bd-3147-5a1e-c04d1e8de4a8.png)
t2.microにチェックを入れ、「次のステップ：インスタンスの詳細の設定」を押す。(デフォルトで選択されている)

### インスタンスの詳細の設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1007978/99e9f83f-e567-ca57-7402-93d1d2fe1996.png)

インスタンス数：そのまま（１）
購入のオプション：そのまま（チェックなし）
ネットワーク：作成したVPC
サブネット：作成したパブリックサブネット
自動割り当てパブリック：有効
配置グループ：そのまま（チェックなし）
キャパシティーの予約：なし
ドメイン結合ディレクトリ：そのまま（ディレクトリなし）
IAM ロール：そのまま（なし）
CPU オプション：そのまま（チェックなし）
シャットダウン動作：停止
停止 - 休止動作：そのまま（チェックなし）
終了保護の有効化：そのまま（チェックなし）
モニタリング：そのまま（チェックなし）
テナンシー：そのまま（共有）
Elastic Inference：そのまま（チェックなし）
クレジット仕様：そのまま（チェックなし）
ファイルシステム：そのまま（設定なし）

- ネットワークインターフェイス
プライマリIP：10.0.10.10

- 高度な詳細
特になにもしない

右下の「次のステップ：ストレージの追加」を押す。

### ストレージの追加 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1007978/c9efc10e-6c22-89d7-ca9a-eba25b397b81.png)
サイズ：そのまま（８）
ボリュームタイプ：そのまま（汎用SSD）
終了時に削除：そのまま（チェック）
暗号化：そのまま（暗号化なし）

右下の「次のステップ：タグの追加」を押す。

### タグの追加
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1007978/a7b15fdf-d714-b192-1955-c566bfd75b36.png)
キー：Name
値：aws-and-infra-web
インスタンス：そのまま（チェック）
インスタンス：ボリューム（チェック）

右下の「次のステップ：セキュリティグループの設定」を押す。

### セキュリティグループの設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1007978/547c95da-d63b-7418-3549-6841a4cfbdea.png)
セキュリティグループの割り当て：そのまま（新しいセキュティグループを作成する）
セキュリティグループ名：aws-and-infra-web
説明：aws-and-infra-webに変える（日付はそのまま）

右下の「確認と作成」を押す。

### インスタンス作成の確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1007978/45a38ece-2458-f705-3aaf-6ac189a8f96e.png)
これまで設定した内容が表示されるので、ざっと確認する。だいたい合っていれば、右下の「起動」を押す。

### SSHキーペアの設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1007978/76040433-4afa-07c0-0669-9f4315579c01.png)
新しいキーペアの作成を選択
キーペア名：aws-and-infra-ssh-key
キーペアのダウンロードを押し、デスクトップに保存する。
※このファイルは後でダンロードし直せないので消さないように注意

「インスタンスの作成」を押す。

が、エラー発生。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1007978/3e9f3b90-7d83-9de0-ab54-446007020946.png)
インスタンスの詳細の設定のネットワークインターフェースで設定した、サブネットのIPが間違っていた。
誤10.0.10.0
正10.0.10.10

修正後、インスタンスの作成をし成功。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1007978/17a91f94-b093-3a51-7473-db911d084cf4.png)
インスタンス作成完了！！

## SSHでEC2に接続
Macの場合

ターミナルで下記コマンドを実行する。
秘密鍵ファイルの読み書きを厳しくする。

```
$ chmod 600 Desktop/aws-and-infra-ssh-key.pem
```

AWマネジメントコンソールのEC2ダッシュボードに入る。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1007978/5a752b2b-280e-093a-c71f-1b688490854b.png)
作成したインスタンスを選択すると下に表示される詳細のパブリックIPv4アドレスをコピーする。

ログインコマンドを実行する。@以下にコピーしたIPを入力。

```
$ ssh -i Desktop/aws-and-infra-ssh-key.pem ec2-user@52.194.251.7
```
```
The authenticity of host '52.194.251.7 (52.194.251.7)' can't be established.
ECDSA key fingerprint is SHA256:sG+KNgRElh3SiLbYAHdi0dX6XLnp5A+kZrGrVjApSsE.
Are you sure you want to continue connecting (yes/no/[fingerprint])?
```
と聞かれるのでyesを。（これは初回のみ）

```

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

https://aws.amazon.com/amazon-linux-2/
2 package(s) needed for security, out of 5 available
Run "sudo yum update" to apply all updates.
```
と表示されれば無事ログイン成功。

## Apacheのインストール
EC2インスタンスのライブラリのアップデート。

```
$ sudo yum update -y
```
Apacheのインストール。

```
$ sudo yum -y install httpd
```
Apacheの起動。

```
$ sudo systemctl start httpd.service
```

起動確認。

```
$ sudo systemctl status httpd.service
```
```active (running)```と表示されれば起動完了。

Apache自動起動の設定。

```
$ sudo systemctl status httpd.service
```
確認。

```
$ sudo systemctl is-enabled httpd.service
```
```is-enabled ```と表示されればOK。

## ファイアウォールの設定
まず今の状態でブラウザで確認する。
※先ほどコピーしたIPで
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1007978/6b4532c2-5ba9-a7ca-18d1-83efab7a90df.png)
応答せず開けませんとなる。

AWSマネジメントコンソールのEC2ダッシュボードを開く。
該当のVPCを選択し、下に表示されるセキュリティグループのリンクを押す。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1007978/74d7f913-43ca-375a-9b1a-d3c72b24c26f.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1007978/740fddb7-db55-9a14-9062-da9932890556.png)
「インバウンドルールを編集」を押し、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1007978/013cb5bd-27cb-1190-9fda-d50ecd677e0e.png)
「ルールの追加」を押す。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1007978/8c1163ce-b534-c6d3-c61c-ed3700294027.png)
タイプ：HTTP
ソース：任意の場所
右下の「ルールを保存」を押す。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1007978/2c2fdcb7-ded5-e6b9-e89f-53f1c9f19268.png)
再度、ブラウザで確認するとApacheデフォルトページが表示される。

## IPアドレスの固定　ElasticIP
AWSマネジメントコンソールのEC2ダッシュボードを開く。
左メニューのElasticIPを押す。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1007978/bbc70d9e-7659-fd91-07d8-3ddba70dc64a.png)
「ElasticIPアドレスの割り当て」を押す。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1007978/83808a8f-5294-fbf9-75bc-b3adba50d5d4.png)
そのまま、右下の「割り当て」を押すと割り当て完了。

次に割り当てられたElasticIPを選択し、
右上の「ElasticIPアドレスの関連付け」を押す。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1007978/7e3453cd-5d85-e00f-5d49-686176ad1ce6.png)
リソースタイプ：そのまま（インスタンス）
インスタンス：該当のもの選択
プライベートPアドレス：該当のもの選択
再関連付け：そのまま（チェックなし）

右下の「関連付ける」を押し完了。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1007978/d02339a0-3f7f-2e3f-e674-7d47e79cd653.png)
割り当てられたIPv4アドレス(概要に表示されている)をブラウザで接続すると、先ほどと同じApache画面が表示される。ElasticIPの固定成功！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1007978/a875ade4-5ebf-cff8-fd4f-58a307f5378a.png)

※注意
Elacticアドレスはインスタンスに紐づいていないと課金されます。
紐づいてない時や、インスタンス起動停止した時は、アクションから「アドレスの関連付けの解除」→「アドレスの解放」を実施する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1007978/f1051645-f4e7-7543-5202-fe6239e985ad.png)

## 後片付け
料金がかからないように。
### Elasticアドレスの解放
AWSマネジメントコンソールのEC2ダッシュボードを開く。
左メニューのElasticIPを押す。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1007978/f2a6c867-d094-64c4-dc4e-c86618f86421.png)
アクションから「アドレスの関連付けの解除」を押す。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1007978/2c04ac40-ce0e-4720-1ea5-5c5668cce678.png)
「アドレスの関連付けの解除」を押す。
戻ったページで関連付けられたインスタンスが「ー」となっていることを確認。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1007978/525a9b45-4aeb-2129-e577-012be5a2410e.png)

アクションから「ElasticIPアドレスの解放」を押す。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1007978/944ef7ba-a860-de94-912e-73c9498dae59.png)
「解放」を押す。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1007978/6dd30236-3fa1-02dd-fda5-4a87430c6f92.png)
一覧に表示がなくなればOK。

### インスタンスの停止
AWSマネジメントコンソールのEC2ダッシュボードを開く。
左メニューのインスタンスを押す。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1007978/19f0964e-248d-962b-d767-ebf84dfa5a2d.png)
アクションから「インスタンスの状態を管理」を押す。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1007978/604a8c73-bff5-4567-b157-3b64e63777ed.png)
停止にチェックを入れ、「状態の変更」を押す。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1007978/1280f157-37ff-73b7-7f5c-c78dac797f50.png)
「停止」を押す。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1007978/de7af733-6d49-9c70-d04c-77ce0e3aa9c7.png)
一覧のインスタンスの状態が「停止済み」となればOK。

これでElasticアドレスからも、EC2インスタンスからも料金が発生しなくなる。

#参考
https://www.udemy.com/course/aws-and-infra/learn/lecture