

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# Application Auto Scaling 的目標追蹤擴展政策
<a name="application-auto-scaling-target-tracking"></a>

目標追蹤擴展政策會根據目標指標的值，自動擴展應用程式規模。如此一來，您的應用程式就能維持最佳效能和成本效益，無需手動介入。

如果使用目標追蹤，您必須選取指標和目標值，以代表應用程式理想的平均使用率或輸送量。Application Auto Scaling 會建立和管理 CloudWatch 警示，當指標偏離目標就會觸發擴展事件，類似於電熱器會維持於目標溫度一樣。

例如，假設您目前有一個應用程式在 Spot 機群上執行，而且您希望當應用程式的負載變更時，該機群的 CPU 使用率保持在 50% 左右。這樣可以給予您額外的容量處理流量尖峰，而不會維持過多的閒置資源數。

您可以透過建立以 50% 的平均 CPU 利用率為目標的目標追蹤擴展政策來滿足此需求。當 CPU 為了處理增加的負載而使用率超過 50%，Application Auto Scaling 就會擴增規模 (增加容量)。當 CPU 使用率降至 50% 以下，則會縮減規模 (減少容量)，在低使用率期間維持最佳化成本。

目標追蹤政策無需手動定義 CloudWatch 警示和擴展調整內容，Application Auto Scaling 會根據您設定的目標自動處理。

您可以在預先定義或自訂指標的基礎上建立目標追蹤政策。
+ **預先定義指標**：Application Auto Scaling 提供的指標，例如平均 CPU 使用率或單一目標平均請求數。
+ **自訂指標**：您可以使用指標數學來合併指標、運用現有指標，或使用您自行發佈到 CloudWatch 的自訂指標。

選擇與可擴充目標容量變動情形依比例反向變化的指標。因此，如果您加倍容量，指標會減少 50%。如此一來，指標資料就能依比例準確觸發擴展事件。

**Topics**
+ [目標追蹤的運作方式](target-tracking-scaling-policy-overview.md)
+ [建立目標追蹤擴展政策](create-target-tracking-policy-cli.md)
+ [刪除目標追蹤擴展政策](delete-target-tracking-policy.md)
+ [使用指標數學](application-auto-scaling-target-tracking-metric-math.md)

# Application Auto Scaling 的目標追蹤擴展如何運作
<a name="target-tracking-scaling-policy-overview"></a>

本主題說明目標追蹤擴展的運作方式，並介紹目標追蹤擴展政策的關鍵元素。

**Topics**
+ [運作方式](#target-tracking-how-it-works)
+ [選擇 Metrics (指標)](#target-tracking-choose-metrics)
+ [定義目標值](#target-tracking-define-target-value)
+ [定義冷卻時間](#target-tracking-cooldown)
+ [考量事項](#target-tracking-considerations)
+ [多個擴展政策](#target-tracking-multiple-scaling-policies)
+ [常用命令](#target-tracking-policy-commonly-used-commands)
+ [相關資源](#target-tracking-related-resources)
+ [限制](#target-tracking-limitations)

## 運作方式
<a name="target-tracking-how-it-works"></a>

若要使用目標追蹤擴展，您可以建立目標追蹤擴展政策並指定下列項目：
+ **指標**：要追蹤的 CloudWatch 指標，例如平均 CPU 使用率或單一目標平均請求數。
+ **目標值**：指標的目標值，例如 50% CPU 使用率或每分鐘每個目標 1000 個請求。

Application Auto Scaling 會建立和管理可觸發擴展政策的 CloudWatch 警示，並根據指標和目標值來計算擴展調整內容。該功能會視需求新增及移除容量，讓指標保持在等於或接近指定目標值的狀態。

指標高於目標值時，Application Auto Scaling 會擴增規模，亦即增加容量，以減少指標值與目標值之間的差距；當指標低於目標值時，Application Auto Scaling 則會移除容量，縮減規模。

擴展活動之間會有冷卻時間，以防止容量快速波動。您可自行選擇是否設定擴展政策的冷卻時間。

下圖顯示設置完成後目標追蹤擴展政策的運作方式總覽。

![\[目標追蹤擴展政策概觀圖\]](http://docs.aws.amazon.com/zh_tw/autoscaling/application/userguide/images/target-tracking-scaling-policy.png)


請注意，相較於在使用率減少時移除容量，目標追蹤擴展政策會在使用率增加時更積極地新增容量。例如，如果政策的指定指標達到目標值，政策會假設應用程式已經滿載。因此，它採取的回應方式為根據指標值的比例盡快新增容量。指標越高，新增的容量越多。

當指標低於目標值時，如果政策計算出移除最小容量單位可能會使指標回到高於目標值，則不會縮減。在此情況中，只有在使用率突破閾值遠低於目標值 (通常低於 10%)，而確定使用率減緩時，才會移除容量，擴展速度會變慢。這種較為保守的行為的目的是，確保只有在應用程式不再遇到與之前同樣大量的需求時，才會移除容量。

## 選擇 Metrics (指標)
<a name="target-tracking-choose-metrics"></a>

您可以使用預先定義的指標或自訂指標建立目標追蹤擴展政策。

在使用預先定義的指標類型建立目標追蹤擴展政策時，您從 [目標追蹤擴展政策的預先定義指標](monitoring-cloudwatch.md#predefined-metrics) 中的預先定義指標清單選擇一個指標。

選擇指標時請謹記以下事項：
+ 並非所有的自訂指標都適用於目標追蹤。指標必須是有效的使用率指標，而且能夠表示可擴展性目標的忙碌程度。指標值必須根據可擴展性目標的容量按比例增加或減少，以使指標資料可用於按比例擴展可擴展性目標。
+ 若要使用 `ALBRequestCountPerTarget` 指標，您必須指定 `ResourceLabel` 參數來識別與指標相關聯的目標群組。
+ 當指標向 CloudWatch 真的發出 0 值時 (例如 `ALBRequestCountPerTarget`)，如果應用程式持續一段時間沒有流量，Application Auto Scaling 可能縮減到 0。為了讓可擴展的目標在沒有收到請求時縮減到 0，可擴展目標的容量下限必須設定為 0。
+ 您可以使用指標數學來合併現有的指標，而不是發布新的指標來用於您的擴展政策。如需詳細資訊，請參閱[使用指標數學運算建立 Application Auto Scaling 的目標追蹤擴展政策](application-auto-scaling-target-tracking-metric-math.md)。
+ 若要查看使用的服務是否支援在服務主控台中指定自訂指標，請參閱該服務的文件。
+ 建議您使用可以一分鐘間隔提供的指標，從而幫助您更快速地擴展以回應利用率變更。目標追蹤會針對所有預先定義的指標和自訂指標，評估以一分鐘精細度彙總的指標，但基礎指標可能會以較低頻率發佈資料。例如，依預設，所有 Amazon EC2 指標都會以五分鐘的間隔傳送，但可設定為一分鐘 (稱為詳細監控)。此選擇取決於個別服務。大多數人會嘗試使用盡可能小的間隔。

## 定義目標值
<a name="target-tracking-define-target-value"></a>

建立目標追蹤擴展政策時，您必須指定目標值。目標值代表應用程式的最佳平均使用率或輸送量。若要以符合成本效益的方式使用資源，請盡可能高地設定目標值，並為非預期的流量增加提供合理的緩衝區。如果您的應用程式已經針對一般流量進行最佳化橫向擴展，實際指標值應等於或低於目標值。

擴展政策以輸送量為基礎時 (例如 Application Load Balancer 每個目標的要求計數、網路 I/O 或其他計數指標)，目標值代表一分鐘期間單一實體的最佳平均輸送量 (例如 Application Load Balancer 目標群組的單一目標)。

## 定義冷卻時間
<a name="target-tracking-cooldown"></a>

您可以選擇在目標追蹤擴展政策中定義冷卻時間。

冷卻時間指定擴展政策等候上一個擴展活動生效的時間量。

冷卻時間有兩種類型：
+ *向外擴展冷卻期間*的目的是連續的規模擴展 (但並非過度)。在 Application Auto Scaling 使用擴展政策成功擴展之後，就會開始計算冷卻時間。除非觸發較大的橫向擴展或冷卻時間結束，否則擴展規模政策不會再次增加所需的容量。在向外擴展冷卻期間有效時，由起始冷卻的向外擴展活動所增加的容量，將計入下次向外擴展活動所需的容量。
+ *縮減冷卻時間*的用意在於保守縮減以保護應用程式的可用性，所以縮減冷卻期過後才會開放縮減活動。不過，若在向內擴展冷卻期間另有警示觸發了向外擴展活動，Application Auto Scaling 則會立即向外擴展目標。在這種情況下，縮減冷卻時間隨即停止，且不會完成。

每個冷卻期間都是以秒為單位進行測量，且僅適用於擴展政策相關擴展活動。在冷卻期間，當已排定的動作在已排定的時間開始時，它可以立即觸發擴展活動，而無須等候冷卻期間過期。

您可以從預設值開始，之後再進行微調。例如，您可能需要增加冷卻期間，以防止目標追蹤擴展政策對短時間內發生的變更過於積極。

**預設值**

Application Auto Scaling 為 ElastiCache 提供預設值 600，並為下列可擴展目標提供預設值 300：
+ WorkSpaces 應用程式機群
+ Aurora 資料庫叢集
+ ECS 服務
+ Neptune 叢集
+ SageMaker AI 端點變體
+ SageMaker AI 推論元件
+ SageMaker AI Serverless 佈建並行
+ Spot Fleets
+ WorkSpaces 集區
+ 自訂資源

對於所有其他可擴展目標，預設值為 0 或 null：
+ Amazon Comprehend 文件分類和實體識別器端點
+ DynamoDB 資料表和全域次要索引
+ Amazon Keyspaces 資料表
+ Lambda 佈建並行
+ Amazon MSK 代理程式儲存

當 Application Auto Scaling 評估冷卻時間時，Null 值會被視為與零值相同。

您可以更新任何預設值，包括 null 值，以設定自己的冷卻時間。

## 考量事項
<a name="target-tracking-considerations"></a>

使用目標追蹤擴展政策時，下列考量適用：
+ 請勿編輯或刪除用於目標追蹤擴展政策的 CloudWatch 警示。Application Auto Scaling 可建立和管理與目標追蹤擴展政策關聯的 CloudWatch 警示，並會在不再需要時刪除它們。
+ 如果指標缺少資料點，這會導致 CloudWatch 警示狀態變更為 `INSUFFICIENT_DATA`。發生這種情況時，Application Auto Scaling 無法擴展您的可擴展目標，直到找到新的資料點為止。如需詳細資訊，請參閱「Amazon CloudWatch 使用者指南」**中的[設定 CloudWatch 警示如何處理遺失資料](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html#alarms-and-missing-data)。
+ 如果指標在設計上是以稀疏的方式來報告，指標數學可能會有所幫助。例如，若要使用最新的值，請使用指標為 `m1` 的 `FILL(m1,REPEAT)` 函數。
+ 您可能會看到目標值與實際指標資料點之間有些差距。原因是 Application Auto Scaling 在決定新增或移除多少容量時，一律以四捨五入來保守處理。這樣可防止新增不足的容量，或移除過多的容量。不過，對於具有小容量的可擴展性目標，實際指標資料點可能會遠於目標值。

  例如，假設您為 CPU 使用率設定了 50% 的目標值，然後 Auto Scaling 群組就會超過目標。我們可能會判斷新增 1.5 執行個體使 CPU 使用率降低接近 50%。由於不可能新增 1.5 執行個體，我們四捨五入而新增兩個執行個體。這可能會降低 CPU 使用率低於 50%，但可確保有足夠的資源來支援您的應用程式。同樣地，如果我們判斷移除 0.5 個執行個體會將您的 CPU 使用率提高到 50% 以上，我們將選擇不縮減，直到指標降低到我們認為縮減不會造成振盪的程度為止。

  對於具有較大容量的可擴展性目標，新增或移除容量促使目標值與實際指標資料點之間的差距變少。
+ 目標追蹤擴展政策假設在指定的指標超過目標值時，應執行向外擴展。您無法使用目標追蹤擴展政策在指定的指標低於目標值時執行向外擴展。

## 多個擴展政策
<a name="target-tracking-multiple-scaling-policies"></a>

任一個可擴展性目標均能有多個目標追蹤擴展政策，但前提是各政策使用不同的指標。Application Auto Scaling 的用意一律以可用性為優先，因此其行為視目標追蹤政策是準備水平擴展或縮減而有所不同。如果任何目標追蹤政策已準備好擴展，此服務就會擴展可擴展目標，但只有在所有目標追蹤政策 (已啟用縮減部分) 已準備好縮減，才會進行縮減。

如果多個擴展政策同一時間指示可擴展的目標橫向擴展或縮減，Application Auto Scaling 會根據縮減和橫向擴展都可達最大容量的政策來擴展。如此能夠更靈活地涵蓋多種情況，確保始終有足夠的容量可處理您的工作負載。

您可以停用目標追蹤擴展政策的縮減部分，以對縮減和橫向擴展使用不同的方法。例如，您可以使用步進擴展政策進行向內擴展，同時使用目標追蹤擴展政策向外擴展。

不過，我們建議您小心使用目標追蹤擴展政策與步進擴展政策，因為這些政策之間的衝突可能會造成非預期行為。例如，如果步進擴展政策在目標追蹤政策準備好縮減之前即啟動縮減活動，則不會封鎖縮減活動。向內擴展活動完成之後，目標追蹤政策可以指示可擴展的目標再次向外擴展。

對於本質上是循環的工作負載，您也可以選擇使用已排定的擴展在排程上自動執行容量變更。對於每個已排定的動作，可以定義新的容量下限值和新的容量上限值。這些值形成擴展政策的界限。透過結合已排定的擴展和目標追蹤擴展，可協助在立即需要容量時，降低使用率急遽增加的影響。

## 建立、管理及刪除擴展政策常用的命令
<a name="target-tracking-policy-commonly-used-commands"></a>

擴展政策常用的命令包括：
+ [register-scalable-target](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/register-scalable-target.html) 將 AWS 或自訂資源註冊為可擴展的目標 (Application Auto Scaling 可以擴展的資源），以及暫停和繼續擴展。
+ [put-calable-policy](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/put-scaling-policy.html)，新增或修改現有可擴展目標的擴展政策。
+  [describe-scaling-activities](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/describe-scaling-activities.html) 傳回 AWS 區域中擴展活動的相關資訊。
+ [describe-scaling-policies](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/describe-scaling-policies.html)，傳回 AWS 區域的擴展政策相關資訊。
+ [delete-scaling-policy](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/delete-scaling-policy.html)，刪除擴展政策。

## 相關資源
<a name="target-tracking-related-resources"></a>

如需取得有關建立 Amazon EC2 Auto Scaling 的目標追蹤擴展政策之資訊，請參閱《*Amazon EC2 Auto Scaling 使用者指南*》中的「[Amazon EC2 Auto Scaling 的目標追蹤擴展政策](https://docs.aws.amazon.com/autoscaling/ec2/userguide/as-scaling-target-tracking.html)」。

## 限制
<a name="target-tracking-limitations"></a>

以下是使用目標追蹤擴展政策時的限制：
+ 可擴展的目標不能是 Amazon EMR 叢集。Amazon EMR 不支援目標追蹤擴展政策。
+ 當 Amazon MSK 叢集是可擴展的目標時，縮減會停用且無法啟用。
+ 您無法使用 `RegisterScalableTarget`或 `PutScalingPolicy` API 操作來更新 AWS Auto Scaling 擴展計劃。
+ 主控台對可擴展資源的檢視、新增、更新或移除目標追蹤擴展政策的存取，視您所使用的資源而定。如需詳細資訊，請參閱[AWS 服務 您可以搭配 Application Auto Scaling 使用](integrated-services-list.md)。

# 使用 建立 Application Auto Scaling 的目標追蹤擴展政策 AWS CLI
<a name="create-target-tracking-policy-cli"></a>

此範例使用 AWS CLI 命令來建立 Amazon EC2 Spot Fleet 的目標機架政策。對於不同的可擴展性目標，請在 中指定其命名空間`--service-namespace`、在 中指定其可擴展性維度`--scalable-dimension`，以及在 中指定其資源 ID`--resource-id`。

使用 時 AWS CLI，請記住，您的命令會在為您的設定檔 AWS 區域 設定的 中執行。如果您想在不同區域中執行命令，則可變更設定檔的預設區域，或搭配 `--region` 參數使用命令。

**Topics**
+ [步驟 1：註冊可擴展的目標](#target-tracking-register-scalable-target)
+ [步驟 2：建立目標追蹤擴展政策](#create-target-tracking-policy)
+ [步驟 3：說明目標追蹤擴展政策](#describe-target-tracking-policy)

## 步驟 1：註冊可擴展的目標
<a name="target-tracking-register-scalable-target"></a>

如果您尚未註冊可擴展的目標，請註冊。使用 [register-scalable-target](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/register-scalable-target.html) 命令，將目標服務中的特定資源註冊為可擴展的目標。以下範例向 Application Auto Scaling 註冊 Spot 機群請求。Application Auto Scaling 在 Spot 機群中可擴展的執行個體數量下限為 2 個執行個體，上限為 10 個執行個體。將每個*使用者輸入預留位置*替換為自己的資訊。

**Linux、macOS 或 Unix**

```
aws application-autoscaling register-scalable-target --service-namespace ec2 \
  --scalable-dimension ec2:spot-fleet-request:TargetCapacity \
  --resource-id spot-fleet-request/sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE \
  --min-capacity 2 --max-capacity 10
```

**Windows**

```
aws application-autoscaling register-scalable-target --service-namespace ec2 ^
  --scalable-dimension ec2:spot-fleet-request:TargetCapacity ^
  --resource-id spot-fleet-request/sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE ^
  --min-capacity 2 --max-capacity 10
```

**Output**  
如果成功，此命令會傳回可擴展目標的 ARN。以下為範例輸出。

```
{
    "ScalableTargetARN": "arn:aws:application-autoscaling:region:account-id:scalable-target/1234abcd56ab78cd901ef1234567890ab123"
}
```

## 步驟 2：建立目標追蹤擴展政策
<a name="create-target-tracking-policy"></a>

若要建立目標追蹤擴展政策，您可以使用下列範例來協助您開始使用。

**建立目標追蹤擴展政策**

1. 使用下列`cat`命令，將擴展政策的目標值和預先定義的指標規格存放在主目錄中名為 `config.json`的 JSON 檔案中。以下是將平均 CPU 使用率保持在 50% 的目標追蹤組態範例。

   ```
   $ cat ~/config.json
   {
     "TargetValue": 50.0,
     "PredefinedMetricSpecification": 
       {
         "PredefinedMetricType": "EC2SpotFleetRequestAverageCPUUtilization"
       }
   }
   ```

   如需詳細資訊，請參閱《*Application Auto Scaling API 參考*》中的 [PredefinedMetricSpecification](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_PredefinedMetricSpecification.html)。

   或者，您可以建立自訂指標規格並從 CloudWatch 新增每個參數的值，以使用自訂的擴展指標。以下是將指定指標的平均使用率保持在 100 的範例目標追蹤組態。

   ```
   $ cat ~/config.json
   {
      "TargetValue": 100.0,
      "CustomizedMetricSpecification":{
         "MetricName": "MyUtilizationMetric",
         "Namespace": "MyNamespace",
         "Dimensions": [
            {
               "Name": "MyOptionalMetricDimensionName",
               "Value": "MyOptionalMetricDimensionValue"
            }
         ],
         "Statistic": "Average",
         "Unit": "Percent"
      }
   }
   ```

   如需詳細資訊，請參閱《*Application Auto Scaling API 參考*》中的 [CustomizedMetricSpecification](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_CustomizedMetricSpecification.html)。

1. 使用以下 [put-scaling-policy](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/put-scaling-policy.html) 命令並指定您建立的 `config.json` 檔案，建立名為 `cpu50-target-tracking-scaling-policy` 的擴展政策。

   **Linux、macOS 或 Unix**

   ```
   aws application-autoscaling put-scaling-policy --service-namespace ec2 \
     --scalable-dimension ec2:spot-fleet-request:TargetCapacity \
     --resource-id spot-fleet-request/sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE \
     --policy-name cpu50-target-tracking-scaling-policy --policy-type TargetTrackingScaling \
     --target-tracking-scaling-policy-configuration file://config.json
   ```

   **Windows**

   ```
   aws application-autoscaling put-scaling-policy --service-namespace ec2 ^
     --scalable-dimension ec2:spot-fleet-request:TargetCapacity ^
     --resource-id spot-fleet-request/sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE ^
     --policy-name cpu50-target-tracking-scaling-policy --policy-type TargetTrackingScaling ^
     --target-tracking-scaling-policy-configuration file://config.json
   ```

**Output**  
如果成功，此命令會傳回代表您建立的兩個 CloudWatch 警示的 ARN 和名稱。以下為範例輸出。

   ```
   {
       "PolicyARN": "arn:aws:autoscaling:region:account-id:scalingPolicy:policy-id:resource/ec2/spot-fleet-request/sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE:policyName/cpu50-target-tracking-scaling-policy",
       "Alarms": [
           {
               "AlarmARN": "arn:aws:cloudwatch:region:account-id:alarm:TargetTracking-spot-fleet-request/sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE-AlarmHigh-d4f0770c-b46e-434a-a60f-3b36d653feca",
               "AlarmName": "TargetTracking-spot-fleet-request/sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE-AlarmHigh-d4f0770c-b46e-434a-a60f-3b36d653feca"
           },
           {
               "AlarmARN": "arn:aws:cloudwatch:region:account-id:alarm:TargetTracking-spot-fleet-request/sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE-AlarmLow-1b437334-d19b-4a63-a812-6c67aaf2910d",
               "AlarmName": "TargetTracking-spot-fleet-request/sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE-AlarmLow-1b437334-d19b-4a63-a812-6c67aaf2910d"
           }
       ]
   }
   ```

## 步驟 3：說明目標追蹤擴展政策
<a name="describe-target-tracking-policy"></a>

您可使用以下 [describe-scaling-policies](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/describe-scaling-policies.html) 命令，描述指定的服務命名空間的所有擴展政策。

```
aws application-autoscaling describe-scaling-policies --service-namespace ec2
```

使用 `--query` 參數可將結果篩選為僅包含目標追蹤擴展政策。如需 `query` 語法的詳細資訊，請參閱《AWS Command Line Interface 使用者指南》**中的[從 AWS CLI控制命令輸出](https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-output.html)。

**Linux、macOS 或 Unix**

```
aws application-autoscaling describe-scaling-policies --service-namespace ec2 \
  --query 'ScalingPolicies[?PolicyType==`TargetTrackingScaling`]'
```

**Windows**

```
aws application-autoscaling describe-scaling-policies --service-namespace ec2 ^
  --query "ScalingPolicies[?PolicyType==`TargetTrackingScaling`]"
```

**Output**  
以下為範例輸出。

```
[
    {
        "PolicyARN": "PolicyARN",
        "TargetTrackingScalingPolicyConfiguration": {
            "PredefinedMetricSpecification": {
                "PredefinedMetricType": "EC2SpotFleetRequestAverageCPUUtilization"
            },
            "TargetValue": 50.0
        },
        "PolicyName": "cpu50-target-tracking-scaling-policy",
        "ScalableDimension": "ec2:spot-fleet-request:TargetCapacity",
        "ServiceNamespace": "ec2",
        "PolicyType": "TargetTrackingScaling",
        "ResourceId": "spot-fleet-request/sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE",
        "Alarms": [
            {
                "AlarmARN": "arn:aws:cloudwatch:region:account-id:alarm:TargetTracking-spot-fleet-request/sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE-AlarmHigh-d4f0770c-b46e-434a-a60f-3b36d653feca",
                "AlarmName": "TargetTracking-spot-fleet-request/sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE-AlarmHigh-d4f0770c-b46e-434a-a60f-3b36d653feca"
            },
            {
                "AlarmARN": "arn:aws:cloudwatch:region:account-id:alarm:TargetTracking-spot-fleet-request/sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE-AlarmLow-1b437334-d19b-4a63-a812-6c67aaf2910d",
                "AlarmName": "TargetTracking-spot-fleet-request/sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE-AlarmLow-1b437334-d19b-4a63-a812-6c67aaf2910d"
            }
        ],
        "CreationTime": 1515021724.807
    }
]
```

# 使用 刪除 Application Auto Scaling 的目標追蹤擴展政策 AWS CLI
<a name="delete-target-tracking-policy"></a>

目標追蹤擴展政策用畢之後，您可以使用 [delete-scaling-policy](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/delete-scaling-policy.html) 命令將其刪除。

以下命令將刪除對指定的 Spot 機群請求所指定的目標追蹤擴展政策。還會刪除 Application Auto Scaling 替您建立的 CloudWatch 警示。

**Linux、macOS 或 Unix**

```
aws application-autoscaling delete-scaling-policy --service-namespace ec2 \
  --scalable-dimension ec2:spot-fleet-request:TargetCapacity \
  --resource-id spot-fleet-request/sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE \
  --policy-name cpu50-target-tracking-scaling-policy
```

**Windows**

```
aws application-autoscaling delete-scaling-policy --service-namespace ec2 ^
  --scalable-dimension ec2:spot-fleet-request:TargetCapacity ^
  --resource-id spot-fleet-request/sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE ^
  --policy-name cpu50-target-tracking-scaling-policy
```

# 使用指標數學運算建立 Application Auto Scaling 的目標追蹤擴展政策
<a name="application-auto-scaling-target-tracking-metric-math"></a>

利用指標數學，可查詢多個 CloudWatch 指標，並使用數學表達式根據這些指標來建立新的時間序列。您可以在 CloudWatch 主控台視覺化產生的時間序列，並將其新增至儀表板。如需有關指標數學的詳細資訊，請參閱《Amazon CloudWatch 使用者指南》中的[使用指標數學](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/using-metric-math.html)。

指標數學運算式有下列考量：
+ 您可以查詢任何可用的 CloudWatch 指標。每個指標都是指標名稱、命名空間以及零個或多個維度的唯一組合。
+ 您可以使用任何算術運算子 (\$1-\$1/^)、統計函數 (如 AVG 或 SUM) 或 CloudWatch 支援的其他函數。
+ 您可以在數學運算式的公式中同時使用其他數學運算式的指標和結果。
+ 在指標規範中使用的任何運算式都必須最終傳回單一的時間序列。
+ 您可以透過使用 CloudWatch 主控台或 CloudWatch [GetMetricData](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_GetMetricData.html) API 驗證指標數學表達式是否有效。

**Topics**
+ [範例：每個任務的 Amazon SQS 佇列待辦項目](#metric-math-sqs-queue-backlog)
+ [限制](#metric-math-limitations)

## 範例：每個任務的 Amazon SQS 佇列待辦項目
<a name="metric-math-sqs-queue-backlog"></a>

若要計算每個任務的 Amazon SQS 佇列待辦項目，請獲取佇列中可擷取的大致訊息數量，然後將該數字除以服務中執行的 Amazon ECS 任務數。如需詳細資訊，請參閱 AWS 運算部落格上的[使用自訂指標的 Amazon Elastic Container Service (ECS) Auto Scaling](https://aws.amazon.com/blogs/containers/amazon-elastic-container-service-ecs-auto-scaling-using-custom-metrics/)。

運算式的邏輯如下所示：

 `sum of (number of messages in the queue)/(number of tasks that are currently in the RUNNING state)`

那麼，您的 CloudWatch 指標資訊如下。


| ID | CloudWatch 指標 | 統計數字 | Period | 
| --- | --- | --- | --- | 
| m1 | ApproximateNumberOfMessagesVisible | 總和 | 1 分鐘 | 
| m2 | RunningTaskCount | 平均數 | 1 分鐘 | 

您的指標數學 ID 和表達式如下。


| ID | 表達式 | 
| --- | --- | 
| e1 | (m1)/(m2) | 

下圖說明此指標的架構：

![\[使用佇列架構圖的 Application Auto Scaling\]](http://docs.aws.amazon.com/zh_tw/autoscaling/application/userguide/images/sqs-custom-metric-diagram.png)


**使用此指標數學建立目標追蹤擴展政策 (AWS CLI)**

1. 將指標數學運算式作為自訂指標規格的一部分儲存在名為 `config.json` 的 JSON 檔案中。

   使用以下範例協助您開始使用。將每個*使用者輸入預留位置*替換為自己的資訊。

   ```
   {
       "CustomizedMetricSpecification": {
           "Metrics": [
               {
                   "Label": "Get the queue size (the number of messages waiting to be processed)",
                   "Id": "m1",
                   "MetricStat": {
                       "Metric": {
                           "MetricName": "ApproximateNumberOfMessagesVisible",
                           "Namespace": "AWS/SQS",
                           "Dimensions": [
                               {
                                   "Name": "QueueName",
                                   "Value": "my-queue"
                               }
                           ]
                       },
                       "Stat": "Sum"
                   },
                   "ReturnData": false
               },
               {
                   "Label": "Get the ECS running task count (the number of currently running tasks)",
                   "Id": "m2",
                   "MetricStat": {
                       "Metric": {
                           "MetricName": "RunningTaskCount",
                           "Namespace": "ECS/ContainerInsights",
                           "Dimensions": [
                               {
                                   "Name": "ClusterName",
                                   "Value": "my-cluster"
                               },
                               {
                                   "Name": "ServiceName",
                                   "Value": "my-service"
                               }
                           ]
                       },
                       "Stat": "Average"
                   },
                   "ReturnData": false
               },
               {
                   "Label": "Calculate the backlog per instance",
                   "Id": "e1",
                   "Expression": "m1 / m2",
                   "ReturnData": true
               }
           ]
       },
       "TargetValue": 100
   }
   ```

   如需詳細資訊，請參閱 *Application Auto Scaling API 參考*中的 [TargetTrackingScalingPolicyConfiguration](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_TargetTrackingScalingPolicyConfiguration.html)。
**注意**  
以下是一些其他資源，可協助您尋找 CloudWatch 指標的指標名稱、命名空間、維度和統計資料：  
如需 AWS 服務可用指標的相關資訊，請參閱《Amazon [AWS CloudWatch 使用者指南》中的發佈 CloudWatch 指標](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/aws-services-cloudwatch-metrics.html)的 服務。 *Amazon CloudWatch *
若要使用 取得 CloudWatch 指標的確切指標名稱、命名空間和維度 （如適用） AWS CLI，請參閱 [list-metrics](https://docs.aws.amazon.com/cli/latest/reference/cloudwatch/list-metrics.html)。

1. 若要建立此政策，執行使用 JSON 檔案作為輸入 [put-scaling-policy](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/put-scaling-policy.html) 命令，如以下範例所示。

   ```
   aws application-autoscaling put-scaling-policy --policy-name sqs-backlog-target-tracking-scaling-policy \
     --service-namespace ecs --scalable-dimension ecs:service:DesiredCount --resource-id service/my-cluster/my-service \
     --policy-type TargetTrackingScaling --target-tracking-scaling-policy-configuration file://config.json
   ```

   如果成功，則此命令會傳回政策的 Amazon Resource Name (ARN) 和代表您建立的兩個 CloudWatch 警示的 ARN。

   ```
   {
       "PolicyARN": "arn:aws:autoscaling:us-west-2:012345678910:scalingPolicy: 8784a896-b2ba-47a1-b08c-27301cc499a1:resource/ecs/service/my-cluster/my-service:policyName/sqs-backlog-target-tracking-scaling-policy",
       "Alarms": [
           {
               "AlarmARN": "arn:aws:cloudwatch:us-west-2:012345678910:alarm:TargetTracking-service/my-cluster/my-service-AlarmHigh-9bc77b56-0571-4276-ba0f-d4178882e0a0",
               "AlarmName": "TargetTracking-service/my-cluster/my-service-AlarmHigh-9bc77b56-0571-4276-ba0f-d4178882e0a0"
           },
           {
               "AlarmARN": "arn:aws:cloudwatch:us-west-2:012345678910:alarm:TargetTracking-service/my-cluster/my-service-AlarmLow-9b6ad934-6d37-438e-9e05-02836ddcbdc4",
               "AlarmName": "TargetTracking-service/my-cluster/my-service-AlarmLow-9b6ad934-6d37-438e-9e05-02836ddcbdc4"
           }
       ]
   }
   ```
**注意**  
如果此命令擲回錯誤，請確定您已在 AWS CLI 本機將 更新為最新版本。

## 限制
<a name="metric-math-limitations"></a>
+ 要求大小上限為 50 KB。這是當您在政策定義中使用指標數學運算時 [PutScalingPolicy](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_PutScalingPolicy.html) API 要求的總承載大小。如果您超過此限制，Application Auto Scaling 會拒絕要求。
+ 對目標追蹤擴展政策使用指標數學運算時，不支援下列服務：
  + Amazon Keyspaces (適用於 Apache Cassandra) 
  + DynamoDB
  + Amazon EMR
  + Amazon MSK
  + Amazon Neptune