Amazon EC2 Auto Scaling (日本語)
ユーザーガイド

Amazon EC2 Auto Scaling の簡易スケーリングとステップスケーリングポリシー

簡易およびステップスケーリングポリシーで、指定された評価期間の数についてしきい値が違反したときにスケーリングプロセスをトリガーし、Auto Scaling グループをどのようにスケーリングするかを定義する、CloudWatch アラームのスケーリングメトリクスとしきい値を選択します。

スケーリング調整が 1 つの場合でも、簡易スケーリングポリシーではなくステップスケーリングポリシーを使用することをお勧めします。Amazon EC2 Auto Scaling はもともと、簡易スケーリングポリシーのみをサポートしていました。ターゲット追跡およびステップポリシーの導入前にスケーリングポリシーを作成した場合、そのポリシーは簡易スケーリングポリシーとして扱われます。詳細については、「簡易スケーリングポリシーとクールダウン」を参照してください。

スケーリングメトリクスが Auto Scaling グループのインスタンスの数に比例して増減する使用率メトリクスである場合は、ターゲット追跡スケーリングポリシーを使用することをお勧めします。詳細については、「Amazon EC2 Auto Scaling のターゲット追跡スケーリングポリシー」を参照してください。より高度なスケーリングポリシーの設定には、ステップスケーリングによりターゲット追跡スケーリングを使用するオプションが引き続き用意されています。たとえば、必要に応じて、使用率が一定のレベルに達したときにより積極的な応答を設定できます。

ステップスケーリングポリシー

ステップスケーリングポリシーは、一連のスケーリング調整値 (ステップ調整値) に基づいて、Auto Scaling グループの現在の容量を増減させます。調整は、アラーム超過のサイズに応じて異なります。

スケーリングアクティビティが開始されると、ポリシーは、スケーリングアクティビティまたはヘルスチェック交換が進行中であっても、引き続き別のアラームに応答できます。したがってすべてのアラーム超過は、Amazon EC2 Auto Scaling によってアラームメッセージが受信されると評価されます。

スケールアウトポリシーを作成する場合は、新しく起動されたインスタンスが集合メトリクスの対象になるまでの予測ウォームアップ期間を指定できます。詳細については、「インスタンスのウォームアップ」を参照してください。

ステップスケーリングを Amazon EC2 以外のリソースに使用することもできます。詳細については、Application Auto Scaling ユーザーガイド の「ステップスケーリングポリシー」を参照してください。

簡易スケーリングポリシーとクールダウン

ほとんどの場合、ステップスケーリングポリシーは簡易スケーリングポリシーよりも適しています。簡易スケーリングでは、スケーリングアクティビティが開始されると、ポリシーはスケーリングアクティビティまたはヘルスチェック交換が完了し、クールダウン期間が終了するまで待つ必要があり、その後に別のアラームに応答できるようになります。クールダウンの期間を指定すると、前のアクティビティの効果が表示される前に、追加の規模の拡大や縮小が実行されることを防ぐことができます。詳細については、「Amazon EC2 Auto Scaling のスケーリングクールダウン」を参照してください。

Amazon EC2 Auto Scaling では、ステップスケーリングポリシーのクールダウン期間はサポートされていません。したがって、これらのポリシーにクールダウン期間を指定できず、グループのデフォルトのクールダウン期間は適用されません。

スケーリング調整タイプ

ステップスケーリングまたは簡易スケーリングポリシーが実行されると、ポリシーで指定したスケーリング調整値を使用して Auto Scaling グループの現在の容量が変更されます。スケーリング調整では、グループの容量が最大グループサイズより大きい容量にも、最小グループサイズよりも小さい容量にも変更されることはありません。

