内容
この記事はAWS初学者を導く体系的な動画学習サービス
「AWS CloudTech」の課題カリキュラムで作成しました。
https://aws-cloud-tech.com
「冗長性のあるブログサービスを構築する(冗長構成)」のレッスンの続きです。
前回までの構成
前回の記事
https://qiita.com/zakinicof/items/a320268727f92d06a3b4
エンドユーザーから大量の通信があっても、ELBを配置しているので、2台のEC2インスタンスに対しては通信を分散して振り分けてくれる構成でした。
しかし、2台のEC2が処理しきれないほどの通信が大量発生することも想定し、Auto Scalingを設定してEC2を条件に合わせて増減してくれるように構成したいと思います。
具体的には、ELBの配下にAuto Scalingグループを紐づけて、EC2インスタンスを最小2、最大4の範囲でスケーリングをさせます。Auto Scaling全体のCPU使用率を監視するアラームを2つ作り、アラームとAuto Scalingのスケーリングポリシーを紐づけます。CPU使用率が70%以上になったらインスタンスを1台増やし、30%以下になったら1台減るような構成にします。
実施手順
起動テンプレートを作成
起動テンプレートとは、通常手動で作成していたEC2の設定などをひとまとめにしたものです。
- EC2の画面左メニューから
テンプレートの起動
を選択 -
起動テンプレートを作成
を選択 -
起動テンプレート名
を入力(例. LaunchTemplate1) -
テンプレートバージョンの説明
を入力(例. 1.0.0) -
EC2 Auto Scaling で使用できるテンプレートをセットアップする際に役立つガイダンスを提供
にチェックをつける。 -
AMI
は前回作成した自分のAMI
の中から指定 -
インスタンスタイプ
はt2.micro
を選択 -
キーペア
は既に作成してあるものを選択 -
リソースタグ
のタグの追加
を選択 -
キー
にName
、値
にWebServer-Auto
と入力(この起動テンプレートを元にEC2インスタンスが立ち上がった際にここで設定した値が付与される) -
ネットワークインターフェースを追加
を選択 -
セキュリティグループ
はインスタンスに紐づいているものを選択 -
パブリック IP の自動割り当て
は有効化
を選択 -
起動テンプレートを作成
を選択
Auto Scalingグループを作成
1.EC2の画面左メニューからAuto Scalingグループ
を選択
2.Auto Scaling グループ名
を入力(例. Test-AutoScaling1)
3.起動テンプレート
は先ほど作成したものを選択
4.バージョン
はLatest(2)
を選択し、次へ
5.VPC
は作成したVPC、サブネット
はパブリックのものを2つ選択し、次へ
6.ロードバランシング
:既存のロードバランサーにアタッチ
を選択し、前回作成したターゲットグループを作成
7.ヘルスチェックのタイプ
:ELB
にチェックを入れて次へ
8.希望する容量
を2
、 最小キャパシティ
を2
、最大キャパシティ
を4
に設定し次へ
9.通知を設定できるが、今回は飛ばして次へ
10.タグに関しても飛ばして次へ
11.問題がなければAuto Scalingグループを作成
を選択
12.インスタンスの画面に移動し、新たに2台インスタンスが立ち上がっていることを確認
13.ブラウザでブログが閲覧できることを確認する。
CloudWatchでアラームを設定する
- CloudWatchの画面を開き、左メニューの
アラーム
を選択 -
アラームの作成
を選択 -
メトリクスの選択
を選択 -
メトリクス
からEC2
を選択、Auto Scaling グループ別
と進む。 - 先ほど作成したAuto Scalingグループの中から
メトリクス名
がCPUUtilization
のものを選択 -
メトリクスの選択
を選択 -
条件
の中のCPUUtilization が次の時...
はより大きい
を選択、... よりも
の値は70
に設定 -
その他の設定
タブを開き、欠落データの処理
の項目は欠落データを不正(しきい値を超えている)として処理
を選択、次へ進む。 -
SNS トピックの選択
の項目は既存のものが無ければ新たに作成し、次へ -
アラーム名
を入力して次に進む。(例. CPU_High) - 設定に問題が無ければ
アラームの作成
を選択 - 上記と同じようにCPU使用率が30%以下の場合のアラームも続けて作成する。
アラームとスケーリングポリシーを紐づける
- Auto Scalingの画面に移り、先ほど作成したAuto Scalingグループを選択
-
自動スケーリング
タブを選択し、ポリシーを追加(Create dynamic scaling policy)
を選択 -
ポリシータイプ
はシンプルなスケーリング
を選択 -
スケーリングポリシー名
を入力(例. CPU_add) -
Cloud Watchアラーム
は先ほどのCPU_High
を選択 -
アクションを実行
は追加
、1
、キャパシティユニット
を選択 -
別のスケーリングアクティビティを許可するまでの秒数
は30
とし、作成
を選択 - 同じ要領でインスタンスを減らすポリシーも作成する。
機能を確認する
EC2インスタンスに手動で負荷をかけ、Auto ScalingとCloud Watchの機能を確認します。
- インスタンスの画面に移り、
WebServer-Auto
のインスタンスを選択し、接続
を選択 - 右下の
接続
を選択するとブラウザでターミナルの画面が開く。 - 負荷をかけるコマンド
yes >> /dev/null &
を4回程度実行する。 -
top
コマンドを実行し、CPU使用率が高くなっていることを確認する。 - もう一方の
WebServer-Auto
のインスタンスでも同様の手順を行う。 - Cloud Watchの画面に移り、左のメニューから
メトリクス
を選択 - 作成したAuto Scalingの
CPUUtilization
を選択し、画面上部のグラフでCPU使用率が上昇するまで数分待つ。 - 左のメニューから
アラーム
を選択し、CPU_High
がアラーム状態
となっていることを確認する。 - EC2の画面に移り、Auto Scalingが発動して、インスタンスが新たに起動していることを確認する。
- ブラウザのターミナルに戻り、
top
コマンドでプロセス番号を確認し、kill プロセス番号
を実行、バックグラウンドで動いているプロセスを停止させる。(kill {4060..4061}
とするとまとめて削除できる) - もう一方のインスタンスも同様の処理を行う。
- 再びCloudWatchのアラームを確認し、CPU利用率が下がるのを待つ。
- しばらく待つとEC2インスタンスの画面でも最大4台起動していたインスタンスが2つになっていることが確認できる。
最後に
インスタンスを終了するだけだと、Auto Scalingの機能で再びインスタンスが立ち上がってしまうので、Auto Scalingを削除した後にインスタンスを終了してください。