AWSのEC2へのアクセス分散と自動拡張について

##ELB（イー・エル・ビー）
外部からの通信リクエストを分散をさせたい場合、AWSでは"ELB"を利用します。
ELBには、
CLB(Classic Load Balancer)
ALB(Application Load Balancer)
NLB(Network Load Banancer)
の3種類があります。
[参考サイト](https://aws.amazon.com/jp/elasticloadbalancing/)
###ロードバランサ
インターネット等の外部ネットワークからのリクエストを複数のサーバに割り振る装置です。これによって、ネットワークの負荷を分散（ロードバランシング）することができます。
パソコン=>インターネット=>ロードバランサ=>サーバ、、、がいくつもある感じです。
###ロードバランサを利用する理由とは
スマートフォンのブラウザで動くゲームAを例に説明します。
このゲームAでは、常時100人以上の人がアクセスしています。このゲーム用のサーバは同時に100アクセスであれば1台のサーバで対応できるものの、ブラウザのゲームなので画面が変わるたびにアクセスが発生します。そうなると常時100人以上の人がアクセスしている場合、サーバへのアクセス数はその数倍となる300〜500アクセスとなります。そのため、1台のサーバでは処理できません。
このような時にロードバランサを利用します。例えば、ロードバランサに6台のサーバを配下に持たせます。こうすることで1台では100アクセスしか対応できなかったものが、6台あるので600アクセス(6台×100アクセス)まで対応できるようになります。
さらにこのゲームでは6台配下に持たせているので、1台サーバが停止しても500アクセス受け付けられるのでユーザには影響ありません。つまり、サーバ障害に強い構成にすることができます。
###SSL
SSLという暗号を利用したWeb用の通信(HTTPS通信)が推奨されていますが、ロードバランサを利用することでロードバランサにそのSSLの設定を行うことで、ロードバランサ配下のサーバにはSSLの設定が不要にすることができます。
これによって、サーバ自体の設定を簡略することができます。
###ELB設定例
AWSのALBやCLBには無料枠がありますが、**2台以上のELBを稼働させたりELBを通過した一ヶ月の通信量が15GBを超える場合は課金が発生します。**
ELBの配下に接続するEC2インスタンスは事前準備をしてください。またnginxも動いている状態にしておいてください。
**ELBの作成を開始します**
1、AWSのコンソールにサインインします。
2、サービス→EC2をクリックします。
3、ロードバランサをクリック（左側カラムの真ん中あたりにあります）し、「ロードバランサの作成」をクリックします。
4、必要な設定値を入力して、セキュリティ設定の構成をクリックします。
（ALBの名前の入力やHTTP/HTTPSの別、対象VPCとアベイラビリティゾーンのチェックなどを実施）
5、右下にある「セキュリティグループの設定」をクリックしてから、HTTP/HTTPSの別に合わせてセキュリティグループを設定し、設定後ルーティングの設定をクリックします。
6、ターゲットグループの設定値を入力してから「ターゲットの登録」をクリックします。（ターゲットグループの名前を入力したり、配下のサーバの生存確認＝ヘルスチェックで利用するパス等を入力）
7、配下に組み入れるEC2インスタンス選択(チェック)してから「登録済みに追加」をクリックし、追加できたら「次の手順：確認」をクリックします。
8、設定内容を確認して問題なければ「作成」をクリックします。
9、作成が完了したら「閉じる」をクリックするします。
10、サービス→EC2→ターゲットグループ(左のロードバランシングにあります)→ターゲットをクリックし、ステータスがhealthyになってことを確認します。
11、ロードバランサー(左のロードバランシングにあります)をクリックし、説明→DNS名でアクセスできるかを確認します。
これでELB(ALB)の設定が完了です。
もし使わない場合はすぐに削除して、不要な課金が発生しないようにしてください。
###ELBを使う時の注意点
ELBはリクエストを分散できるので便利なのですが、以下のような場合は注意が必要です。
**アプリケーションが1台のサーバで完結することを前提にしている場合**
例えばショッピングサイトでは「商品をカゴに入れる→注文に必要な情報を入れる→最終確認後に注文ボタンを押す→注文が確定する」という一連の流れが発生します。しかしロードバランサによって最初に振り分けられたサーバと別のサーバに振り分けられると、そこで一連の流れが途切れてしまいまた最初からやり直しが必要だったりします。
そこでこのような場合は、ELBでセッション維持の設定を行います。
設定したい場合は、以下のように設定することで設定情報を持つ秒数の間は一定のサーバに振り分けられるようになります。
1、ELBを作成した後に"維持設定の編集"をクリックします。
2、"ロードバランサーによって生成された Cookie の維持を有効化"を選択します。
3、設定情報を持つ秒数を入力します。
なおこれはELBに限らず、ロードバランサを利用する時も同様です。
（設定方法はロードバランサによって異なるので、利用しているロードバランサに合わせて設定方法を確認ください）
なおセッション維持はELBの設定による方法だけでなく、redisなどのKVSを利用する方法等もあります。それぞれメリットとデメリットがあるのでサービスの要件に応じて使い分けるようにしてください。
##AutoScale（オートスケール）
AWSならではのサービスとして"AutoScale"と呼ばれるサービスがあります。
Webサービスには、昼間はほとんどアクセス数はないが夜になるとアクセス数が増えるとか、突発的にアクセス数が増えるといったものがあります。
時間帯によるアクセス数の増減が大きかったり予測ができない場合に役立つのが、AutoScaleです。これによって、必要な時に必要な数のインスタンスを用意することが可能となります。
CPU使用率やトラフィック量を事前に設定しておいた値を超えたらインスタンス台数が増え、その値より下がったら起動するインスタンス台数を減らすといった挙動ができます。AutoScaleでは外部からのアクセスはまずはELBで受けるため、ユーザはその配下のインスタンス台数を意識しなくても大丈夫です。
###AutoScale設定例
※なお課金はEC2インスタンスやELBの利用として発生します。（無料枠もEC2インスタンスやELBに従う）
**起動設定の作成**
1、AWSのコンソールにサインインします。
2、EC2→Auto Scaling グループ(左にあります)クリック→Auto Scaling グループの作成をクリックします。
3、「今すぐ始める」をクリックします。
4、AutoScaleで利用するAMI(今回はAmazon Linux AMI)の「選択」をクリックします。
5、インスタンスサイズを選択(今回は上から2番目をクリックしてます)し、「次の手順：詳細設定」をクリックします。
6、設定名(名前を入力)を入力して「確認画面にスキップ」をクリックします。
7、設定内容を確認し、問題なければ「起動設定の作成」をクリックします。
8、EC2インスタンスで利用するキーペアを選択して「起動設定の作成」をクリックします。(EC2インスタンス作成時と同様に行います)
###AutoScalingグループの作成
1、設定値を入力してから「スケーリングポリシーの設定」をクリックします。
2、「このグループを初期のサイズに維持する」→「次の手順：通知の設定」をクリックします。
これはEC2インスタンスに障害が発生してシャットダウンしても、自動的に1台起動する設定です。
これによって、いつでも必ず1台のEC2インスタンスが動いている状態を作り出すことでサービス全体が停止する状態を防ぐことができます。
なおAutoScaleの発動条件や起動するEC2インスタンスの最大数を設定したい場合は、もう一つの「スケーリングポリシーを使用して（以下略）」の方を選びます。
3、通知に必要な設定値を入力して「次の手順：タグを設定」をクリックします。
AutoScaleが動いた時の通知設定をします。
「通知の送信先」は設定名を、「受信者」の欄には実際に存在するメールアドレスを、通知するイベント種類をチェックしてください。
4、必要に応じてタグの設定をしてから「確認」をクリックします。(問題なければ何も入力せずに確認をクリックで大丈夫です)
タグの設定は任意なので、未設定でも問題ありません。
5、設定値を確認して問題なければ「Auto Scalingグループの作成」をクリックします。
6、「閉じる」をクリックして終了です。