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
はスケジュールスケーリングの結果で変更されている。

変更された設定は元には戻らないので、手動設定し直すか、スケジュールスケーリングの実行によって、変更することで元に戻すかしなければ戻せない。