Fargate で Amazon ECS サービスの自動スケーリングを設定する方法を教えてください。

所要時間2分
0

AWS Fargate で Amazon Elastic Container Service (Amazon ECS) サービスの自動スケーリングを設定したいと考えています。

簡単な説明

タスク数を増減するには、Fargate 上の Amazon ECS を Amazon CloudWatch アラームおよび AWS アプリケーション自動スケーリングと統合してください。その後、CloudWatch メトリクスを使用して CloudWatch アラームを設定できます。

CloudWatch アラームが自動スケーリングを開始すると、アプリケーションの自動スケーリングは設定されたスケーリングポリシーを使用して新しいカウントを決定します。次に、アプリケーションの自動スケーリングは、新しいカウント値を使用して Amazon ECS に UpdateService API コールを行います。Amazon ECS サービススケジューラーは、新しいカウントに合わせてタスクを起動または停止します。スケーリングアクティビティは、新しいカウントと実行カウントが同じになるまで InProgress 状態のままになります。

解決策

**注:**サービスの自動スケーリング設定にアクセスする AWS Identity and Access Management (IAM) ユーザーには、動的スケーリングをサポートするサービスに対する適切な権限が必要です。詳細については、「サービスの自動スケーリングに必要な IAM 権限」を参照してください。

Amazon ECS コンソール

Fargate で Amazon ECS サービスの自動スケーリングを設定するには、Amazon ECS コンソールを使用してサービスの自動スケーリングを設定します。次に、スケーリングポリシーをサービスに追加します。

サービスの自動スケーリングの設定

Amazon ECS コンソールの [サービスの自動スケーリング] でサービスを作成または更新する場合は、次の手順を実行します。

  1. [サービスの自動スケーリングを使用する] オプションを選択します。
  2. [最小タスク数] に、サービス自動スケーリングに使用させたいタスクの最小数を入力します。
  3. [最大タスク数] に、サービス自動スケーリングで使用させたいタスクの最大数を入力します。
    **注:**タスクの最小数と最大数は、サービスのハードリミットです。

スケーリングポリシーをサービスに追加する

要件に基づいて、ターゲット追跡ポリシーまたはステップスケーリングポリシーのいずれかを選択します。

  • ターゲット追跡ポリシー: 「ターゲット追跡スケーリングポリシー」の **「Amazon ECS コンソールを使用して Amazon ECS サービスのターゲットスケーリングポリシーを設定するには」**の手順を実行します。
  • ステップスケーリングポリシー: 「ステップスケーリングポリシー」の 「Amazon ECS コンソールを使用して Amazon ECS サービスのステップスケーリングポリシーを設定するには」のステップを実行します。

AWS CLI

**注:**AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI エラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用しているようにしてください。

Fargate で Amazon ECS サービスの自動スケーリングを設定するには、AWS CLI を使用してサービスの自動スケーリングを設定します。次に、設定した値に基づいてスケーリングするターゲット追跡ポリシーまたはステップスケーリングポリシーを作成します。

サービスの自動スケーリングの設定

Fargate サービスをスケーラブルターゲットとしてアプリケーションの自動スケーリングに登録するには、次のコマンドを実行します。

aws application-autoscaling register-scalable-target \
--service-namespace ecs --scalable-dimension ecs:service:DesiredCount \
--resource-id service/<cluster>/<service-name> \
--min-capacity 1 --max-capacity 10 --region us-east-1

ターゲット追跡ポリシーまたはステップスケーリングポリシーの作成

スケーラブルターゲットのターゲット追跡ポリシーまたはステップスケーリングポリシーを作成します。次の例では、Fargate サービスがスケーラブルターゲットです。

ターゲット追跡ポリシー:

aws application-autoscaling put-scaling-policy \
--service-namespace ecs --scalable-dimension ecs:service:DesiredCount \
--resource-id service/<cluster>/<service-name> \
--policy-name Test-target-tracking-scaling-policy --policy-type TargetTrackingScaling \
--target-tracking-scaling-policy-configuration '{ "TargetValue": 75.0, "PredefinedMetricSpecification": {"PredefinedMetricType": "ECSServiceAverageCPUUtilization" }, "ScaleOutCooldown": 60,"ScaleInCooldown": 60}'

**注:**ターゲット追跡ポリシーを作成すると、アプリケーションの自動スケーリングは、選択したターゲット値に基づいてスケーリング用の CloudWatch アラームを作成します。

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

  1. スケールアウトしたアクティビティに必要なステップ調整を含むステップスケーリングポリシーを作成します。

    aws application-autoscaling put-scaling-policy \
    --service-namespace ecs --scalable-dimension ecs:service:DesiredCount \
    --resource-id service/<cluster>/<service-name> \
    --policy-name Test-Step-scaling-policy-ScaleOut --policy-type StepScaling \
    --step-scaling-policy-configuration '{"AdjustmentType": "ExactCapacity","StepAdjustments": [ { "MetricIntervalLowerBound": 20, "ScalingAdjustment": 10}, { "MetricIntervalLowerBound": 0, "MetricIntervalUpperBound": 20,"ScalingAdjustment": 5}],"Cooldown": 60, "MetricAggregationType": "Average"}'
  2. スケーリングポリシーをアラームアクションとして CloudWatch アラームに関連付けます。

    aws cloudwatch put-metric-alarm \
    --alarm-name Test-ScaleOut --metric-name MemoryUtilization \
    --namespace AWS/ECS --statistic Average --period 60 --threshold 60 \
    --comparison-operator GreaterThanOrEqualToThreshold --evaluation-periods 1 --datapoints-to-alarm 1 \
    --dimensions Name=ClusterName,Value=<cluster> Name=ServiceName,Value=<service-name> --unit Percent \
    --alarm-actions "arn:aws:autoscaling:us-east-1:xxxxxxx:scalingPolicy:xxxxxx/Test-Step-scaling-policy-ScaleOut"
  3. 手順を繰り返して、スケールインアクティビティの 2 番目のステップのスケーリングポリシーと CloudWatch アラームを作成します。

**注:**CloudWatch がスケールアウトすると、CloudWatch が開始するすべてのスケールインアクティビティは、スケールアウトアクティビティが完了するまでブロックされます。Amazon ECS がアプリケーションの自動スケーリングで設定された設定数を満たさない場合、InProgress スケールアウトアクティビティはタイムアウトします。タイムアウトの一般的な理由には、イメージやネットワークの問題があります。スケールアウトのクールダウン中に CloudWatch メトリックスがスケールインし始め、スケールアウトアクティビティが完了すると、スケールインアクティビティが実行されます。

関連情報

サービス自動スケーリングのトラブルシューティング

サービス自動スケーリング

DescribeScalingActivities

application-autoscaling

AWS公式
AWS公式更新しました 1年前
コメントはありません

関連するコンテンツ