Application Auto Scaling のターゲット追跡スケーリングポリシー - Application Auto Scaling

Application Auto Scaling のターゲット追跡スケーリングポリシー

ターゲット追跡スケーリングポリシーでは、ユーザーがスケーリングメトリクスと一連のターゲット値を選択します。Application Auto Scaling は、スケーリングポリシーをトリガーする CloudWatch アラームを作成および管理し、メトリクスとターゲット値に基づいてスケーリング調整値を計算します。スケーリングポリシーは、指定されたターゲット値、またはそれに近い値にメトリクスを維持するため、必要に応じて容量を追加または削除します。ターゲット追跡スケーリングポリシーは、メトリクスをターゲット値に近い値に維持することに加えて、変化するロードパターンによるメトリクスの変化に適応します。

メトリクスの選択

ターゲット追跡スケーリングポリシーを作成するときは、以下の事前定義されたメトリクスを使用できます。オプションで、カスタムメトリクス仕様を使用することによって、ターゲット追跡スケーリングポリシーで監視および使用するメトリクスを定義することも可能です。

AppStream 2.0

  • AppStreamAverageCapacityUtilization

Aurora

  • RDSReaderAverageCPUUtilization

  • RDSReaderAverageDatabaseConnections

Amazon Comprehend

  • ComprehendInferenceUtilization

DynamoDB

  • DynamoDBReadCapacityUtilization

  • DynamoDBWriteCapacityUtilization

Amazon ECS

  • ALBRequestCountPerTarget (ロードバランサーメトリクス)

  • ECSServiceAverageCPUUtilization

  • ECSServiceAverageMemoryUtilization

ElastiCache

  • ElastiCachePrimaryEngineCPUUtilization

  • ElastiCacheReplicaEngineCPUUtilization

  • ElastiCacheDatabaseMemoryUsageCountedForEvictPercentage

Amazon Keyspaces (Apache Cassandra 向け)

  • CassandraReadCapacityUtilization

  • CassandraWriteCapacityUtilization

Lambda

  • LambdaProvisionedConcurrencyUtilization

Amazon Managed Streaming for Apache Kafka (MSK)

  • KafkaBrokerStorageUtilization

Neptune

  • NeptuneReaderAverageCPUUtilization

スポットフリート (Amazon EC2)

  • ALBRequestCountPerTarget (ロードバランサーメトリクス)

  • EC2SpotFleetRequestAverageCPUUtilization

  • EC2SpotFleetRequestAverageNetworkIn

  • EC2SpotFleetRequestAverageNetworkOut

SageMaker

  • SageMakerVariantInvocationsPerInstance

各メトリクスは、Amazon CloudWatch に保存されているデータポイントの時間順のセットを表します。AWS のメトリクスの多くはデフォルトで毎分報告されますが、Amazon EC2 メトリクスはデフォルトで 5 分ごとに報告されます。追加料金をお支払いいただくことで、詳細モニタリングを有効にして、1 分間隔でインスタンスのメトリクスデータを取得することができます。使用率の変化に対するより迅速な対応を確実にするためにも、詳細モニタリングの有効化をお勧めします。詳細については、Amazon EC2 – Linux インスタンス用ユーザーガイドの「インスタンスの詳細モニタリングを有効または無効にする」を参照してください。

メトリクスを選択するときは、以下の点に注意してください。

  • メトリクスにはターゲット追跡に使用できないものもあります。これは、カスタムメトリクスを指定するときに重要になる場合があります。メトリクスは、有効な使用率メトリクスで、スケーラブルなターゲットの使用頻度を示す必要があります。メトリクス値は、スケーラブルなターゲットを比例的にスケールするためにメトリクスデータを使用できるようにするため、スケーラブルなターゲットの容量に対して比例的に増減する必要があります。

  • ALBRequestCountPerTarget メトリクスを使用するには、ResourceLabel パラメータを指定して、メトリクスに関連付けられているターゲットグループを識別する必要があります。

  • メトリクスが CloudWatch に実数 0 の値を出力する場合 (ALBRequestCountPerTarget など)、Application Auto Scaling は、アプリケーションへのトラフィックがない場合に 0 にスケールインできます。スケーラブルターゲットにリクエストがルーティングされないときにターゲットを 0 にスケールインするには、スケーラブルターゲットの最小容量が 0 に設定されている必要があります。

  • サービスの中には、ターゲットサービスのコンソールを通じてカスタムメトリクスを管理できないものもあります。ターゲットサービスがコンソールでカスタムメトリクスをサポートするかどうかを確認するには、そのサービスのドキュメントを参照してください。

