2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

スケーラビリティのあるブログサービスを構築する

Last updated at Posted at 2022-01-29

この記事はAWS初学者を導く体系的な動画学習サービス
「CloudTech」の課題カリキュラムで作成しました。
https://kws-cloud-tech.com


## 前回までの環境
前回までのハンズオンでは、以下の図のような冗長構成のブログサービスを作成しました。方法については前回の記事をご覧ください。
https://qiita.com/pd1/items/cf17af9641503e7c1916
スクリーンショット 2021-10-21 23.34.15.png

はじめに

 前回の構成の目的は、冗長化をすることで耐障害性を高め、負荷分散をしていくことになります。しかし、この状態では、キャンペーンなど突然大量の接続があった場合に、準備しておいたEC2以上の対処ができなくなってしまいます。
 そこで今回の目的は、前回の弱点を補うため、接続がある一定量、一定期間で増加した場合に、自動的にスケールアウトを行う構成にすることです。また、稼働し続けるとコストがかかってしまうので、スケールインの設定も行います。このような増加・減少を自動で対応することがスケーラビリティのある構成となります。
 今回は、CPU使用率を監視して、70%以上でスケールアウト、30%以下でスケールインで設定します。
 構成図は下記のようになります。
スクリーンショット 2022-01-29 20.19.47.png

使用するサービス

主に使うサービスは、

  • EC2
  • RDS
  • ELB
  • Cloud Watch
  • AutoScaling
    です。

実際の手順

起動テンプレートの作成

 起動テンプレートとは、EC2を起動するテンプレートのようなもので、AMI・インスタンスタイプ・Key Pair・Securlity groupを設定します。似たようなものに、起動設定がありますが、起動テンプレートは、バージョン管理ができるのに対し、起動設定は毎回設定を1から作らないといけないので、起動テンプレートを使用します。
 まず、左のリストより起動テンプレートの作成をクリックして実際に作成していきます。(重要な部分だけピックアップしていきます。)
スクリーンショット 2022-01-27 8.43.29.png
・テンプレートのバージョン説明
 ここを数字で指定することでバージョンの指定ができます。
・Auto Scalingのガイダンス
 今回はAuto Scalingとして使用するのでチェックをつける。
スクリーンショット 2022-01-27 8.43.40.png
スクリーンショット 2022-01-27 8.49.49.png
・AMI・Securlity group・Public IP・Nameタグの設定
 ここの設定がEC2作成時と同じの設定部分になるので、今回は以前作成したものと同じ設定を行なっていきます。Nameタグは、スケーリングによってスケールアウトしたEC2に対して付与されます。

Auto Scaling groupの設定

EC2のページのリストからAuto Scaling Groupをクリックして作成。
 スクリーンショット 2022-01-27 9.35.30.png
・機動テンプレートとバージョン
 先ほど作成した起動テンプレートとバージョンを指定します。
スクリーンショット 2022-01-27 9.46.38.png
・ターゲットグループの作成
 前回作成したターゲットグループを指定する。
スクリーンショット 2022-01-27 9.46.45.png
・ヘルスチェックの指定
 ヘルスチェックを行わないと何か障害が起きた場合に、ユーザーが接続できない状態になるので、つけておきます。
スクリーンショット 2022-01-27 9.48.00.png
・グループサイズの設定
 ここでスケーリングする際の最小、最大、希望容量を指定します。
・スケーリングポリシー
 スケーリングポリシーは、どのような状態になったらどうするか設定します。あとで、Cloud watchと連携するので無しにしておきます。

・EC2の起動を確認する
 最小キャパシティである2つのEC2が立ち上がっているのが確認できます。仮に1つ終了させてみても、再度新しいのが立ち上がるのが確認できます。

Cloud Watchを設定する

アラームの作成を選択。メトリクスの選択をします。メトリクスとは、時間ごとに監視対象の動きをグラフ化したものです。今回は、EC2のAuto Scalingグループで作成しものを対象に、CPUUtilizationというCPU使用率を監視するメトリクスを選択します。
次に条件の設定をします。今回は、CPU使用率が70%以上の時アラームを発動する。CPU使用率が30%以下ならアラームを発動する。の2つの条件で作成します。
スクリーンショット 2022-01-27 10.05.10.png
 設定が終了すると、アラームの箇所で確認できるかと思います。
スクリーンショット 2022-01-27 10.13.35.png
 CPU-LowがCPU使用率30%以下、CPU-Hiが使用率70%以上の設定です。現在EC2は何も負荷がかかっていないのでCPU-Lowがアラートが出ているのが確認できます。

Auto ScalingとCloud Watchの紐付け

 では、実際に作成したAuto ScalingとCloud Watchを紐づけていきます。
 Auto Scalingのページで自動スケーリングのタブから、スケーリングポリシーを選択します。以下の写真のように、先ほど作成したアラームを設定して、実行するアクションで追加・削除とその個数を選択していきます。
スクリーンショット 2022-01-27 10.15.31.png

Auto Scalingテスト

 それでは、実際にスケーリングするかをテストしていきます。まずにEC2に接続をします。

$ top

のコマンドで接続したEC2のCPU使用率が確認できます。
スクリーンショット 2022-01-27 10.18.06.png
確認できたら、次に実際に負荷をかけていきます。

$ yes >>> /dev/null &

このコマンドを入力することで負荷をかけることができます。&はバックグラウンドで動かすことができます。このコマンドを4つ程入力すると
スクリーンショット 2022-01-27 10.19.22.png
図のようにCPUに負荷をかけることに成功しました。
 次、Cloud WatchのメトリクスからCPU使用率を確認していきます。スクリーンショット 2022-01-27 12.52.44.png
少し時間が経つと、図のように上昇しているのが確認できるかと思います。
スケーリングされているか確認すると
スクリーンショット 2022-01-27 12.50.32.png
2つあったインスタンスが4つに増えていることが、確認できればスケーリング成功です。
 次に、スケールインのテストもします。先ほど入力した負荷をかけるコマンドを停止していきます。

$ kill {topコマンドの1番左のPIDを入力}

その後topコマンドを入力すると、削除されているのが、確認できるかと思います。少し時間が経過したのち、Cloud Watchを確認すると
スクリーンショット 2022-01-27 13.06.37.png
減少しているのが確認できEC2の方も
スクリーンショット 2022-01-27 13.06.28.png
起動しているのが2つのみになっていれば成功です。

苦労した点

①起動テンプレートの作成
 起動テンプレートを作成した際、パブリックIPの有効化の設定を忘れていて、エラーに引っ掛かり1時間ぐらい悩みました。最後の設定の確認画面の確認をちゃんとします。
②Auto Scalingの負荷テスト
 今回Auto Scalingを設定した時点で2つのEC2が立ち上がりましたが、以前使用したものが立ち上がったものと勘違いし、そちらに負荷をかけてテストをしていました。
結果、アラートは無反応でかなり悩みました。
 失敗すると、学びも多いので地道にやっていこうと思います。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?