今さら聞けないAWSでロードバランサーを使ったWEBサイト構築手順(サーバー編)

第3回目はサーバー編ということで、主EC2を作成していきます。

## 構成図
構成図でいうと赤枠部分の設定をしていきます。

![20220901_server.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101744/cef5e205-ae9a-82dc-b212-8103f5e32279.png)


### セキュリティグループの作成
まずロードバランサー、踏み台サーバー、WEBサーバのセキュリティグループを作成します。
ロードバランサーのセキュリティグループだけ先に作ります。
必要最低限な設定をしますので、それぞれ以下の設定となります。

| 役割 | 名称 | 許可ポート | アクセス元 |
| --- | --- | --- | --- |
| ロードバランサー | web-system-alb-sg | https(443番ポート) |どこからでも許可|
| 踏み台サーバー | web-system-bastion-sg | SSH(22番ポート) |自分のグルーバルIPアドレス|
| WEBサーバー | web-system-sg | http(80番ポート) |ロードバランサーからのみ|
| WEBサーバー | web-system-sg | SSH(22番ポート) |踏み台サーバーからのみ|


・ロードバランサーのセキュリティグループ作成

ロードバランサーのセキュリティグループから作成します。
AWSマネジメントコンソールからEC2へ移動します。
「セキュリティグループ」をクリックします。
![sg_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101744/a6b549c0-59ea-9f2f-9db4-93198f7340af.png)

次に「セキュリティグループを作成」をクリックします。
![sg_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101744/00b8c080-f7d0-0a70-263a-901de55eefd6.png)

セキュリティグループの名称、説明を入力します。例では「web-system-alb-sg」とします。
VPCはネットワーク編で作成したVPCを選択します。
さらにルールを追加をクリックします。
![sg_03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101744/0eeac331-588e-f07e-2f93-125c79e8db0f.png)

タイプ「HTTPS」
ソース「Anywhere-IPv4」を選択します。
![sg_04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101744/d3526d8a-d45d-6440-2c55-35827690c828.png)

最後に「セキュリティグループの作成」をクリックします。
![sg_05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101744/7ffc0740-3793-779f-0809-d3b127564561.png)

同じ要領で踏み台サーバー用とWEBサーバー用のセキュリティグループを作成します。

AWSマネジメントコンソールからEC2へ移動します。
「セキュリティグループ」をクリックします。
![sg_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101744/a6b549c0-59ea-9f2f-9db4-93198f7340af.png)

次に「セキュリティグループを作成」をクリックします。
![sg_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101744/00b8c080-f7d0-0a70-263a-901de55eefd6.png)

セキュリティグループの名称、説明を入力します。例では「web-system-bastion-sg」とします。
VPCはネットワーク編で作成したVPCを選択します。
さらにルールを追加をクリックします。
![sg_06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101744/4ed1466f-2e8d-5d7a-7c12-9a4e840a30aa.png)

タイプ「SSH」
ソース「マイIP」を選択します。
![sg_07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101744/1f85b648-1dc7-a735-3ca4-f19ad7f9dc09.png)
これで今作業をしている環境のグローバルIPアドレスからのみ踏み台サーバーにSSHできます。

最後に「セキュリティグループの作成」をクリックします。
![sg_08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101744/3f2612d9-c1e4-c76e-c468-323d8b0ec7a8.png)

3つ目にWEBサーバー用のセキュリティグループを作成します。
AWSマネジメントコンソールからEC2へ移動します。
「セキュリティグループ」をクリックします。
![sg_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101744/a6b549c0-59ea-9f2f-9db4-93198f7340af.png)

次に「セキュリティグループを作成」をクリックします。
![sg_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101744/00b8c080-f7d0-0a70-263a-901de55eefd6.png)

セキュリティグループの名称、説明を入力します。例では「web-system-sg」とします。
VPCはネットワーク編で作成したVPCを選択します。
さらにルールを追加をクリックします。
![sg_09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101744/241d8dda-9219-67a5-f151-50adc60f88b0.png)

