AWSでELB環境を作るための覚書

# はじめに
EC2を東京リージョンの3つのAZに作って、ロードバランサ(ELB)でアクセスを分散するようにします。

# 全体概要
下記のツリーのようにオブジェクトを作っていきます。「AAA」は任意の名前に読み替えしてください。

* VPC AAAvpc01 10.0.0.0/16 Tokyo VPCにインターネット接続を可能にして、3つのAZにそれぞれサブネットを作ります。
    * ルートテーブル AAARouteTable1
    * インターネットゲートウェイ AAAInternetGW1 0.0.0.0/0
    * サブネット 
        * AAASubnet1 10.0.0.0/20 AZ:ap-northeast-1a
        * AAASubnet2 10.0.16.0/20 AZ:ap-northeast-2c
        * AAASubnet3 10.0.32.0/20 AZ:ap-northeast-3d
* EC2 3つのサーバをそれぞれ↑のサブネットに置いて、Load Barancerでつなぎます。
    * AAAnode01@AAASubnet1
        * セキュリティグループ AAASgEC01
            * SSH 22/TCP from 0.0.0.0/0
            * HTTP 80/TCP from 0.0.0.0/0
    * AAAnode02@AAASubnet2
    * AAAnode03@AAASubnet3
    * ロードバランサ AAAELB01
        * ターゲットグループ AAAELBTARG01
            * AAAnode01,AAAnode02,AAAnode03
        * セキュリティグループ AAASgELB01
            * HTTP 80/TCP from 0.0.0.0/0
 
## VPCの作成
* 東京リージョンでVPC作成画面を開きます。名前とCIDRを入力してVPC作成ボタンを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940466/5cf86a97-bada-b369-f445-232d3bcd5efe.png)
* VPCができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940466/84af2821-57c8-ce64-1774-4ed04be7fc08.png)


### インターネットゲートウェイの作成
* 名前を入れて作成ボタンを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940466/0237f97b-b69e-11ba-059c-369affa02146.png)
* インターネットゲートウェイができました。このままVPCにアタッチします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940466/1f7fc195-cf2e-01a0-d085-dd69694cbd8c.png)
* 作成したVPCを選んでインターネットゲートウェイのアタッチボタンを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940466/30c3d896-3370-8fa9-f496-6fa35d0e8cd3.png)
* アタッチされました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940466/a9a9323e-9a1a-a2d7-f984-f47374f18905.png)


### サブネットの作成
* サブネット作成画面を開きます。
* サブネット名、アベイラビリティゾーン(AZ)およびCIDRを入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940466/7fb4b582-cbe2-f0d4-6a93-21fd808da2e1.png)
* 新しいサブネットを追加ボタンを押して、次のサブネットの情報を入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940466/65873322-eba5-e3f9-b0f6-2bf6beb98c94.png)
* もう一回新しいサブネットを追加ボタンを押して、最後のサブネットの情報を入力したら、サブネットを作成ボタンを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940466/f29c1abd-f8a8-d9b8-423f-f29e6ef634e0.png)
* Subnetができました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940466/0ae2501b-32a0-0af0-1e53-c9f327c406d7.png)

### ルートテーブルの編集
* ルートテーブルはVPC作成時に作られるので、これを編集します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940466/152c1876-be2b-1281-aa5b-4e970a98f221.png)
* わかりやすいように名前を付けます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940466/983cb756-cda2-c756-79b9-5f8ddd82c6c5.png)
* アクションからサブネットの編集を選びます。3つのサブネットを選択して保存ボタンを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940466/d8cc47b6-a381-2817-199e-c1ccdd596e23.png)
* ルートの編集画面でインターネットゲートウェイを追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940466/0139ba4f-d9db-55d5-54b6-745cfe9828e7.png)
* ゲートウェイの追加が完了しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940466/7afcd235-2f88-fdbe-0178-d593af6fae20.png)

