Auto Scaling のシンプル・ステップ・ターゲット追跡の使い分け ── CloudWatch アラームとスケーリングポリシーのつなぎ方
記事の「実践」を 1 項目ずつ進めるためのページです。AWS マネジメントコンソールで操作したら、右の一覧にチェックを入れてください。チェックはこのブラウザに保存されます。
前提条件
- リージョン:
ap-northeast-1(東京) - 以下のリソースが作成済みであること
まだ用意していない場合は、「作り方の参考」の記事の手順で作れます。リソース名は、この記事の名前に読み替えてください。
| リソース種別 | リソース名 | 内容 | 作り方の参考 |
|---|---|---|---|
| 起動テンプレート | soa-scaling-template | Amazon Linux 2023・t3.micro | EC2 Auto Scaling で落ちても自動で戻る Web サーバーを作る |
| Auto Scaling グループ | soa-scaling-asg | soa-lab-vpc のパブリックサブネット(1a・1c)。最小 1・希望 1・最大 3。スケーリングポリシーは無し | 同上 ※ロードバランサーとスケーリングポリシーは作らない |
作成するリソース一覧
| リソース種別 | リソース名 | 用途 |
|---|---|---|
| スケーリングポリシー(シンプル) | soa-simple-scale-out | 1 台追加する。クールダウン 300 秒 |
| CloudWatch アラーム | soa-scaling-cpu-high | グループの平均 CPU 使用率が 70% を超えたら soa-simple-scale-out を呼ぶ |
| スケーリングポリシー(ターゲット追跡) | soa-cpu50 | 平均 CPU 使用率 50% を目標にする |
| CloudWatch アラーム(自動作成) | TargetTracking-soa-scaling-asg-AlarmHigh-… / …-AlarmLow-… | soa-cpu50 が作る |
手順 1: シンプルスケーリングポリシーを作る
AWS マネジメントコンソールにログインし、リージョンが ap-northeast-1(東京)であることを確認します。上部のツールバーの CloudShell アイコンをクリックして AWS CloudShell を開き、次のコマンドでシンプルスケーリングポリシーを作ります(コンソールでも、グループの「オートスケーリング」タブの「動的スケーリングポリシーを作成する」でポリシータイプに「シンプルなスケーリング」を選べば作れます。ここでは、アラームを後からつなぐ流れを見やすくするため CLI で作ります)。
aws autoscaling put-scaling-policy \
--auto-scaling-group-name soa-scaling-asg \
--policy-name soa-simple-scale-out \
--policy-type SimpleScaling \
--adjustment-type ChangeInCapacity \
--scaling-adjustment 1 \
--cooldown 300
出力に PolicyARN が表示されれば作成できています。この時点では、まだどのアラームからも呼ばれません。
手順 2: アラームを作り、アクションにポリシーを指定する
上部の検索バーに CloudWatch と入力し、「CloudWatch」を選択します。左側ナビゲーションの「アラーム」→「すべてのアラーム」を選択し、「アラームの作成」をクリックします。
「メトリクスの選択」をクリックし、「EC2」→「Auto Scaling グループ別」を選択します。soa-scaling-asg の CPUUtilization にチェックを入れ、「メトリクスの選択」をクリックします。
メトリクスと条件を以下のように設定し、「次へ」をクリックします。
- 統計:
平均 - 期間:
5 分 - しきい値の種類:
静的 - 条件:
より大きい、しきい値70
「アクションの設定」で、「Auto Scaling アクションの追加」をクリックし、以下を設定します(通知が既定で表示されている場合は「削除」で外します)。
- アラーム状態トリガー:
アラーム状態 - リソースタイプ:
EC2 Auto Scaling グループ - グループの選択:
soa-scaling-asg(候補に出るのは、シンプルまたはステップスケーリングのポリシーを持つグループだけです) - アクション:
soa-simple-scale-out (1 インスタンスの追加)が自動で入ることを確認
「次へ」をクリックし、アラーム名に soa-scaling-cpu-high と入力して「次へ」→「アラームの作成」をクリックします。作成直後は「データ不足」で、データが集まると、いまは CPU にほとんど負荷が無いので状態は OK になります。
手順 3: アラームの状態を切り替えてスケールアウトさせる
CloudShell に戻り、アラームの状態を手動で ALARM に切り替えます。
aws cloudwatch set-alarm-state \
--alarm-name soa-scaling-cpu-high \
--state-value ALARM \
--state-reason "test: scale out by simple scaling policy"
EC2 のコンソールを開き、左側ナビゲーションの「Auto Scaling」→「Auto Scaling グループ」から soa-scaling-asg を開きます。「アクティビティ」タブの「アクティビティ履歴」に、新しいインスタンスを起動する行が追加されています。原因(説明)の欄に、アラーム soa-scaling-cpu-high が ALARM 状態になってポリシー soa-simple-scale-out が実行され、希望する容量が 1 から 2 に変わったことが記録されています。
アラームは、次の評価で実際のメトリクスに基づいて OK に戻ります。シンプルスケーリングは、このあとクールダウンの 300 秒が終わるまで、追加のアラームに応答しません。
手順 4: ターゲット追跡ポリシーを作る
soa-scaling-asg の「オートスケーリング」タブを選択します。「動的スケーリングポリシー」に soa-simple-scale-out のカードがあり、ポリシータイプが「シンプルなスケーリング」、「次の場合に、ポリシーを実行」が soa-scaling-cpu-high になっていることを確認します。
「動的スケーリングポリシーを作成する」をクリックし、以下を設定します。
- ポリシータイプ:
ターゲット追跡スケーリング - スケーリングポリシー名:
soa-cpu50 - メトリクスタイプ:
平均 CPU 使用率 - ターゲット値:
50
インスタンスのウォームアップ、「スケールインを無効にしてスケールアウトポリシーのみを作成する」など、その他の項目はデフォルトのままにして、「作成」をクリックします。
ここでは、アラームを選ぶ欄がありません。ターゲット追跡では、アラームを自分で用意しないためです。
手順 5: 自動で作られたアラームを確かめる
「オートスケーリング」タブの「動的スケーリングポリシー」に、soa-simple-scale-out(シンプルスケーリング)と soa-cpu50(ターゲット追跡スケーリング)の 2 つが並んでいることを確認します。
CloudWatch のコンソールに戻り、「アラーム」→「すべてのアラーム」を開きます。検索欄に soa-scaling と入力して絞り込むと、自分で作った soa-scaling-cpu-high のほかに、TargetTracking-soa-scaling-asg-AlarmHigh- と TargetTracking-soa-scaling-asg-AlarmLow- で始まる 2 つのアラームが作られていることが確認できます。
AlarmHigh は平均 CPU 使用率が目標値を上回ったとき、AlarmLow は下回ったときのアラームです。条件の列を見ると、この実践では AlarmHigh が CPUUtilization > 50(3 データポイント)、AlarmLow が CPUUtilization < 45(15 データポイント)でした。スケールイン側はしきい値が少し低く、評価の期間も長く取られているので、増減を繰り返しにくくなっています。負荷の無い状態がしばらく続くと AlarmLow が ALARM になり、手順 3 で 2 台に増えたグループは、最小容量の 1 台へ向けてスケールインします。