1つ目は
タイプ「HTTP」
ソース「ロードバランサーのセキュリティグループ(web-system-alb-sg)」を選択します。
これでロードバランサーからのHTTP通信だけ許可するルールになります。

2つ目は
タイプ「SSH」
ソース「ロードバランサーのセキュリティグループ(web-system-bastion-sg)」を選択します。
これで踏み台サーバーからのSSH通信だけ許可するルールになります。

以下の例ではセキュリティグループIDになっていますがソースの中から対応するセキュリティグループを選んでください。
![sg_10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101744/e3cc7b01-f70f-020a-598c-f16ee6fea91e.png)

以上でセキュリティグループの作成は完了です。

## EC2作成
次にEC2を作成します。
まず踏み台サーバから作成します。

AWSマネジメントコンソールからEC2へ移動します。
「インスタンス」をクリックします。
![ec2_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101744/58a5c5c1-2b21-eef4-bad7-71c7cdbc5653.png)

「インスタンスを起動」をクリックします。
![ec2_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101744/966057ec-27b3-d6f3-5e04-6ebaf0254b9e.png)

インスタンス名を入力します。例では「web-system-bastion」とします。
Amazon マシンイメージとアーキテクチャはそのままとします。
必要に応じて適宜変更してください。
![ec2_03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101744/32966bc5-9f60-ae15-cc38-55763db86aa9.png)

インスタンスタイプは「t2.micro」とします。こちらも必要に応じて変更してください。
インスタンスタイプを選択した後に「新しいキーペア作成」をクリックします。
既にキーをさ作成済みの場合は作成不要です。
![ec2_04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101744/7800600e-6b11-5185-5a92-e157e40e665c.png)

キーペア名を入力します。例では「web-system-key」とします。
キーペアのタイプとプライベートキーファイル形式はそのままで問題ありません。
「キーペアを作成」をクリックします。
![ec2_05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101744/458adc67-5967-cd52-f721-cc04064659f9.png)

キーペアが作成されたことを確認します。
![ec2_06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101744/9ffc5447-ad1d-2a05-be88-8a7610b895b5.png)

次にネットワークの設定をします。
「変更」をクリックします。
![ec2_07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101744/39ec0810-58bd-e81d-c320-e60cc72b4952.png)
VPCはネットワーク編で作成したVPCを選択
サブネットはネットワーク編で作成したPulicサブネットを選択
セキュリティグループは先ほど作成した「web-system-bastion-sg」を選択します
![ec2_08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101744/3bae5857-23f0-30b0-f62d-696ffa768e84.png)

最後に画面右下の「インスタンスを起動」をクリックします。
![ec2_09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101744/20886b70-62ae-b5af-2698-a082312c0f7e.png)

## Elastic IP適用
起動した踏み台サーバーにElastic IPを適用して外部からSSHでアクセスできるようにします。

AWSマネジメントコンソールからEC2へ移動します。
「Elastic IP」をクリックします。
![ec2_10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101744/6e4455ed-f4f1-153e-2018-22fe93971e56.png)

次に「Elastic IPアドレスを割り当てる」をクリックします。
![ec2_11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101744/cbb3b414-cffb-a30d-225b-c9d96f44e655.png)

タグに「Name」を指定します。例では「web-system-bastion」とします。
![ec2_12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101744/2d19edb4-4246-2fa5-9975-69ff119b68a4.png)

Elastic IPが作成されたことを確認します。
作成したElastic IPを先ほど作成した踏み台サーバーに適用します。

「アクション」→「Elastic IP アドレスの関連付け」を選択します。
![ec2_13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101744/78177059-8521-902f-04c4-532f964ed092.png)

リソースタイプから「リソース」を選択します。
インスタンスは作成した踏み台サーバーのインスタンスを選択します。
最後に「関連付ける」をクリックします。
![ec2_14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101744/6bd893fb-2b31-bd94-99ce-cde806fe6045.png)