Considerations

次の考慮事項に注意が必要です。

  • ターゲットの追跡スケーリングポリシーでは、指定されたメトリクスがターゲット値を超えている場合、スケールアウトする必要があると見なされます。指定されたメトリクスがターゲット値を下回っている場合、ターゲットの追跡スケーリングポリシーを使用してスケールアウトすることはできません。

  • ターゲット値と実際のメトリクスデータポイント間にギャップが発生する場合があります。これは、Application Auto Scaling が追加または削除する容量を判断するときに、その数を切り上げまたは切り捨てることによって、常に控えめに動作するためです。これにより、不十分な容量を追加したり、必要以上に容量を削除することを防ぎます。ただし、小容量のスケーラブルなターゲットの場合、実際のメトリクスデータポイントがターゲット値からかなり離れているように見えることがあります。

  • 容量が大きいスケーラブルなターゲットでは、容量を追加または削除することにより、ターゲット値と実際のメトリクスデータポイントの間のギャップが少なくなります。

  • アプリケーションの可用性を確保するため、Application Auto Scaling はスケールアウトをメトリクスに比例して可能な限り早急に実行しますが、スケールインはより段階的に行います。

  • それぞれが異なるメトリクスを使用していれば、スケーラブルなターゲットに対して複数のターゲットの追跡スケーリングポリシーを設定できます。Application Auto Scaling の目的は常に可用性を優先することであるため、その動作は、スケールアウトまたはスケールインに対するターゲット追跡ポリシーの準備が整っているかどうかに応じて異なります。ターゲット追跡ポリシーのいずれかでスケールアウトする準備ができると、スケーラブルなターゲットがスケールアウトされますが、すべてのターゲット追跡ポリシー (スケールイン部分が有効) でスケールインする準備ができている場合のみスケールインされます。

  • 複数のポリシーが、スケーラブルターゲットに対してスケールアウトまたはスケールインする指示を同時に出す場合、Application Auto Scaling はスケールインとスケールアウトのどちらについても、最大の容量を提供するポリシーに基づいてスケールします。これにより、複数のシナリオに対応する柔軟性が高まり、アプリケーションワークロードを処理するのに十分な容量が常に確保されます。

  • ターゲット追跡スケーリングポリシーのスケールイン部分を無効にすることもできます。この機能には、スケールアウトに使用するのとは異なるメソッドをスケーリングに使用できる柔軟性があります。たとえば、スケールアウトにはターゲットの追跡スケーリングポリシーを使用しながら、スケールインにはステップスケーリングポリシーを使用できます。

  • ただし、ターゲット追跡スケーリングポリシーをステップスケーリングポリシーとともに使用する場合、ポリシー間の競合によって望ましくない動作が生じる可能性があるため、注意することをお勧めします。たとえば、ターゲット追跡ポリシーがスケールインする準備が整う前に、ステップスケーリングポリシーがスケールインアクティビティを開始した場合、スケールインアクティビティはブロックされません。スケールインアクティビティが完了した後で、ターゲット追跡ポリシーにより、スケーラブルなターゲットに再びスケールアウトするよう指示できます。

  • ターゲット追跡スケーリングポリシーは、アラームの状態が INSUFFICIENT_DATA になっているときにはスケールインしません。詳細については、「CloudWatch アラームでのモニタリング」を参照してください。

  • ターゲット追跡スケーリングポリシー用に設定された CloudWatch アラームを編集または削除しないでください。ターゲット追跡スケーリングポリシーに関連付けられている CloudWatch アラームは AWS によって管理されており、不要になると自動的に削除されます。

クールダウン期間

前回のスケーリングアクティビティが有効になるまで待機する時間をクールダウン期間と呼びます。

