この記事はAWS初学者を導く体系的な動画学習サービス
「CloudTech」の課題カリキュラムで作成しました。
https://kws-cloud-tech.com
## 前回までの環境
前回までのハンズオンでは、以下の図のような冗長構成のブログサービスを作成しました。方法については前回の記事をご覧ください。
https://qiita.com/pd1/items/cf17af9641503e7c1916
はじめに
前回の構成の目的は、冗長化をすることで耐障害性を高め、負荷分散をしていくことになります。しかし、この状態では、キャンペーンなど突然大量の接続があった場合に、準備しておいたEC2以上の対処ができなくなってしまいます。
そこで今回の目的は、前回の弱点を補うため、接続がある一定量、一定期間で増加した場合に、自動的にスケールアウトを行う構成にすることです。また、稼働し続けるとコストがかかってしまうので、スケールインの設定も行います。このような増加・減少を自動で対応することがスケーラビリティのある構成となります。
今回は、CPU使用率を監視して、70%以上でスケールアウト、30%以下でスケールインで設定します。
構成図は下記のようになります。
使用するサービス
主に使うサービスは、
- EC2
- RDS
- ELB
- Cloud Watch
- AutoScaling
です。
実際の手順
起動テンプレートの作成
起動テンプレートとは、EC2を起動するテンプレートのようなもので、AMI・インスタンスタイプ・Key Pair・Securlity groupを設定します。似たようなものに、起動設定がありますが、起動テンプレートは、バージョン管理ができるのに対し、起動設定は毎回設定を1から作らないといけないので、起動テンプレートを使用します。
まず、左のリストより起動テンプレートの作成をクリックして実際に作成していきます。(重要な部分だけピックアップしていきます。)
・テンプレートのバージョン説明
ここを数字で指定することでバージョンの指定ができます。
・Auto Scalingのガイダンス
今回はAuto Scalingとして使用するのでチェックをつける。
・AMI・Securlity group・Public IP・Nameタグの設定
ここの設定がEC2作成時と同じの設定部分になるので、今回は以前作成したものと同じ設定を行なっていきます。Nameタグは、スケーリングによってスケールアウトしたEC2に対して付与されます。
Auto Scaling groupの設定
EC2のページのリストからAuto Scaling Groupをクリックして作成。
・機動テンプレートとバージョン
先ほど作成した起動テンプレートとバージョンを指定します。
・ターゲットグループの作成
前回作成したターゲットグループを指定する。
・ヘルスチェックの指定
ヘルスチェックを行わないと何か障害が起きた場合に、ユーザーが接続できない状態になるので、つけておきます。
・グループサイズの設定
ここでスケーリングする際の最小、最大、希望容量を指定します。
・スケーリングポリシー
スケーリングポリシーは、どのような状態になったらどうするか設定します。あとで、Cloud watchと連携するので無しにしておきます。
・EC2の起動を確認する
最小キャパシティである2つのEC2が立ち上がっているのが確認できます。仮に1つ終了させてみても、再度新しいのが立ち上がるのが確認できます。
Cloud Watchを設定する
アラームの作成を選択。メトリクスの選択をします。メトリクスとは、時間ごとに監視対象の動きをグラフ化したものです。今回は、EC2のAuto Scalingグループで作成しものを対象に、CPUUtilizationというCPU使用率を監視するメトリクスを選択します。
次に条件の設定をします。今回は、CPU使用率が70%以上の時アラームを発動する。CPU使用率が30%以下ならアラームを発動する。の2つの条件で作成します。
設定が終了すると、アラームの箇所で確認できるかと思います。
CPU-LowがCPU使用率30%以下、CPU-Hiが使用率70%以上の設定です。現在EC2は何も負荷がかかっていないのでCPU-Lowがアラートが出ているのが確認できます。
Auto ScalingとCloud Watchの紐付け
では、実際に作成したAuto ScalingとCloud Watchを紐づけていきます。
Auto Scalingのページで自動スケーリングのタブから、スケーリングポリシーを選択します。以下の写真のように、先ほど作成したアラームを設定して、実行するアクションで追加・削除とその個数を選択していきます。
Auto Scalingテスト
それでは、実際にスケーリングするかをテストしていきます。まずにEC2に接続をします。
$ top
のコマンドで接続したEC2のCPU使用率が確認できます。
確認できたら、次に実際に負荷をかけていきます。
$ yes >>> /dev/null &
このコマンドを入力することで負荷をかけることができます。&はバックグラウンドで動かすことができます。このコマンドを4つ程入力すると
図のようにCPUに負荷をかけることに成功しました。
次、Cloud WatchのメトリクスからCPU使用率を確認していきます。
少し時間が経つと、図のように上昇しているのが確認できるかと思います。
スケーリングされているか確認すると
2つあったインスタンスが4つに増えていることが、確認できればスケーリング成功です。
次に、スケールインのテストもします。先ほど入力した負荷をかけるコマンドを停止していきます。
$ kill {topコマンドの1番左のPIDを入力}
その後topコマンドを入力すると、削除されているのが、確認できるかと思います。少し時間が経過したのち、Cloud Watchを確認すると
減少しているのが確認できEC2の方も
起動しているのが2つのみになっていれば成功です。
苦労した点
①起動テンプレートの作成
起動テンプレートを作成した際、パブリックIPの有効化の設定を忘れていて、エラーに引っ掛かり1時間ぐらい悩みました。最後の設定の確認画面の確認をちゃんとします。
②Auto Scalingの負荷テスト
今回Auto Scalingを設定した時点で2つのEC2が立ち上がりましたが、以前使用したものが立ち上がったものと勘違いし、そちらに負荷をかけてテストをしていました。
結果、アラートは無反応でかなり悩みました。
失敗すると、学びも多いので地道にやっていこうと思います。