AWS

EC2 Auto Scaling ターゲット追跡ポリシーの4つの定義済みメトリクス

全ての定義済みメトリクスに基づいたスケーリングを確認する構成

EC2 Auto Scaling入門ということで、以下のページでCPU使用率に基づいて、インスタンス数をスケーリングさせる構成をご紹介しました。

上記のCPUに加えて、事前定義されたメトリクスは4つあります。

・ASGAverageCPUUtilization – Auto Scaling グループの平均 CPU 使用率。

・ASGAverageNetworkIn – すべてのネットワークインターフェイスで Auto Scaling グループが受信した平均バイト数。

・ASGAverageNetworkOut – すべてのネットワークインターフェイスで Auto Scaling グループが送信した平均バイト数。

・ALBRequestCountPerTarget – Application Load Balancer ターゲットグループ内のターゲットごとに完了したリクエストの数。

Amazon EC2 Auto Scaling のターゲットトラッキングスケーリングポリシー

今回は上記の4つのメトリクスを使って、実際にスケーリング構成を作成し、挙動を確認します。

構築する環境

Amazon.co.jp: AWS認定資格試験テキスト AWS認定ソリューションアーキテクト - アソシエイト 改訂第2版 : NRIネットコム株式会社, 佐々木 拓郎, 林 晋一郎, 金澤 圭: 本
Amazon.co.jp: AWS認定資格試験テキスト AWS認定ソリューションアーキテクト - アソシエイト 改訂第2版 : NRIネットコム株式会社, 佐々木 拓郎, 林 晋一郎, 金澤 圭: 本
Diagram of four predefined metrics for EC2 Auto Scaling Target Tracking Policy.

ALBと4つのALBターゲットグループを作成します。各グループに、Auto Scalingグループを関連付けます。それぞれのAuto Scalingグループは、先述の4つのメトリックタイプに基づいてスケーリングするように、スケーリングポリシーを用意します。

パスベースルーティングを使用して、それぞれのターゲットグループを、ALBに関連付けます。URLとターゲットグループの対応は、以下の通りです。

  • /cpu/:ALB Target Group 1
  • /network-in/:ALB Target Group 2
  • /network-out/:ALB Target Group 3
  • /alb/:ALB Target Group 4

今回作成するEC2インスタンスは、共通して、Apacheをインストールし、Webサーバとして動作させ、80/tcpでHTTPをリッスンします。

CloudFormationテンプレートファイル

上記の構成をCloudFormationで構築します。以下のURLにCloudFormationテンプレートを配置してます。

awstut-fa/027 at main · awstut-an-r/awstut-fa
Contribute to awstut-an-r/awstut-fa development by creating an account on GitHub.

テンプレートファイルのポイント解説

基本的な構成は、先述のCPU使用率でスケーリングさせる構成と同様です。本ページでは、異なる点にフォーカスします。

なおALBのパスベースルーティングに関しては、以下のページをご確認ください。

事前定義されたメトリクス(CPU, Network in/out)

まず3つのメトリクス用のスケーリングポリシーを確認します。メトリックタイプの選択と閾値の指定がポイントです。

Resources:
  ScalingPolicy:
    Type: AWS::AutoScaling::ScalingPolicy
    Properties:
      AutoScalingGroupName: !Ref AutoScalingGroup
      PolicyType: TargetTrackingScaling
      TargetTrackingConfiguration:
        PredefinedMetricSpecification:
          PredefinedMetricType: !Ref PredefinedMetricType
        TargetValue: !Ref TargetTrackingConfigurationTargetValue
Code language: YAML (yaml)

メトリックタイプはPredefinedMetricType、閾値はTargetValueプロパティで設定します。
今回は検証ということで、以下の通りに設定します。

Auto Scalingグループメトリックタイプ閾値
グループ1ASGAverageCPUUtilization5(%)
グループ2ASGAverageNetworkIn1000(Byte)
グループ3ASGAverageNetworkOut10000(Byte)

事前定義されたメトリクス(ALBリクエスト数)

グループ4用のスケーリングポリシーを確認します。このメトリックを使用する上でのポイントは、対象となるALBを、リソースラベルという形で指定する必要があるという点です。

Resources:
  ScalingPolicy:
    Type: AWS::AutoScaling::ScalingPolicy
    Properties:
      ...
        PredefinedMetricSpecification:
          PredefinedMetricType: ALBRequestCountPerTarget
          ResourceLabel: !Ref ALBResourceLabel
        TargetValue: !Ref TargetTrackingConfigurationTargetValue
Code language: YAML (yaml)

今回の閾値は10としました。
リソースラベルは2つの要素で構成されます。

The format is app/load-balancer-name/load-balancer-id/targetgroup/target-group-name/target-group-id , where

