Amazon AutoScalingによるEC2サーバの自動スケーリング
AWSクラウドでは、サービスを提供するサーバについて、外部アクセス量の増減によって、少なければサーバ台数を増やし、多ければサーバ台数を減らして、リソース不足による機会損失や無駄な余剰リソースによる費用増大といった難しいリソース管理を行い、かつ可用性をしっかりキープするといった難しい課題を解決する機能があります。それが、EC2 AutoScaling です。
前の投稿で、AWSの初心者用ハンズオンで、スケーラブルWebサイトをやってみましたが、引き続いて、AutoScalingです。
起動テンプレートの作成
起動テンプレート
EC2AutoScalingによって起動されるインスタンスの起動情報を設定するテンプレート
起動情報とは
- Amazonマシンイメージ(AMI)
- インスタンスタイプ
- ネットワーク設定 等
ハンズオンでは、Cloudformation によって、ネットワーク関係を自動セットアップしてから開始になりますが、ここではVPC、パブリックサブネット、プライベートサブネット、セキュリティグループを手動で用意したら開始します。
EC2ダッシュボードから、「テンプレートの起動」を選択し、「起動テンプレートを作成」をクリック


起動テンプレート名は任意。
今回は、AmazonLinux2(x86)
インスタンスタイプは、t2.micro
さらに下にスクロール

セキュリティグループは事前に作っておく
リソースタグは
AutoScallingされたインスタンスに付く名前
さらに下にスクロール

CloudWatchモニタリングは有効化しておく。
ユーザデータをセット
#!/bin/bash
sudo yum update -y
sudo yum install -y httpd
sudo amazon-linux-extras install epel -y
sudo yum install stress -y
sudo systemctl start httpd
sudo echo `hostname` > /var/www/html/index.html
sudo echo "ClientAliveInterval 60" >> /etc/ssh/sshd_config
sudo echo "ClientAliveCountMax 120" >> /etc/ssh/sshd_config
sudo systemctl restart sshd.service
起動テンプレート作成成功!

「起動テンプレートを表示」をクリック

Auto Scalingグループの作成
AutoScalingグループ
スケーリングの設定を行うコンポーネント
設定内容
- どの起動テンプレートを利用するか
- 何台構成を維持するか
- スケールアウトする最大の台数
- スケールインする最小の台数
- 何をトリガーにスケールするか
EC2ダッシュボードの左メニュー最下部の「AutoScallingグループ」をクリック



Auto Scalling グループ名は任意。
先ほど作成した起動テンプレートを選ぶ
「次へ」をクリック

Auto Scalling するVPCを選ぶ
Auto Scalling 対象となるサブネットを2つ選ぶ

「既存のロードバランサーにアタッチ」をクリック
「ロードバランサーのターゲットグループから選択」
をチェック
Auto Scalling ターゲットグループを選択
「次を」をクリック

今回は「最大キャパシティ」のみ
1→4 に変更
「次を」をクリック

特に指定なし。「次を」をクリック。

特に指定なし。「次を」をクリック。

設定内容を確認し、
「Auto Scaling グループを作成」をクリック

Auto Scalling グループが作成された。Auto Scalling名をクリック。

「アクティビティ」タブをクリックすると、既に0台から1台のEC2が起動されたことが分かる。
スケーラブルWebサイトで稼働したインスタンス以外にAuto Scalling 設定した「AutoScalling-EC2」が起動している。

スケジュールスケーリングの設定
スケジュールスケーリングの設定
- 一度きりの実行や毎日、毎週といったスケジュールを決められる
- マネージメントコンソールから時刻の設定を行う場合、UTCで指定する必要がある
ex. JST 15:30 → UTC 06:30 - 周期的なスケジュールを設定する場合は、終了時刻も設定する
スケーリングポリシー
- ターゲット追跡スケーリング
- ステップスケーリング
- シンプルなスケーリング
ターゲット追跡スケーリング
ターゲット追跡スケーリングは、設定したターゲット値を維持するようにスケールアウト・スケールインを行います。
今回はこちらを設定しました。
ex. 平均CPU使用率を70%~80%で維持など
スケジュールスケーリングによるグループサイズ変更
グループサイズの変更は手動で行えるが、スケジュールをトリガーに自動で変更を行うのがスケジュールスケーリング

「予定されたアクションの作成」をクリック


以下のように、16:00過ぎて、インスタンスが起動された。(インスタンスの起動時間に少しかかる)


「アクティビティ」タブでインスタンス稼働の履歴が確認できる。

「詳細」タブに戻って、ページのリロードをすると、希望する容量=2 最小キャパシティ=2 最大キャパシティ=4
はスケジュールスケーリングの結果で変更されている。
変更された設定は元には戻らないので、手動設定し直すか、スケジュールスケーリングの実行によって、変更することで元に戻すかしなければ戻せない。
