跳至內容

如何在 Fargate 上設定 Amazon ECS Service Auto Scaling?

2 分的閱讀內容
0

我想在 AWS Fargate 上設定 Amazon Elastic Container Service (Amazon ECS) Service Auto Scaling。

解決方法

**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤訊息,請參閱對 AWS CLI 錯誤進行疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本

當 Amazon CloudWatch 警示啟動自動擴展時,Application Auto Scaling 將使用您的擴展政策來決定新的所需數量。然後,Application Auto Scaling 會使用 desiredCount 參數的新值向 Amazon ECS 發起 UpdateService API 呼叫。Amazon ECS 服務排程器會啟動或停止任務,以符合新的所需數量。您的擴展活動將保持 InProgress 狀態,直到新的所需計數與執行計數相符。

您可以使用 Amazon ECS 主控台或 AWS CLI 在 Fargate 上設定 Amazon ECS 自動擴展。設定服務自動擴展設定的 AWS Identity and Access Management (IAM) 使用者必須具有支援動態擴展之服務的權限。如需詳細資訊,請參閱 Amazon ECS 服務自動擴展所需的 IAM 權限

使用 Amazon ECS 主控台

請完成下列步驟:

  1. 開啟 Amazon ECS console (Amazon ECS 主控台)。
  2. 選擇 Service auto scaling (服務自動擴展),然後選擇 Use service auto scaling (使用服務自動擴展) 選項。
  3. 為服務自動擴展輸入以下值:
    Minimum number of tasks (最小任務數) 中,輸入最少的任務數。
    Maximum number of tasks (最大任務數) 中,輸入最大的任務數。
    **注意:**所需數量不能低於最小數量或高於最大數量。
  4. 建立目標追蹤擴展政策,或建立逐步擴展政策以新增至 Amazon ECS。

使用 AWS CLI

執行以下 register-scalable-target 命令,將 Fargate 註冊為 Application Auto Scaling 的可擴展目標:

aws application-autoscaling register-scalable-target \
--service-namespace ecs \
--scalable-dimension ecs:service:DesiredCount \
--resource-id service/CLUSTER_NAME/SERVICE_NAME \
--min-capacity 1 --max-capacity 10 --region REGION

**注意:**將 CLUSTER_NAME 替換為您的叢集,將 SERVICE_NAME 替換為您的服務,並將 REGION 替換為您的 AWS 區域。

然後,執行 put-scaling-policy 為 Fargate 建立目標追蹤擴展政策或逐步擴展政策作為可擴展目標。在命令中,包含您建立的 JSON 檔案。

目標追蹤擴展政策的命令範例:

aws application-autoscaling put-scaling-policy \
--service-namespace ecs \
--scalable-dimension ecs:service:DesiredCount \
--resource-id service/CLUSTER_NAME/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}'

**注意:**將 CLUSTER_NAME 替換為您的叢集,將 SERVICE_NAME 替換為您的服務,並將 REGION 替換為您的區域。Application Auto Scaling 會根據您的目標值建立 CloudWatch 警示,以進行擴展。

逐步擴展政策的範例命令:

aws application-autoscaling put-scaling-policy \
--service-namespace ecs \
--scalable-dimension ecs:service:DesiredCount \
--resource-id service/CLUSTER_NAME/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"}'

**注意:**將 CLUSTER_NAME 替換為您的叢集,將 SERVICE_NAME 替換為您的服務,並將 REGION 替換為您的區域。

如果您建立了逐步擴展政策,請執行以下 put-metric-alarm 命令,將您的擴展政策新增至 CloudWatch 警示。然後,重複上述步驟,為擴展活動建立第二個步驟擴展政策和 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 Name=ServiceName,Value=SERVICE_NAME --unit Percent \
--alarm-actions "arn:aws:autoscaling:us-east-1:xxxxxxx:scalingPolicy:xxxxxx/Test-Step-scaling-policy-ScaleOut"

**注意:**將 CLUSTER_NAME 替換為您的叢集,將 SERVICE_NAME 替換為您的服務,並將 REGION 替換為您的區域。

Application Auto Scaling 會在擴展活動期間封鎖所有縮減活動,直到擴展完成為止。如果未達到您設定的數量,Amazon ECS 將使 InProgress 擴展活動逾時。逾時的原因包括影像或網路問題。如果 CloudWatch 指標在擴展冷卻時間內縮減,並且擴展活動完成,則 Application Auto Scaling 將執行縮減活動。

相關資訊

Amazon ECS 中的服務自動擴展疑難排解

自動擴展您的 Amazon ECS 服務

DescribeScalingActivities

application-autoscaling