0
0

More than 3 years have passed since last update.

【ハンズオン3】スケーラビリティのあるブログサービスを構築する

Last updated at Posted at 2021-07-31

今回の記事について

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

前回の続き

前回の記事の続きになります。
前回作成した環境に構築していきますので、まずはこちらをご覧ください。

今回やること

・起動テンプレートの作成
・ELBの配下にAutoScalingGroupを紐付ける
・CloudWatchでAutoScalingのCPU使用率を監視するアラームの作成
(CPU使用率70%以上、CPU使用率30%以下)
・作成したアラームとAutoScalingのスケーリングポリシーを紐づける
・検証(意図的にEC2のCPUに負荷をかけてAutoScalingによりEC2が増減するか確認)

環境

macOS Big Sur バージョン11.2.2

構成図

hands-on3.png

起動テンプレートの作成(AutoScalingで起動するEC2インスタンスの設定)

*起動設定でも出来ますが、Amazonは起動テンプレートの利用を推奨しているようです。

EC2コンソールを開き、左ペインからテンプレートの起動を選択

起動テンプレートを作成

起動テンプレート名: LaunchTemplate1 (任意の名前)
テンプレートバージョンの説明:1.0.0 (任意)
AutoScalingのガイダンス: このテンプレートをAutoScalingで使用するのでチェックを入れる

AMI:以前のハンズオンで作成しているEC2を設定
インスタンスタイプ:検証用であれば無料枠でOK
キーペア:すでに作成してあるものを使用
セキュリティグループ:後で設定するのでここでは空白でOK

リソースタグ:リソースタイプをインスタンスに設定すると、AutoScalingによって立ち上がったインスタンスにタグ付けできる

ネットワークインターフェイスの設定
セキュリティグループ:既存のEC2に紐付けているものと同じSGを選択
パブリックIPの自動割り当て:有効化

他デフォルトで起動テンプレートの作成

*ちなみに既存のEC2を選択してアクション→イメージとテンプレート→インスタンスからテンプレートを作成から簡単に作れます。

ELBの配下にAutoScalingGroupを紐付ける

前回までのハンズオンで作成したEC22台を停止しておく。RDSは起動してる状態。

AutoScalingGroupの作成

ステップ1 起動テンプレートまたは起動設定を選択する

Auto-Scaling グループ名:Test-AutoScaling1 (任意)
起動テンプレート:先ほど作成した起動テンプレートを設定

ステップ2 設定の構成

インスタンスの購入オプション:起動テンプレートに準拠する
VPC、サブネット選択
(今回の場合、パブリックサブネット2つ選択)

ステップ3 詳細オプションを設定

ロードバランシング:前回までのハンズオンで作成したELBのターゲットグループを設定
ヘルスチェック:ヘルスチェックのタイプをELBにチェックを入れる
その他の設定(モニタリング):後で変更できるのでひとまず飛ばして次へ進む

ステップ4 グループサイズとスケーリングポリシーを設定する

希望する容量:2 (任意)
最小キャパシティ:2 (任意)
最大キャパシティ:4 (任意)
スケーリングポリシー:後から設定するのでひとまず飛ばして次へ

ステップ5 通知を追加

AutoScaling内のEC2が起動、終了するたびに、SNSなどで通知が欲しければ設定する

ステップ6 タグを追加

任意で設定

ステップ7 確認

確認して問題なければ作成

*作成後、現在EC2を2台とも停止してるので、AutoScalingで設定した希望する容量2台を維持するために、起動テンプレートで設定した2台のEC2インスタンスが新しく起動される。

CloudWatchでAutoScalingのCPU使用率を監視するアラームの作成

作成するアラーム

・CPU使用率が70%以上になった場合に起動するアラーム
・CPU使用率が30%以下になった場合に起動するアラーム

早速、CloudWatchコンソール画面で、アラームの作成を選択

ステップ1 メトリクスと条件の指定

メトリクスの選択⇨EC2⇨AutoScalingグループ別⇨先ほど作成したAutoScalingのCPU Utilization⇨メトリクスの選択

統計:平均値
期間:5分(デフォルト)
しきい値の種類:静的
アラーム定義:70 より大きい
その他の設定:欠落したデータを不正(しきい値を超えている)として処理
*CPU使用率が極端に高まると、EC2がCloudWatchにメトリクスを送れないと予想されるから

ステップ2 アクションの設定

SNSトピックで作成したメールアドレス宛に通知が届く設定
(SNSトピックを作成してなければ作成する)

ステップ3 名前と説明を追加

アラーム名:CPU_high(任意)

ステップ4 プレビューと作成

確認して問題なければ作成

*省略
もう一つのアラーム(CPU使用率30%以下)も同じように作成しましょう。
(設定)
アラーム定義:30 より小さい
その他の設定:欠落データを見つかりませんとして処理
アラーム名:CPU_low(任意)

*設定後のステータス
CPU_high OK
CPU_low アラーム状態
となっていることを確認する

作成したアラームとAutoScalingのスケーリングポリシーを紐づける

作成したAutoScalingのタブ⇨自動AutoScaling⇨スケーリングポリシー⇨ポリシーを追加

ポリシータイプ:シンプルなスケーリング
スケーリングポリシー名:CPU_add(CPU_remove)
CloudWatchアラーム:CPU_high(CPU_low)
アクションを実行:追加(削除) 1 キャパシティユニット
スケーリングアクティビティを許可するまでの秒数:30(任意)

highとlowのスケーリングポリシーをそれぞれ作成する

これでアラームに応じてAutoScalingによるEC2インスタンスが増減する仕組みができた。

検証(意図的にEC2のCPUに負荷をかけてAutoScalingによりEC2が増減するか確認)

・どちらか片方のEC2インスタンスへssh接続する

・EC2インスタンスに負荷をかける
負荷をかけるコマンド:yes >> /dev/null &
*4つほど実行する

・Linuxサーバーの負荷を確認する
Linuxサーバーの負荷を確認するコマンド:topでCPU使用率を確認できる
(抜けるにはctrl+c)

*もう一つのインスタンスでも同じように負荷をかける

しばらくしてAutoScalingのグラフを確認するとCPU使用率が高まってるのが確認できる
また、設定したCloudWatchアラームのCPU_highもアラームになってるのがわかる
さらに、EC2インスタンスが新しく立ち上がっているのが確認できるはず
(AutoScalingグループのアクティビティログでも確認できる)
*負荷がかかってる以上、設定した最大インスタンス数までインスタンスが立ち上がる

負荷を戻す

再びインスタンスに戻り、先ほど負荷をかけたyesコマンドをkillする
kill プロセスIDで負荷を解除できる
kill {3974..3977}とすれば複数のIDをまとめて解除できる

最後にtopコマンドでCPU使用率が0%になっていることを確認

*もう一つのインスタンスでも同じように解除する

しばらくするとCPU使用率が30%を下回り、インスタンスが削除される動きになるが、ELBのConnection drainingの設定(デフォルトで300秒後)により、その時間経過後に削除される。

*ELBのConnection drainingとは
ELBから何らかの理由(障害など)でEC2が切り離されると、設定した時間経過後にEC2が削除される。
急に削除するとサーバーを使用しているユーザーに迷惑がかかるためこの機能がある。
(AWS SAAやSOAの資格試験にも出ます)(1〜3600秒の間で設定可能)

最終的に希望の容量(EC2インスタンス2台)に戻ってれば今回のハンズオンは終了。

お疲れ様でした。

0
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
0
0