Amazon EC2 Auto Scaling はステップスケーリングと簡易スケーリングに対して次の調整タイプをサポートしています。

  • ChangeInCapacity— 指定したインスタンス数だけグループの現在の容量を増減させます。正の調整値は現在の容量を増やし、負の調整値は現在の容量を減らします。

    例: グループの現在の容量が 3 インスタンスであり、調整値が 5 の場合、このポリシーが実行されると、グループに 5 インスタンスを追加して、合計で 8 インスタンスになります。

  • ExactCapacity— 指定したインスタンス数にグループの現在の容量を変更します。この調整タイプには正の値を指定します。

    例: グループの現在の容量が 3 インスタンスであり、調整値が 5 の場合、このポリシーが実行されると、容量は 5 インスタンスに設定されます。

  • PercentChangeInCapacity—指定したパーセンテージだけ現在の容量を増減させます。正の値は容量を増やし、負の値は容量を減らします。結果の値が整数でない場合、その値を以下のように四捨五入します。

    • 1 より大きい値は小数点以下が切り捨てられます。たとえば、12.712 に丸められます。

    • 0 と 1 の間の値は 1 に丸められます。たとえば、.671 に丸められます。

    • 0 と -1 の間の値は -1 に丸められます。たとえば、-.58-1 に丸められます。

    • -1 未満の値は小数点以下が切り捨てられます。たとえば、-6.67-6 に丸められます。

    例: グループの現在の容量が 10 インスタンスであり、調整値が 10 パーセントの場合、このポリシーが実行されると、グループに 1 インスタンスが追加され、合計で 11 インスタンスになります。

PercentChangeInCapacity を使用すると、最小数のインスタンスを指定してスケールすることもできます (MinAdjustmentMagnitude パラメータ、または [Add instances in increments of at least (最小増分でインスタンスを追加)] をコンソールで使用します)。たとえば、25 パーセント追加するポリシーを作成し、インスタンスの最小増減値を 2 に指定するとします。4 つのインスタンスを持つ Auto Scaling グループがあり、スケーリングポリシーを実行する場合、25 パーセントは 1 インスタンスです。ただし、最小増減値が 2 に指定されているため、2 つのインスタンスが追加されます。

ステップ調整値

ステップスケーリングポリシーを作成するときは、アラーム超過のサイズに基づいてスケールできるようにする 1 つ以上のステップ調整値を追加します。各ステップ調整値は、次のように指定します。

  • メトリクス値の下限

  • メトリクス値の上限

  • スケーリング調整タイプに基づいてスケールする量

ポリシーのステップ調整値については、いくつかのルールがあります。

  • ステップ調整値の範囲に重複や間隔があってはなりません。

  • 1 つのステップ調整値のみ、下限を null (負の無限大) にすることができます。下限が負のステップ調整値がある場合は、下限が null のステップ調整値が必要です。

  • 1 つのステップ調整値のみ、上限を null (正の無限大) にすることができます。上限が正のステップ調整値がある場合は、上限が null のステップ調整値が必要です。

  • 同じステップ調整値で上限と下限を null にすることはできません。

  • メトリクス値が超過しきい値を上回っている場合、下限にその値を含み、上限には含みません。メトリクス値が超過しきい値を下回っている場合、下限にその値を含まず、上限に含みます。

CloudWatch は、CloudWatch アラームに関連付けられたメトリクスの統計に基づいて、メトリクスデータポイントを集計します。アラームを超過した場合、適切なスケーリングポリシーがトリガーされます。Amazon EC2 Auto Scaling は集計タイプを (raw メトリクスデータではなく) CloudWatch からの最新のメトリクスデータポイントに適用します。ステップ調整によって定義された上限と下限に対して、この集約メトリクス値を比較することにより、実行するステップ調整が決定されます。

AWS マネジメントコンソール を使用している場合は、絶対値として上限と下限を指定します。API または CLI を使用している場合は、違反しきい値と相対的に上限と下限を指定します。たとえば、超過しきい値が 50 で、スケーリング調整タイプが PercentChangeInCapacity のアラームがあるとします。また、スケールアウトおよびスケールインポリシーに以下のステップ調整値が含まれるとします。

Scale out policy
Lower bound Upper bound Adjustment Metric value

0

10

0

50 <= < 60

10

20

10

60 <= < 70

20

null

30

70 <= < 正の無限大

Scale in policy

Lower bound Upper bound Adjustment Metric value

-10

0

0

40 < <= 50

-20

-10

-10

30 < <= 40

null

-20

-30

負の無限大 < <= 30

グループの現在の容量と必要な容量は両方とも 10 インスタンスとします。集合メトリクス値が 40 より大きく 60 未満である間、グループは現在の容量と必要な容量を維持します。

メトリクス値が 60 になった場合、スケールアウトのポリシーの 2 番目のステップ調整値 (10 インスタンスの 10% を追加) に基づいて、グループの必要な容量を 1 インスタンスだけ増やして、11 インスタンスにします。新しいインスタンスが実行され、その指定されたウォームアップ期間が終了した後、グループの現在の容量を 11 インスタンスに増やします。この容量の増加後にメトリクス値が 70 に増えた場合、スケールアウトのポリシーの 3 番目のステップ調整値 (11 インスタンスの 30%、つまり 3.3 インスタンスを丸めた 3 インスタンスを追加) に基づいて、グループの必要な容量を 3 インスタンスだけ増やして、14 インスタンスにします。

メトリクス値が 40 になった場合、スケールインポリシーの 2 番目のステップ調整値 (14 インスタンスの 10%、つまり 1.4 インスタンスを丸めた 1 インスタンスを削除) に基づいて、グループの必要な容量を 1 インスタンスだけ減らして、13 インスタンスにします。この容量の減少後にメトリクス値が 30 に減った場合、スケールアウトのポリシーの 3 番目のステップ調整値 (13 インスタンスの 30%、つまり 3.9 インスタンスを丸めた 3 インスタンスを削除) に基づいて、グループの必要な容量をもう 3 インスタンスだけ減らして、10 インスタンスにします。

インスタンスのウォームアップ

ステップスケーリングポリシーでは、新しく起動されたインスタンスのウォームアップにかかる秒数を指定できます。その指定されたウォームアップ期間が終了するまで、インスタンスは Auto Scaling グループの集合メトリクスの対象になりません。スケールアウト時、AWS はグループの現在の容量の一部としてウォームアップ中のインスタンスは対象にしません。したがって、複数のアラーム超過によってもステップ調整値の範囲は変わらず、1 つのスケーリングアクティビティという結果になります。これにより、必要以上の数のインスタンスが追加されることがなくなります。

先ほどのセクションの例で、新しいインスタンスのウォームアップの最中に、メトリクスが 60 になり、さらに 62 になったとします。現在の容量がまだ 10 インスタンスであるため、1 インスタンス (10 インスタンスの 10%) が追加されます。ただし、グループの必要容量はすでに 11 インスタンスのため、これ以上必要容量は増えません。新しいインスタンスがまだウォームアップ中にメトリックスが 70 になった場合は、3 インスタンス (10 インスタンスの 30%) を追加する必要があります。ただし、グループの必要な容量はすでに 11 であるため、2 つのインスタンスのみを追加し、新しい必要な容量は 13 インスタンスになります。

スケールイン時、AWS はグループの現在の容量の一部として終了中のインスタンスを対象にします。したがって、Auto Scaling グループから必要以上の数のインスタンスが削除されることがなくなります。

スケールアウトアクティビティの進行中、スケールインアクティビティを開始することはできません。

ステップスケーリングポリシーを使用する Auto Scaling グループを作成する (コンソール)

CloudWatch アラームを使用して、Auto Scaling グループをスケールアウトまたはスケールインまたはするタグを判断するスケーリングポリシーを作成できます。各 CloudWatch アラームは 1 つのメトリクスを監視し、ポリシーで指定したしきい値にメトリクスが違反すると、メッセージを Amazon EC2 Auto Scaling に送信します。アラームにより、使用している AWS のサービスが CloudWatch に送信する任意のメトリクスをモニタリングできます。独自のカスタムメトリクスを作成し、モニタリングすることもできます。

CloudWatch アラームを作成するとき、Amazon SNS トピックを指定して、アラームの状態が変わったときにメールの通知が送信されるように設定できます。詳細については、「Amazon CloudWatch アラームの作成」を参照してください。

コンソールで、2 つのスケーリングポリシーを使用する Auto Scaling グループを作成します。スケールアウトポリシーはグループの容量を 30 パーセント増やし、スケールインポリシーはグループの容量を 2 インスタンスに減らすとします。

