AWS-Auto-Scaling

Auto Scaling孫の手。~絶対消えさせやしないインスタンスとその他大勢~

ごあいさつ

こんばんは。
最近ずっと中華を食べたいと願っている、もに倉です。

今回はありそうでなかったAuto Scalingの構成について、設定方法をご紹介します。

どういう構成?

▼材料
絶対に消したくない、消えてほしくないEC2インスタンス × 任意の台数
普段はいなくてもいいけど、援軍には来てほしいな ASG × 基本は0~任意のキャパシティ
すべてを包み込むELB

Auto Scalingで管理されているインスタンスは、スケールイン保護を設定していても
ヘルスチェックに失敗すると削除され、新しいインスタンスと入れ替わってしまいます。

インスタンス1台は常駐していてほしい・この1台は絶対に入れ替わってほしくない・負荷が高くなったらインスタンスが増えてほしい というときの設定です。

わりかし無理やりですが、やっていく~~

事前に用意した材料

EC2の作成・AMIの作成・起動テンプレートの作成・ELBとターゲットグループの作成・ASGの作成は
割愛するので、作ったものを一挙紹介!

絶対消えてほしくないEC2インスタンス:monikuraEC2

Apacheを使っている単純なWEBサーバです。

増援用ASG:monikuraASG

monikuraEC2のAMIから作った起動テンプレートでインスタンスを生やす設定になっています。
生えたインスタンスの名前は「monikuraASG-EC2」になるようにしています。

とりあえず希望・最小・最大キャパを1にして、問題なくインスタンスが生えてくるのを確認済み。

ELBはいかなるインスタンスをも拒まず:monikuraELB&monikuraTG

monikuraEC2と、monikuraASGから生えたインスタンスである
monikuraASG-EC2がターゲットになっています。

ここから、下記の通り設定していきます。

・ASGの希望・最小キャパは0、最大は3
・TGに入っているインスタンスの平均CPU使用率が70%以上になったらスケールイン
・TGに入っているインスタンスの平均CPU使用率が40%以下になったらスケールアウト
※全部テキトーなのでよしなに決めてください♪

レツゴ!

キャパシティ設定を変更

ここはすぐに終わるところですね(^^)/~~

キャパシティの概要を編集して、希望・最小を0、最大を3に設定します。
したらば、さっき生えてきたインスタンスも勝手にいなくなりますね。

スケーリングポリシー設定のためのCloudWatch アラームを作成

ここが要であり、鬼門でもあるところです;;

ちょっと解説

今のASGでは、スケーリングポリシーのタイプで推奨されているものは
「ターゲット追跡スケーリング」だと思います。

ただ、今回の要件の場合、このターゲット追跡スケーリングではうまいこと設定できない と 思います たぶん

このメトリクスタイプじゃあ今回の要件は満たせないんだな~

というわけで、今回は「ステップスケーリング」を使います。

ステップスケーリングは
CloudWatchアラームの閾値を超えた場合、インスタンスをいくつ増やす/減らす
といったような設定が可能なポリシーです。

つーわけで、ステップスケーリングに用いるためのCloudWatchアラームを作成していきます!

メトリクスの作成

まず、CloudWatchコンソールから[すべてのアラーム] → [アラームの作成]をクリック!
そうすると「メトリクスの条件の指定」ページに移るので、[メトリクスの選択]からメトリクスを作成していきます。

今回、ほしいメトリクスは「TGに入っているインスタンスの平均CPU使用率」です。
(このメトリクスを用いてアラームを設定する)

下記のように設定します。

使うメトリクスを選択

monikuraEC2の「CPUUtilization」にチェックを入れる
monikuraASGの「CPUUtilization」にチェックを入れる

統計設定変更

「グラフ化したメトリクスタブ」を開く
選択したメトリクスの統計をそれぞれ「最大」に変更

こんなかんじ

式を追加

○ASGにインスタンスがない場合、値を「0」とする式
[数式を追加] → [FILL]を選択
↓の赤枠の部分を「FILL(m2,0)」に変更

※m2 = ASGのメトリクスIDになるようにしてください。 ラベルもわかりやすいように変更するとGOOD

これをしないと、なんか値が変になっちゃうんですよぬぇ……;;

○ASGが0台のときはmonikuraEC2のCPU使用率のみ表示、
 それ以外はmonikuraEC2とmonikuraASGのCPU使用率平均を表示する式

[数式を追加] → [IF]を選択
先ほどと同じ要領で詳細を「IF(e1 == 0, m1, AVG([m1, e1]))」に変更

最終的に↓みたいになっていればOK&IF文の式だけチェックを入れて[メトリクスの選択]をクリック!

アラームの設定

あとは事前に決めた閾値のとおりに設定して、アラームを作成します。通知とかはお好みで……。
今回は閾値:70%以上と閾値:40%以下のふたつを↑の手順で作成すればOKです。

スケーリングポリシーの設定

ここまできたらもう一息!!
対象ASGの詳細ページに戻って、「オートスケーリング」タブから[動的スケーリングポリシーを作成する]をクリック

いいかんじに設定……

これで完成です! 実際にはもうちょっとポリシー設定を考えたほうがいいとは思いますが……。
(monikuraEC2が急に鯖落ちしてメトリクス取れない状態になったらどうする? など)

終わりに

monikuraEC2にストレスをかけ散らかし、スケーリングポリシーが動くこともばっちり確認しました。

うまいこと使えたらいいな~という、ヤツ、でした(^^)/~~
もうちょっときれいにしたら実用性あるかなぁと。

お し ま い

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA