如何在 Fargate 上設定 Amazon ECS 服務自動擴展?

2 分的閱讀內容
0

我想在 AWS Fargate 上配置 Amazon Elastic Container Service (Amazon ECS) 服務自動擴展。

簡短說明

您可以透過在 Fargate 上整合 Amazon ECS 與 Amazon CloudWatch 警報和應用程式自動擴展來增加或減少所需的任務計數。然後,您可以使用 CloudWatch 指標來設定您的 CloudWatch 警報。

當您的 CloudWatch 警報觸發自動擴展政策時,應用程式自動擴展會根據設定的擴展政策決定所需的新計數。然後,應用程式自動擴展會使用新的期望計數值,向 Amazon ECS 進行 UpdateService API 呼叫。Amazon ECS 服務排程器會啟動或關閉任務以符合新的想要計數。您的擴展活動會保持在 InProgress 狀態,直到期望計數和執行中計數相同為止。

**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤訊息,請確認您使用的是最新的 AWS CLI 版本

解決方法

注意: 存取服務自動擴展設定的 IAM 使用者必須擁有支援動態擴展之服務的適當許可。如需詳細資訊,請參閱服務自動擴展所需的 IAM 許可

為您的 Fargate 服務配置服務自動擴展

在 Amazon ECS 主控台中建立更新服務時,請從設定自動擴展頁面選擇下列選項:

  1. 選擇設定服務自動擴展以調整服務期望的計數

  2. 對於任務數目下限,請輸入您希望服務自動擴展使用的任務數目下限。

  3. 針對期望的任務數目,輸入您希望服務自動擴展使用的任務數目。

**注意:**期望的任務數必須在最小和最大任務計數的範圍內。

  1. 針對任務數目上限,請輸入您希望服務自動擴展使用的任務作數目上限。

**注意:**任務的最小和最大數量是您服務的硬性限制。

  1. 對於服務自動擴展的 IAM 角色,請選擇 ecsAutoscaleRole

  2. 自動任務擴展政策區段中,選擇自動擴展政策

  3. 完成設定精靈中的其餘步驟,以建立或更新服務。

選擇擴展政策

根據您的需求和下列考量,選擇目標追蹤政策或步進擴展政策

針對目標追蹤政策:

  • 您必須為指定的指標定義目標值 (臨界值)。應用程式自動擴展可建立和管理觸發擴展政策的 CloudWatch 警報。
  • 您可以使用 ECSServiceAverageCPUUtilizationECSServiceAverageMemoryUtilizationALBRequestCountPerTarget 的 Amazon ECS 服務指標進行目標追蹤。
  • 目標追蹤政策會根據您定義的指標和目標值來計算擴展調整 (也就是所需的任務計數)。您不需要像使用步進擴展政策那樣設定擴展動作。這是因為目標追蹤政策會視需要新增或移除容量,以便將指標保持在或接近指定的目標值。
  • 您必須選擇橫向擴展和縮減的冷卻時間

對於步進擴展政策:

  • 您可以為任何指標建立或使用現有的 CloudWatch 警報以進行步進擴展。
  • 您必須選擇擴展動作或步進調整,例如ScalingAdjustmentMetricIntervalUpperBoundMetricIntervalLowerBound
  • 您可以將擴展調整類型指定為可擴展目標目前容量的百分比,或使用絕對數字。
  • 您可以建立擴展政策來處理縮減和橫向擴展活動,以增加或減少所需的任務計數。

**注意:**如需詳細資訊,請參閱步驟 5: 將您的服務設定為使用服務自動擴展

使用 AWS CLI 設定服務自動擴展

  1. 使用「應用程式自動擴展」功能,將您的 Fargate 服務註冊為可擴展:
aws application-autoscaling register-scalable-target \
--service-namespace ecs --scalable-dimension ecs:service:DesiredCount \
--resource-id service/your-cluster/your-service-name \
--min-capacity 1 --max-capacity 10 --region us-east-1
  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}'

**注意:**建立目標追蹤政策時,應用程式 Auto Scaling 會建立 CloudWatch 警報,以根據您選擇的目標值 (臨界值) 來縮減和橫向擴展。

步進擴展政策:

  1. 使用必要的步進調整建立步進擴展政策:
aws application-autoscaling put-scaling-policy \
--service-namespace ecs --scalable-dimension ecs:service:DesiredCount \
--resource-id service/your-cluster/your-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"}'
  1. 將步驟 1 中的擴展政策與新的或現有的 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=your-cluster Name=ServiceName,Value=your-service-name --unit Percent \
--alarm-actions "arn:aws:autoscaling:us-east-1:xxxxxxx:scalingPolicy:xxxxxx/Test-Step-scaling-policy-ScaleOut"
  1. 為縮減活動建立另一個步進擴展政策和 CloudWatch 警報。

**注意:**當服務的橫向擴展活動進行中時,CloudWatch 觸發的任何縮減活動都會遭到封鎖,直到橫向擴展活動完成為止。當 Amazon ECS 不符合自動擴展設定的期望計數時,InProgress 橫向擴展活動會逾時。逾時可能有多種原因,例如影像或網路問題。如果在橫向擴展冷卻期間 CloudWatch 指標觸發縮減活動,但是橫向擴展活動已完成,則會執行縮減活動。


相關資訊

疑難排解服務自動擴展

服務自動擴展

DescribeScalingActivities

應用程式自動擴展的 AWS CLI 命令參考

AWS 官方
AWS 官方已更新 2 年前