ステップスケーリングポリシーを使用する Auto Scaling グループを作成するには

  1. https://console.aws.amazon.com/ec2/) にある Amazon EC2 コンソールを開きます。

  2. ナビゲーションペインの [Auto Scaling] で、[Auto Scaling グループ] を選択します。

  3. [Auto Scaling グループの作成] を選択します。

  4. [Create Auto Scaling Group] ページで、以下のいずれかの操作を実行します。

    • [既存の起動設定から Auto Scaling グループを作成する] を選択し、既存の起動設定を選択して、[次のステップ] を選択します。

    • 使用する起動設定がない場合は、[Create a new launch configuration] を選択し、表示される指示に従います。詳細については、「起動設定を作成する」を参照してください。

  5. [Configure Auto Scaling group details (Auto Scaling グループ詳細の設定)] ページで、以下を実行します。

    1. [Group name (グループ名)] に Auto Scaling グループの名前を入力します。

    2. [Group size] に Auto Scaling グループに必要な容量を入力します。

    3. VPC が必要なインスタンス(T2 のインスタンスなど)を起動設定で指定した場合、[Network] で VPC を選択する必要があります。AWS アカウントで EC2-Classic がサポートされており、インスタンスで VPC が不要な場合は、Launch into EC2-Classic または VPC のいずれかを選択できます。

    4. 前のステップで VPC を選択した場合、[Subnet] で 1 つ以上のサブネットを選択します。前のステップで EC2-Classic を選択した場合、[Availability Zone(s)] で 1 つ以上のアベイラビリティーゾーンを選択します。

    5. [Next: Configure scaling policies] を選択します。

  6. [Configure scaling policies] ページで、以下を実行します。

    1. [Use scaling policies to adjust the capacity of this group] を選択します。

    2. [Scale between] で始まる行を使用して、Auto Scaling グループの最小および最大サイズを指定します。たとえば、グループがすでにその最大サイズに達している場合は、スケールアウトするために新しい最大サイズを指定する必要があります。

      
                                        グループの最小サイズと最大サイズを指定します。
    3. [Increase Group Size] で、スケールアウトポリシーを指定します。オプションでポリシーの名前を指定し、[Add new alarm] を選択します。

    4. [Create Alarm] ページで、[create topic] を選択します。[Send a notification to] に、SNS トピックの名前を入力します。[With these recipients] に、通知の受取先となる 1 つ以上の E メールアドレスを入力します。アラームのデフォルト名をカスタム名に置き換えることができます。次に、ポリシーのメトリクスおよび条件を指定します。たとえば、[Whenever] はデフォルト設定のままにすることができます (CPU 使用率の平均)。[Is] で、>= を選択して [80] パーセントを入力します。[For at least] では、[1] の連続した期間に 5 Minutes を入力します。[Create Alarm] を選択します。

      
                                        アラームの作成
    5. [Take the action] で、Addを選択し、次のフィールドで 30 を入力して、percent of group を選択します。デフォルトでは、このステップ調整値の下限はアラームしきい値であり、上限は null(正の無限大)です。

      別のステップ調整値を追加するには、[Add step] を選択します。最小数のインスタンスを設定してスケールするには、[Add instances in increments of at least 1 instance(s)] の数値フィールドをアップデートします。

      (省略可能) ステップ値を含むスケーリングポリシーを作成するには、デフォルトを使用することをお勧めします。簡易スケーリングポリシーを作成するには、[Create a simple scaling policy] を選択します。詳細については、「Amazon EC2 Auto Scaling の簡易スケーリングとステップスケーリングポリシー」を参照してください。

      
                                        スケールアウトポリシーの作成
    6. [Instances need] にインスタンスのウォームアップ値を指定します。これにより、新しく起動したインスタンスが CloudWatch メトリクスに影響できるようになるまでの時間を制御できます。

    7. [Decrease Group Size] で、スケールインポリシーを指定します。オプションでポリシーの名前を指定し、[Add new alarm] を選択します。

    8. [Create Alarm] ページで、スケールアウトのポリシー用に作成した同じ通知を選択するか、ポリシーでスケール用の新しい通知を作成できます。アラームのデフォルト名をカスタム名に置き換えることができます。[Whenever] はデフォルト設定のままにします ([CPU Utilization] の [Average])。[Is] で、<= を選択して [40] パーセントを入力します。[For at least] では、[1] の連続した期間に 5 Minutes を入力します。[Create Alarm] を選択します。

    9. [Take the action] で、Removeを選択し、次のフィールドで 2 を入力して、instances を選択します。デフォルトでは、このステップ調整値の上限はアラームしきい値であり、下限は null(負の無限大)です。別のステップ調整値を追加するには、[Add step] を選択します。

      (省略可能) ステップ値を含むスケーリングポリシーを作成するには、デフォルトを使用することをお勧めします。簡易スケーリングポリシーを作成するには、[Create a simple scaling policy] を選択します。詳細については、「スケーリングポリシータイプ」を参照してください。

      
                                        スケールアウトポリシーの作成
    10. [Review] を選択します。

    11. [Review] ページで、[Auto Scaling グループの作成] を選択します。

  7. Auto Scaling グループのスケーリングポリシーを確認するには、次のステップを使用します。

    1. [Auto Scaling Group creation status] ページで、Auto Scaling グループが正常に作成されたことを確認します。[Auto Scaling グループの表示] を選択します。

    2. [Auto Scaling Groups] ページで、先ほど作成した Auto Scaling グループを選択します。

    3. [Activity History] タブで、[Status] 列は Auto Scaling グループがインスタンスを正常に起動したかどうかを表示します。

    4. [Instances] タブでは、[Lifecycle] 列にインスタンスのステータスが含まれます。インスタンスはすぐに起動します。インスタンスが起動されると、そのライフサイクル状態は InService に変わります。

      [Health Status] 列には、インスタンスの EC2 インスタンスのヘルスチェックの結果が表示されます。

    5. [Scaling Policies (スケーリングポリシー)] タブを選択すると、Auto Scaling グループ用に作成したポリシーが表示されます。