## サーバの作成
EC2サーバを3つ作って、ロードバランサをかぶせます。
### EC2を作成する(3つのサブネットにそれぞれ一つずつ作ります)
* EC2のインスタンス画面からインスタンスを起動画面を開きます。Amazon LinuxのX86で選択ボタンを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940466/9a603f15-27cc-a135-a6f4-9ec44fc5e9bc.png)
* インスタンスタイプはt2.microを選択して、次のステップに進みます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940466/c6e4b992-14df-a26c-ff51-e90ee5f88b2a.png)
* VPC、サブネットおよび自動割り当てパブリックIPを指定して、次のステップに進みます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940466/4ad5cd10-fd4e-14ef-03b3-8fcd78fdc3b6.png)
* ストレージはそのままで、次のステップに進みます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940466/d4843305-4ce4-9d84-4aa3-102ea8fe1e47.png)
* タグの追加で名前だけ付けて、次のステップに進みます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940466/f9a3b7d9-cade-3c35-3baa-87a46d27f914.png)
* セキュリティグループに名前を付けて、HTTPを追加して確認と作成ボタンを押します。2つめのEC2サーバを作るときは既存のセキュリティグループとして再利用できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940466/6fea0d5e-7d45-c637-b893-bd6ecbab7b7c.png)
* 確認画面で確認して起動ボタンを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940466/a49c5091-a48d-0190-294a-9aec400f2b6f.png)
* キーペアを選んでインスタンスの作成を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940466/0d8f2349-7506-db8f-8294-f99cd9c5738c.png)
* インスタンスの作成が開始されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940466/3279e307-4a34-45c3-a188-d1e2c585141f.png)
* 作ったEC2でhttpdを立ち上げておきます。

```
sudo yum install httpd -y
sudo systemctl enable httpd.service
sudo usermod -a -G apache ec2-user
sudo systemctl start httpd
```
* この調子でEC2を3つ作ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940466/e4bd8ae7-67ba-e2ea-ad0f-422d427fb0b1.png)

### ロードバランサを作る。
* ロードバランサの画面でロードバランサの作成画面を開きます。Application Load Balancerの作成ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940466/6b9ddd35-f176-0a8d-aa39-cdecf503bcae.png)
* ロードバランサに名前を付けます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940466/1336bc84-d72f-ea77-a895-c48a3f73ac77.png)
* VPCとアベイラビリティゾーンを選んで次の手順に進みます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940466/e151288d-8cbe-f286-8615-fb68957f575a.png)
* セキュリティグループを作って次の手順に進みます。ここではHTTPだけを通すことにしました。EC2用に作ったセキュリティグループとは別にします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940466/5442afd6-68de-4a10-923f-1b4b0c7469fc.png)
* ターゲットグループに名前を付けます。ターゲットの種類はインスタンスで。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940466/04174882-a53d-d215-3e7d-cedd241dabf3.png)
* ターゲットグループにターゲットとしてEC2の3つを追加して、次の手順へ進みます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940466/7081d00f-5029-7812-3260-f4418d1bedc2.png)
* 確認してロードバランサを作ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940466/23b93625-adbc-4c56-5cce-60d8ad6096ee.png)
* ロードバランサが完成しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940466/3772e1f4-0927-aa1f-df99-ff7f7d525be0.png)

## 接続テスト
* 作成したロードバランサを通してEC2に接続できることが確認できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940466/a03b0416-553a-6971-8c41-6a27918bea95.png)
* EC2のうち、2台を止めても問題なく上記の接続ができました。

# おわりに
ロードバランサは負荷分散と、データセンターであるAZを分けることによって災害対策になるということです。改善点が見つかったら少しずつ修正していきたいと思います。

## 注意点
* この構成ではロードバランサ経由でなく、EC2に直接インターネットから接続できるようになっているので、完成後にEC2のセキュリティグループでHTTPを閉じるのがよいと思われます。
* 基本的にAWSの無料枠を使っていろいろ試しているのですが、この試みをした後にELBを動かしっぱなしにしたことにより、料金が発生していました。EC2も若干はみ出しております。気をつけねば。
    * [参考](https://aws.amazon.com/jp/elasticloadbalancing/pricing/):Application Load Balancer が実行される時間に対して 1 時間単位または 1 時間未満で、また時間ごとのロードバランサーキャパシティーユニット (LCU) 使用量で課金されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940466/23abee99-bf46-7788-38e9-bb4d43780831.png)