ターゲット追跡スケーリングポリシーでは、次の 2 種類のクールダウン期間があります。

  • スケールアウトクールダウン期間では、スケールアウトが継続的に (ただし過剰になることなく) 行われます。ターゲット追跡スケーリングポリシーを使用して Application Auto Scaling が正常にスケールアウトすると、クールダウン時間の計算が開始されます。スケーリングポリシーは、より大きなスケールアウトがトリガーされるか、クールダウン期間が終了しない限り、必要な容量を再度増加させません。このスケールアウトクールダウン期間が有効な間は、スケールアウトアクティビティを開始することで追加された容量は、次のスケールアウトアクティビティに予定される容量の一部として繰り入れられます。

  • スケールインクールダウン期間では、スケールインを控え目に行ってアプリケーションの可用性を保護することを目的としているため、スケールインアクティビティはクールダウン期間が終了するまでブロックされます。ただし、スケールインクールダウン期間中に別のアラームがスケールアウトアクティビティをトリガーした場合、Application Auto Scaling scale によってターゲットが即座にスケールアウトされます。この場合、スケールインクールダウン期間は停止し、完了しません。

各クールダウン期間は秒単位で測定され、スケーリングポリシー関連のスケーリングアクティビティにのみ適用されます。クールダウン期間中、スケジュールされたアクションがスケジュールされた時間に開始されると、クールダウン期間の期限が切れるのを待たずにスケーリングアクティビティを即座にトリガーできます。

デフォルト値で開始し、値を後で微調整できます。たとえば、ターゲット追跡スケーリングポリシーが短期間に発生する変更に対して積極的になりすぎないように、場合によってはクールダウン期間を延長する必要があります。デフォルト値については、Application Auto Scaling API リファレンスの「TargetTrackingScalingPolicyConfiguration」を参照してください。

使用率の高い期間中のアプリケーションの可用性のサポート

ターゲット追跡スケーリングポリシーは、使用率が低下したときの容量の削除よりも、使用率が増加したときの容量の追加の方が積極的です。例えば、ポリシーの指定されたメトリクスがターゲット値に到達した場合、ポリシーはアプリケーションの負荷がすでに高くなっていると見なします。したがって、できるだけ早くメトリクス値に比例した容量を追加することで対応します。メトリクスが大きいほど、より多くの容量が追加されます。

メトリクスがターゲット値を下回ると、ポリシーは使用率が最終的には再び増加することを期待します。このため、ポリシーが容量を削除することによってスケーリングの速度を落とすのは、使用率がターゲット値を下回るしきい値未満になり (通常は 10% 以上低下)、そのレベルが使用率が減速したと見なされるに十分である場合のみになります。この保守的な動作の意図は、アプリケーションの需要が以前ほど高いレベルでなくなった場合にのみ、容量が削除されるようにすることです。これは現在、すべてのターゲット追跡スケーリングポリシーのデフォルトの動作です (ただし、動作は将来変更される可能性があります)。

周期的な性質のワークロードの場合、スケジュールされたスケーリングを使用してスケジュールに従って容量の変更を自動化することもできます。スケジュールされたアクションごとに、新しい最小容量値と新しい最大容量値を定義できます。これらの値は、スケーリングポリシーの境界を形成します。

スケジュールされたスケーリングとターゲットトラッキングスケーリングの組み合わせにより、容量がすぐに必要になったときに、使用率レベルの急激な増加による影響を軽減できます。

スケーリングポリシーの作成、管理、および削除用によく使用されるコマンド

スケーリングポリシーの操作用によく使用されるコマンドには以下が含まれます。

  • register-scalable-target AWS リソースまたはカスタムリソースをスケーラブルターゲット (Application Auto Scaling がスケールできるリソース) として登録し、スケーリングを一時停止および再開します。

  • put-scaling-policy 既存のスケーラブルターゲットのスケーリングポリシーを追加または変更します。

  • describe-scaling-activities AWS リージョン内でのスケーリングアクティビティに関する情報を返します。

  • describe-scaling-policies AWS リージョン内のスケーリングポリシーに関する情報を返します。

  • delete-scaling-policy スケーリングポリシーを削除します。

Limitations

以下は、ターゲット追跡スケーリングポリシーの使用時における制限事項です。

  • スケーラブルターゲットを Amazon EMR クラスターにすることはできません。Amazon EMR はターゲット追跡スケーリングポリシーをサポートしません。

  • Amazon MSK クラスターがスケーラブルターゲットである場合は、スケールインが無効化されており、有効にすることはできません。

  • RegisterScalableTarget または PutScalingPolicy API オペレーションを使用して、AWS Auto Scaling スケーリングプランを更新することはできません。スケーリングプランの使用については、AWS Auto Scaling ドキュメントを参照してください。