ステップスケーリングポリシーを設定する (AWS CLI)

以下のように AWS CLI を使用して Auto Scaling グループのステップスケーリングポリシーを設定します。

ステップ 1: Auto Scaling グループを作成する

起動設定 my-launch-config を使用して my-asg という名前の Auto Scaling グループを作成するには、以下の create-auto-scaling-group コマンドを使用します。使用する起動設定がない場合は、作成できます。詳細については、create-launch-configuration を参照してください。

aws autoscaling create-auto-scaling-group --auto-scaling-group-name my-asg \ --launch-configuration-name my-launch-config \ --vpc-zone-identifier "subnet-5ea0c127,subnet-6194ea3b,subnet-c934b782" \ --max-size 5 --min-size 1

ステップ 2: スケーリングポリシーを作成する

アプリケーションの負荷が変化したときの処理を Auto Scaling グループに指示する、ステップまたは簡易スケーリングポリシーを作成できます。

例: my-step-scaleout-policy

以下の put-scaling-policy コマンドを使用して、調整タイプ PercentChangeInCapacitymy-step-scaleout-policy という名前のステップスケーリングポリシーを作成します。このポリシーでは、以下のステップ調整に基づいてグループの容量を増やします (CloudWatch アラームしきい値を 60% と想定)。

  • メトリクスの値が 70% 以上 80% 未満の場合は、インスタンス数を 10% 増やします。

  • メトリクスの値が 80% 以上 90% 未満の場合は、インスタンス数を 20% 増やします。

  • メトリクスの値が 90% 以上の場合は、インスタンス数を 30% 増やします。

aws autoscaling put-scaling-policy \ --auto-scaling-group-name my-asg \ --policy-name my-step-scaleout-policy \ --policy-type StepScaling \ --adjustment-type PercentChangeInCapacity \ --metric-aggregation-type Average \ --step-adjustments MetricIntervalLowerBound=10.0,MetricIntervalUpperBound=20.0,ScalingAdjustment=10 \ MetricIntervalLowerBound=20.0,MetricIntervalUpperBound=30.0,ScalingAdjustment=20 \ MetricIntervalLowerBound=30.0,ScalingAdjustment=30 \ --min-adjustment-magnitude 1

出力には、ポリシーの ARN が含まれます。安全な場所にこの ARN を保存します。これは、CloudWatch アラームを作成するときに必要になります。