・app/load-balancer-name/load-balancer-id is the final portion of the load balancer ARN, and

・targetgroup/target-group-name/target-group-id is the final portion of the target group ARN.

AWS::AutoScaling::ScalingPolicy PredefinedMetricSpecification

これらの値は、組み込み関数Fn::GetAttを使用して、ALBおよびターゲットグループリソースから取得からできます。

Outputs:
  ALBResourceLabel:
    Value: !Sub
      - "${LoadBalancerFullName}/${TargetGroupFullName}"
      - LoadBalancerFullName: !GetAtt ALB.LoadBalancerFullName
        TargetGroupFullName: !GetAtt ALBTargetGroup4.TargetGroupFullName
Code language: YAML (yaml)

組み込み関数Fn::Subを使用して、2つの値からリソースラベルを作成します。

環境構築

CloudFormationを使用して、本環境を構築し、実際の挙動を確認します。

CloudFormationスタックを作成し、スタック内のリソースを確認する

CloudFormationスタックを作成します。
スタックの作成および各スタックの確認方法については、以下のページをご確認ください。

各スタックのリソースを確認した結果、今回作成された主要リソースの情報は以下の通りです。

  • ALB:fa-027-ALB
  • ターゲットグループ1:fa-027-ALBTargetGroup1
  • ターゲットグループ2:fa-027-ALBTargetGroup2
  • ターゲットグループ3:fa-027-ALBTargetGroup3
  • ターゲットグループ4:fa-027-ALBTargetGroup4

AWS Management Consoleからも、リソースの作成状況を確認します。

まずALBを確認します。

The ALB has been created successfully.

正常にALBが作成されました。

各Auto Scalingグループを確認します。

The metric for Auto Scaling group 1 is CPU.
The metric for Auto Scaling group 2 is Network-in.
The metric for Auto Scaling group 3 is Network-out.
The metric for Auto Scaling group 4 is ALB request count.

別々のメトリックが設定されていることがわかります。

動作確認

準備が整いましたので、ALBにアクセスします。

ASGAverageCPUUtilization

CPU使用率の挙動については、別ページで検証済みですので、割愛します。詳細はそちらをご確認ください。

ASGAverageNetworkIn

/network-in/にアクセスし、ALBターゲットグループ2の挙動を確認します。

Access to Auto Scaling group 2.

このグループのメトリックタイプはASGAverageNetworkIn、つまり受信したバイト数によってスケーリングが起こります。しばらく繰り返しリロードすると、受信バイト数が閾値(1000Byte)を超えます。

The amount of reception exceeds the threshold for Auto Scaling group 2.

履歴を見ると、スケーリングが開始され、新しいインスタンスが作成されたことがわかります。

From the activity history of Auto Scaling group 2, we can see that a new instance has been created.
New instance in Auto Scaling Group 2.

改めてALBにアクセスします。

I was able to access the new instance via ALB.

先ほどのインスタンスに加えて、新しく作成されたインスタンスからも応答がありました。このように受信したデータ量に応じて、EC2インスタンs数をスケーリングすることができました。

ASGAverageNetworkOut

続いて/network-out/にアクセスし、ALBターゲットグループ3の挙動を確認します。

Access to Auto Scaling group 3.

このグループのメトリックタイプはASGAverageNetworkOut、つまり送信したバイト数によってスケーリングが起こります。しばらく繰り返しリロードすると、送信バイト数が閾値(10000Byte)を超えます。

The amount of transmission exceeds the threshold for Auto Scaling group 3.

スケーリングが開始され、新しいインスタンスが作成され、ALB経由でアクセスできました。

New instance in Auto Scaling Group 3.
I was able to access the new instance via ALB.

このように送信したデータ量に応じて、EC2インスタンス数をスケーリングすることができました。

ALBRequestCountPerTarget

続いて/alb/にアクセスし、ALBターゲットグループ4の挙動を確認します。

Access to Auto Scaling group 4 via ALB.

このグループのメトリックタイプはALBRequestCountPerTarget、つまりALBターゲットグループ内の、インスタンスごとに完了したリクエスト数に応じて、スケーリングが開始されます。しばらく繰り返しリロードすると、リクエスト数が閾値(10)を超えます。

The amount of ALB Request Count exceeds the threshold for Auto Scaling group 4.

スケーリングが開始され、新しいインスタンスが作成され、ALB経由でアクセスできました。

New instance in Auto Scaling Group 4.
I was able to access the new instance via ALB.

このようにALBターゲットグループ内で処理されたリクエスト数に応じて、EC2インスタンス数をスケーリングすることができました。

まとめ

事前定義された4つのメトリクスを使って、実際にスケーリング構成を作成し、挙動を確認しました。

タイトルとURLをコピーしました