【AWS】ELB（Elastic Load Balancing）とAuto Scaling

# ネットワークサービス

## VPC内で利用できるネットワークサービス

### ◉Elastic Load Balancer（ELB）
- **EC2や特定のIPアドレスへのトラフィックを分散するロードバランシングサービス**
- EC2インスタンス（バックエンドインスタンス）を登録するだけで利用できる

#### ◎Classic Load Balancer（CLB）
- 標準的なロードバランシング
- 複数のEC2インスタンス間で基本的な負荷分散を提供し、リクエストレベルと接続レベルの両方で動作する

#### ◎Application Load Balancer（ALB）
- **リクエストレベル（レイヤー7）**で動作し、トラフィックをリクエストの内容に基づいて、ターゲット（EC2インスタンス／コンテナ／IPアドレス／Lambda関数）にルーティングする
- **HTTPトラフィックおよびHTTPSトラフィックの負荷分散に最適**

#### ◎Network Load Balancer（NLB）
- **リクエストレベル（レイヤー4）**で動作し、IPプロトコルデータに基づいてVPC内のターゲット（EC2インスタンス／マイクロサービス／コンテナー）に接続をルーティングする
- **TCPトラフィックとUDPトラフィック**の両方の負荷分散に最適
- 超低遅延（低レイテンシー）を維持しながら、1秒あたり数百万の要求を処理
- **アベイラビリティーゾーンごとに単一の静的IPアドレスを使用しながら**、突然の不安定なトラフィックパターンを処理するように最適化されている

:::note info
レイヤーとはデータ通信を実現するためのネットワーク構造の設計方針

レイヤー4（トランスポート層）
・ネットワークの端から端までの通信管理（エラー訂正、再送制御等）

レイヤー7（アプリケーション層）
・具体的な通信サービス（ファイル・メールの転送、遠隔データベースアクセスなど）を提供
・HTTPやHTTPS等の通信サービス
:::

#### ◎ELBの特徴
| 特徴 | 詳細 |
|:-:|:-:|
| 高可用性 | トラフィックを**複数のAZ**に分散できる／EC2インスタンスやAZに障害が発生しても**正常なインスタンスとの通信が続けられる** |
| 自動スケーリング | トラフィックの負荷に応じて自動でスケーリングする／ELB自体にも冗長性がある|
| セキュリティ機能 | **SSL復号の機能がある**／バックエンドインスタンスの**負荷軽減や証明書の一元管理**が可能／**ELB自体にもセキュリティグループを設定できる**ため、ELBのみでアクセス制御も可能 |
| ヘルスチェック／モニタリング | 正常に作動していないインスタンスへの**トラフィックの振り分けを停止**して正常なインスタンスとのみ通信する／**スティッキーセッション機能**セッションが確立したインスタンスにユーザーリクエストを送信できる／**Connecting Draining機能**によりELBから切り離してもリクエスト中のインスタンスへ指定秒数の間は通信は切れない |
| クロスゾーン負荷分散 | **複数のAZに登録された全てのインスタンスに対して**、リクエストを均等に分散／**無効になっている場合**、**AZごと**にリクエストを均等に分散するため、AZによって**インスタンス数が異なると全てのインスタンスに均等に分散できない** |
| 外部ELB（Internet-Facing）／内部ELB（Internal） | 外部ELBは**パブリックサブネットに配置し**、バックエンドインスタンスをプライベートサブネットに配置する／内部ELBは外部アクセスできない**プライベートサブネットでのみ利用できる**　|

### ◉Auto Scaling
- **リソースの使用状況をモニタリングし**、状況に応じてEC2インスタンスを**自動でスケールアウト／スケールインするサービス**
- あらかじめ設定した**Amazon Machine Image（AMI）**からインスタンスを起動するため**最新化しておく必要がある**

#### ◎スケーリングプラン
いつ／どのような条件でAuto Scalingを実行するか定義したもの

- 正常なインスタンスを維持するように実行
- 手動でスケーリングを実行
- スケジュールを指定して実行
- CloudWatchのメトリクス（リソースの使用状況）に応じて自動実行

#### ◎自動実行のポリシータイプ
| ポリシータイプ | 説明|
|:-:|:-:|
| シンプルスケーリング | ひとつのポリシーに基づいて実行  |
| ステップスケーリング | CloudWatchのアラーム設定に応じた一連のスケーリングポリシーに基づいて実行  |
| ターゲットトラッキングスケーリング  | 特定のメトリクスのターゲット値を維持するように実行  |

#### ◎Auto Scalingの種類

| 種類 | 対象サービス | 機能 |
|:-:|:-:|:-:|
| EC2 Auto Scaling | EC2 | スケーリングポリシーに基づいてEC2インスタンスをスケーリング  |
| Application Auto Scaling | EC2以外の対象サービス | EC2以外のリソースの使用状況に応じて自動スケーリングする  |
| AWS Auto Scaling | EC2／EC2以外の対象サービス | **自動スケーリングと予測スケーリング機能を持つ**／予測スケーリングで**過去の使用状況を分析し、今後の利用量を予測して適切な利用状況になるように管理する** |

#### ◎起動設定
Auto Scaling実行時に起動する**EC２インスタンスの情報を定義**

:::note info
EC2を構築する際に必要なパラメーター
→AMI／インスタンスタイプ／セキュリティグループなど
:::

#### ◎Auto Scalingグループ
- **EC2インスタンスの管理を行う範囲のこと**
- インスタンスの最小数／最大数／希望数を定義することでその範囲内でEC2インスタンス数が増減する

[![Image from Gyazo](https://i.gyazo.com/e3f5255bd0e6d3b9b7d8f80f04d3ec06.png)](https://gyazo.com/e3f5255bd0e6d3b9b7d8f80f04d3ec06)


#### 参考
https://aws.amazon.com/jp/elasticloadbalancing/?whats-new-cards-elb.sort-by=item.additionalFields.postDateTime&whats-new-cards-elb.sort-order=desc

https://academy.gmocloud.com/qa/20170810/4591

https://ja.wikipedia.org/wiki/OSI%E5%8F%82%E7%85%A7%E3%83%A2%E3%83%87%E3%83%AB

https://aws.amazon.com/jp/about-aws/whats-new/2021/02/application-load-balancer-supports-application-cookie-stickiness/

https://aws.amazon.com/jp/premiumsupport/knowledge-center/public-load-balancer-private-ec2/

https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/AMIs.html

https://docs.aws.amazon.com/autoscaling/application/userguide/what-is-application-auto-scaling.html