{ "PolicyARN": "arn:aws:autoscaling:region:123456789012:scalingPolicy:4ee9e543-86b5-4121-b53b-aa4c23b5bbcc:autoScalingGroupName/my-asg:policyName/my-step-scalein-policy }

例: my-step-scalein-policy

グループの容量を 2 インスタンスに減らす調整タイプ ChangeInCapacitymy-step-scalein-policy という名前のステップスケーリングポリシーを作成するには、以下の put-scaling-policy コマンドを使用します。

aws autoscaling put-scaling-policy \ --auto-scaling-group-name my-asg \ --policy-name my-step-scalein-policy \ --policy-type StepScaling \ --adjustment-type ChangeInCapacity \ --step-adjustments MetricIntervalUpperBound=0.0,ScalingAdjustment=-2

出力には、ポリシーの一意の名前となる ARN が含まれます。その後、ARN またはポリシー名とグループ名の組み合わせを使ってポリシーを指定することができます。安全な場所にこの ARN を保存します。これは、CloudWatch アラームを作成するときに必要になります。

{ "PolicyARN": "arn:aws:autoscaling:region:123456789012:scalingPolicy:ac542982-cbeb-4294-891c-a5a941dfa787:autoScalingGroupName/my-asg:policyName/my-step-scaleout-policy }

簡易スケーリングポリシーの例

あるいは、先ほどの CLI コマンドの代わりに以下の CLI コマンドを使用して、簡易スケーリングポリシーを作成できます。これらのコマンドの出力には、CloudWatch アラームを作成する必要がある各ポリシーの ARN が含まれています。簡易スケーリングポリシーを使用しているため、クールダウン期間が設定されることに注意してください。

例 :my-simple-scaleout-policy

グループの容量を 30 パーセント増やす調整タイプ PercentChangeInCapacitymy-simple-scaleout-policy という名前の簡易スケーリングポリシーを作成するには、以下の put-scaling-policy コマンドを使用します。

aws autoscaling put-scaling-policy --policy-name my-simple-scaleout-policy \ --auto-scaling-group-name my-asg --scaling-adjustment 30 \ --adjustment-type PercentChangeInCapacity

例: my-simple-scalein-policy

グループの容量を 2 インスタンスに減らす調整タイプ ChangeInCapacitymy-simple-scalein-policy という名前の簡易スケーリングポリシーを作成するには、以下の put-scaling-policy コマンドを使用します。

aws autoscaling put-scaling-policy --policy-name my-simple-scalein-policy \ --auto-scaling-group-name my-asg --scaling-adjustment -2 \ --adjustment-type ChangeInCapacity

ステップ 3: CloudWatch アラームを作成する

ステップ 2 で、指定した条件が変更されたときにどのようにスケールインおよびスケールアウトするかを Auto Scaling グループに指示するスケーリングポリシーを作成しました。このステップでは、監視するメトリクスを識別し、スケーリングの条件を定義して、アラームをスケーリングポリシーに関連付けることでアラームを作成します。

例: AddCapacity

以下の CloudWatch put-metric-alarm コマンドを使用して、2 分間の連続した 2 つの評価期間にわたって平均 CPU しきい値 60% に基づいて Auto Scaling グループのサイズを増やすアラームを作成します。独自のカスタムメトリクスを使用するには、名前を --metric-name で指定し、その名前空間を --namespace で指定します。

aws cloudwatch put-metric-alarm --alarm-name Step-Scaling-AlarmHigh-AddCapacity \ --metric-name CPUUtilization --namespace AWS/EC2 --statistic Average \ --period 120 --evaluation-periods 2 --threshold 60 \ --comparison-operator GreaterThanOrEqualToThreshold \ --dimensions "Name=AutoScalingGroupName,Value=my-asg" \ --alarm-actions PolicyARN

例: RemoveCapacity

以下の CloudWatch put-metric-alarm コマンドを使用して、2 分間の連続した 2 つの評価期間にわたって平均 CPU しきい値 40% に基づいて Auto Scaling グループのサイズを減らすアラームを作成します。独自のカスタムメトリクスを使用するには、名前を --metric-name で指定し、その名前空間を --namespace で指定します。

aws cloudwatch put-metric-alarm --alarm-name Step-Scaling-AlarmLow-RemoveCapacity \ --metric-name CPUUtilization --namespace AWS/EC2 --statistic Average \ --period 120 --evaluation-periods 2 --threshold 40 \ --comparison-operator LessThanOrEqualToThreshold \ --dimensions "Name=AutoScalingGroupName,Value=my-asg" \ --alarm-actions PolicyARN