インスタンスの状態が「実行中」
ステータスチェック「2/2のチェックに合格しました」
となっていることを確認します。
![ec2_15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101744/5d439d20-eefa-4f3a-4fdf-601c7f8c446b.png)
また関連付けしたパブリックIPv4アドレスが適用されていることを確認します。

作成した踏み台サーバにログインできるか確認しましょう。
web-system-key.pemは作成した鍵で18.176.183.111はElastic IPです。お使いの環境に合わせて読み替えてください。
```
$ ssh -i web-system-key.pem ec2-user@18.176.183.111
```

### WEBサーバー作成
次にWEBサーバを作成します。
先ほどの踏み台とほぼ同じ要領になります。

AWSマネジメントコンソールからEC2へ移動します。
「インスタンス」をクリックします。
![ec2_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101744/58a5c5c1-2b21-eef4-bad7-71c7cdbc5653.png)

「インスタンスを起動」をクリックします。
![ec2_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101744/966057ec-27b3-d6f3-5e04-6ebaf0254b9e.png)

インスタンス名を入力します。例では「web-system」とします。
Amazon マシンイメージとアーキテクチャはそのままとします。
必要に応じて適宜変更してください。
![web-server_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101744/2c384cbd-f0e5-2d86-5e9e-f87ae27e106f.png)

キーペア名は先ほど作成した「web-system-key」を選択します。
新規で作成しても問題ありません。
![web-server_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101744/a3ffb0be-71e6-129d-2b6c-c9afdae99b88.png)

次にネットワークの設定をします。
「変更」をクリックします。
![ec2_07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101744/39ec0810-58bd-e81d-c320-e60cc72b4952.png)
VPCはネットワーク編で作成したVPCを選択
サブネットはネットワーク編で作成したPrivateサブネットを選択
セキュリティグループは先ほど作成した「web-system-sg」を選択します
![web-server_03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101744/f7d50b80-b48c-c413-4446-b736f9bb00ee.png)

最後に画面右下の「インスタンスを起動」をクリックします。
![web-server_04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101744/791a2506-01cb-d9bd-9872-0329783bb71d.png)

インスタンスの状態が「実行中」
ステータスチェック「2/2のチェックに合格しました」
となっていることを確認します。
そしてプライベートIPアドレスのみ振られていることを確認します。
![web-server_05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101744/ed2f9d15-b103-3e50-ed6c-409c561d9aed.png)

WEBサーバーに振られたプライベートIPアドレスで踏み台サーバーからSSHでログインできることを確認しましょう。
ログインできない場合はセキュリティグループの設定が間違っている可能性があります。

踏み台サーバーから以下のコマンドでログインできることを確認します。
```
ssh -i web-system-key.pem ec2-user@10.150.20.15
```
web-system-key.pemは作成した鍵で10.150.20.15はプライベートIPアドレスです。お使いの環境に合わせて読み替えてください。
鍵は踏み台サーバーにコピーしておきます。catコマンドで開いてコピー&ペーストのコピーでも問題なく動作します。
鍵の権限変更だけ忘れないで実行してください。

```
$ chmod 400 web-system-key.pem
```

### WEBサーバー設定
WEBサーバーにログインできましたら、Apacheのインストールと起動します。

以下のコマンドでApacheのインストールをします。
```
sudo yum install httpd -y 
```

次に起動します。さらに自動起動も設定します。
```
$ sudo systemctl start httpd
$ sudo systemctl enable httpd
```

起動していることを確認します。
```
$ sudo systemctl status httpd
```
active (running)となっていることを確認します。

次にサンプルページを作ります。
viエディタを使う必要はありませんので、お好きなエディタを使用して「web-system」とだけ書いてindex.htmlを作成します。
```
sudo vi /var/www/html/index.html
web-system
```

以上でサーバー編は終了です。
次回はロードバランサー編で最終回になります。