LoginSignup
2
1

More than 3 years have passed since last update.

規定のしきい値じゃないターゲットトラッキングポリシーを作りたかった

Last updated at Posted at 2019-06-12

結論

アラームを作成してターゲットトラッキングポリシーに紐付けることはできたが、動かなかった。

やりたかったこと

ターゲットトラッキングポリシーは、CPU平均使用率や平均ネットワーク入力のしきい値を指定するだけで、それを維持できる台数にスケールしてくれる。
例えば、CPU平均使用率を30%に維持する、というポリシーだと、
スケールアウトのアラームのしきい値は
3 分間 内の 3 データポイントに対する CPUUtilization (CPUUtilization) > 30
スケールインのアラームのしきい値は
15 分間 内の 15 データポイントに対する CPUUtilization (CPUUtilization) < 27
となる。
ただし、この3 分間 内の 3 データポイント15 分間 内の 15 データポイントの部分がコンソールからは変更不可になっている。

ターゲットトラッキングポリシーを作ってから、CloudWatchAlarmを作成して紐づけて見ようと思っても、コンソールだとポリシーが表示されない。
image (1).png
なので、CLIとかCFnを使ったらなんとかできるんじゃない?と思って、やってみた。

やったこと

CFnでターゲットトラッキングポリシーとアラームを作成して紐付けるようにテンプレートを書いた。

  targetPolicy:
    Type: AWS::AutoScaling::ScalingPolicy
    Properties:
      AdjustmentType: ChangeInCapacity
      AutoScalingGroupName:
        Ref: autoScalingGroup
      Cooldown: "120"
      EstimatedInstanceWarmup: 120
      PolicyType: TargetTrackingScaling
      TargetTrackingConfiguration:
        DisableScaleIn: false
        PredefinedMetricSpecification:
          PredefinedMetricType: ASGAverageCPUUtilization
        TargetValue: 40.0
  scaleOutAlarm:
    Type: AWS::CloudWatch::Alarm
    Properties:
      ActionsEnabled: true
      AlarmActions:
        - Ref: targetPolicy
      AlarmDescription: String
      ComparisonOperator: GreaterThanThreshold
      DatapointsToAlarm: 2
      Dimensions:
        - Name: AutoScalingGroupName
          Value:
            Ref: autoScalingGroup
      EvaluationPeriods: 2
      MetricName: CPUUtilization
      Namespace: AWS/EC2
      Period: 60
      Statistic: Average
      Threshold: 25.0
      TreatMissingData: missing
      Unit: Percent
  scaleInAlarm:
    Type: AWS::CloudWatch::Alarm
    Properties:
      ActionsEnabled: true
      AlarmActions:
        - Ref: targetPolicy
      AlarmDescription: String
      ComparisonOperator: LessThanThreshold
      DatapointsToAlarm: 5
      Dimensions:
        - Name: AutoScalingGroupName
          Value:
            Ref: autoScalingGroup
      EvaluationPeriods: 5
      MetricName: CPUUtilization
      Namespace: AWS/EC2
      Period: 60
      Statistic: Average
      Threshold: 20.0
      TreatMissingData: missing
      Unit: Percent

実行したら、こんな感じで2種類のアラームが生成された。
image (2).png

TragetTracking-ほげほげが、ターゲットトラッキングポリシーを作成すると自動で作成されるアラーム。
inra-ec2-ほげほげが、Type: AWS::CloudWatch::Alarmで自作したアラーム。

自動生成アラームも自作アラームも、以下のようにターゲットトラッキングポリシーを発火できるように設定されている。
image (4).png

このままだとスケールアウト、スケールインそれぞれ2つのアラームが紐付いているので、ターゲットトラッキングポリシーが自動で生成したほうのアラームを削除する。

aws cloudwatch delete-alarms --alarm-names TargetTracking-xxxxxx-AlarmHigh-xxxxxxxxx
aws cloudwatch delete-alarms --alarm-names TargetTracking-xxxxxx-AlarmLow-xxxxxxxxx

これで柔軟なターゲットトラッキングポリシーが使えるぞ!!

…と思って、いざCPU使用率を上げても、いくら待ってもスケールしない…
image (3).png

内部の仕組みのためかなにか分からないが、自動生成したアラーム以外だとスケーリングポリシーが動いてくれないらしい。

もしやりかたが間違ってるよとかこうやれば動くよとかあったら、ぜひ教えてください。

2
1
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
1