

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

# Amazon EC2 Auto Scaling 動態擴展
<a name="as-scale-based-on-demand"></a>

動態擴展會隨著流量變化而擴展 Auto Scaling 群組的容量。

Amazon EC2 Auto Scaling 支援下列動態擴展政策類型：
+ **目標追蹤擴展** - 根據 Amazon CloudWatch 指標和目標值，增加和減少目前的群組容量。這與家中溫控器維持溫度的方式類似：您只要選擇溫度，然後溫控器就會完成其他的動作。
+ **步進擴展** - 根據一組擴展值來增加和減少群組目前的容量，也稱為*步進調整*，會根據警示違規的程度而有不同。
+ **簡易擴展** - 根據單一擴展調整增加和減少群組的目前容量，每個擴展活動之間有一個冷卻時間。

我們強烈建議您使用目標追蹤擴展政策，並選擇與 Auto Scaling 群組容量變更成反向比例的指標。因此，如果您將 Auto Scaling 群組的大小加倍，指標會減少 50%。如此一來，指標資料就能依比例準確觸發擴展事件。包含指標，例如平均 CPU 使用率或每個目標的平均請求計數。

透過目標追蹤，Auto Scaling 群組會根據應用程式的實際負載，以直接比例擴展。這意味著除了滿足應對負載變化的即時容量需求外，目標追蹤政策還可以適應隨時間而發生的負載變化，例如由於季節性變化。

目標追蹤政策也不需要手動定義 CloudWatch 警示和擴展調整。Amazon EC2 Auto Scaling 會根據您設定的目標自動處理此問題。

**Topics**
+ [動態擴展政策的運作方式](#as-how-scaling-policies-work)
+ [多個動態擴展政策](#multiple-scaling-policy-resolution)
+ [Amazon EC2 Auto Scaling 的目標追蹤擴展政策](as-scaling-target-tracking.md)
+ [Amazon EC2 Auto Scaling 政策的步進和簡易擴展政策](as-scaling-simple-step.md)
+ [擴展 Amazon EC2 Auto Scaling 冷卻時間](ec2-auto-scaling-scaling-cooldowns.md)
+ [以 Amazon SQS 為基礎的擴展政策](as-using-sqs-queue.md)
+ [驗證 Auto Scaling 群組的擴展活動](as-verify-scaling-activity.md)
+ [停用 Auto Scaling 群組的擴展政策](as-enable-disable-scaling-policy.md)
+ [刪除 Auto Scaling 群組的擴展政策](deleting-scaling-policy.md)
+ [的範例擴展政策 AWS CLI](examples-scaling-policies.md)

## 動態擴展政策的運作方式
<a name="as-how-scaling-policies-work"></a>

動態擴展政策指示 Amazon EC2 Auto Scaling 追蹤特定的 CloudWatch 指標，並定義當相關 CloudWatch 警示處於 ALARM 狀態時要採取的動作。用於呼叫警示狀態的指標是來自 Auto Scaling 群組中所有執行個體的指標彙總。(例如，假設您有一個 Auto Scaling 群組具有兩個執行個體，其中一個執行個體的 CPU 使用率是 60%，另一個 CPU 使用率是 40%。平均而言，其 CPU 使用率是 50%)。政策生效後，Amazon EC2 Auto Scaling 會在超出警示閾值時，向上或向下調整群組的所需容量。

叫用動態擴展政策時，如果容量計算產生的數字超過群組的大小下限和上限範圍，Amazon EC2 Auto Scaling 會確保新容量永遠不會超過大小限制的下限和上限。容量的測量方式有兩種：使用您在執行個體設定所需容量時選擇的相同單位，或使用容量單位 （如果套用[執行個體權重](ec2-auto-scaling-mixed-instances-groups-instance-weighting.md))。
+ 範例 1：Auto Scaling 群組的容量上限為 3，目前容量為 2，以及增加 3 個執行個體的動態擴展政策。叫用此政策時，Amazon EC2 Auto Scaling 只會將 1 個執行個體新增至群組，防止群組超過其大小上限。
+ 範例 2：Auto Scaling 群組的容量下限為 2，目前容量為 3，以及移除 2 個執行個體的動態擴展政策。叫用此政策時，Amazon EC2 Auto Scaling 只會從群組移除 1 個執行個體，防止群組變成小於其大小下限。

當所需容量達到大小上限時，會停止擴增。如果需求下降，而且容量減少，則 Amazon EC2 Auto Scaling 可以再次進行擴增。

例外狀況是當您使用執行個體權重時。在這種情況下，Amazon EC2 Auto Scaling 可以擴增到大小上限以上，但最多只能擴展到您的最大執行個體權重。其目的是盡可能接近新的所需容量，但仍會遵循為該群組指定的配置策略。配置策略會決定要啟動的執行個體類型。權重會根據其執行個體類型決定每個執行個體對群組所需容量有多少容量單位。
+ 範例 3：Auto Scaling 群組的容量上限為 12，目前容量為 10，以及增加 5 個容量單位的動態擴展政策。執行個體類型已指派以下三個權重之一：1、4 或 6。叫用此政策時，Amazon EC2 Auto Scaling 會根據配置策略選擇啟動權重為 6 的執行個體類型。此擴增事件的結果是所需容量為 12 且目前容量為 16 的群組。

## 多個動態擴展政策
<a name="multiple-scaling-policy-resolution"></a>

在大部分情況下，目標追蹤擴展政策已足夠設定 Auto Scaling 群組自動擴增或縮減。目標追蹤擴展政策可讓您選擇所需的結果，並令 Auto Scaling 群組視需要新增和移除執行個體，以達成該結果。

對於進階擴展組態而言，Auto Scaling 群組可以擁有多個擴展政策。例如，您可以定義一或多個目標追蹤擴展政策、一或多個步進擴展政策，或兩者兼具。這樣可以提供更大的靈活性，以涵蓋多種情境。

為了說明多個動態擴展政策如何搭配使用，請考慮採用一個使用 Auto Scaling 群組的應用程式，以及一個將請求傳送給群組中單一 EC2 執行個體的 Amazon SQS 佇列。為了確認應用程式在最佳狀態等級下執行，有兩種政策控制 Auto Scaling 群組何時該執行擴增。一個是目標追蹤政策，使用自訂指標，依據佇列中 SQS 訊息的數量新增和移除容量。另一個則是步進擴展政策，它會在執行個體的使用率在一指定時間長度內超過 90% 時使用 Amazon CloudWatch `CPUUtilization` 指標來增加容量。

當多個政策同時生效時，有可能每一個政策同時都會指示 Auto Scaling 群組擴增 (或縮減)。例如，在 SQS 自訂指標達到尖峰並超出自訂指標警示的閾值時，`CPUUtilization` 指標也可能同時達到尖峰並超出 CloudWatch 警示的閾值。

發生這些情況時，Amazon EC2 Auto Scaling 會選擇對於擴增和縮減均可提供容量上限的政策。例如，假設 `CPUUtilization` 政策啟動一個執行個體，SQS 佇列政策啟動兩個執行個體。如果擴增條件同時滿足這兩個政策，則 Amazon EC2 Auto Scaling 會優先採用 SQS 佇列政策。這樣會使 Auto Scaling 群組啟動兩個執行個體。

即使各政策使用不同的縮減條件，仍然適用優先選擇能提供容量上限的政策。例如，如果一個政策終止三個執行個體，另一個政策減少 25% 的執行個體數，且群組在縮減時有八個執行個體，Amazon EC2 Auto Scaling 會優先選擇為該群組提供最大數量執行個體的政策。這樣會使 Auto Scaling 群組終止兩個執行個體 (8 的 25% = 2)。這種做法的目的是防止 Amazon EC2 Auto Scaling 移除過多的執行個體。

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

# Amazon EC2 Auto Scaling 的目標追蹤擴展政策
<a name="as-scaling-target-tracking"></a>

目標追蹤擴展政策會根據目標指標值自動擴展 Auto Scaling 群組的容量。它會自動適應個別應用程式的獨特使用模式。這可讓您的應用程式維持 EC2 執行個體的最佳效能和高使用率，以提高成本效益，而無需手動介入。

如果使用目標追蹤，您必須選取指標和目標值，以代表應用程式理想的平均使用率或輸送量。Amazon EC2 Auto Scaling 會建立和管理 CloudWatch 警示，在指標偏離目標時調用擴展事件。例如，這類似於調溫器如何維持目標溫度。

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

您可以透過建立以 50% 的平均 CPU 利用率為目標的目標追蹤擴展政策來滿足此需求。然後，當 CPU 超過 50% 來處理增加的負載時，Auto Scaling 群組將橫向擴展或增加容量。當 CPU 低於 50% 時，它會縮減或減少容量，以在低使用率期間最佳化成本。

**Topics**
+ [多個目標追蹤擴展政策](#target-tracking-multiple-policies)
+ [選擇 Metrics (指標)](#target-tracking-choose-metrics)
+ [定義目標值](#target-tracking-define-target-value)
+ [定義執行個體暖機時間](#as-target-tracking-scaling-warmup)
+ [考量事項](#target-tracking-considerations)
+ [建立目標追蹤擴展政策](policy_creating.md)
+ [使用高解析度指標建立目標追蹤政策，以加快回應速度](policy-creating-high-resolution-metrics.md)
+ [使用指標數學建立目標追蹤擴展政策](ec2-auto-scaling-target-tracking-metric-math.md)

## 多個目標追蹤擴展政策
<a name="target-tracking-multiple-policies"></a>

為協助最佳化擴展效能，您可使用多個目標追蹤擴展政策，但前提是各政策使用不同的指標。例如，使用率和輸送量可能會相互影響。每當這些指標之一發生變化時，通常意味著其他指標也會受到影響。因此，使用多個指標可提供有關 Auto Scaling 群組所承受負載的其他資訊。這有助於 Amazon EC2 Auto Scaling 在判斷要新增至群組的容量時，做出更明智的決策。

Amazon EC2 Auto Scaling 的目的是一律優先考慮可用性。如果任何目標追蹤政策已準備好向外擴展，則會向外擴展 Auto Scaling 群組。只有在所有目標追蹤政策 （已啟用縮減部分） 都準備好縮減時，才會縮減。

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

您可以使用預先定義的指標或自訂指標建立目標追蹤擴展政策。預先定義的指標可讓您更輕鬆地存取最常用於擴展的指標。自訂指標可讓您擴展其他可用的 CloudWatch 指標，包括[以幾秒鐘的間隔更精細發佈的高解析度指標](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch_concepts.html#Resolution_definition)。您可以發佈自己的高解析度指標或其他 服務發佈的 AWS 指標。

如需使用高解析度指標建立目標追蹤政策的詳細資訊，請參閱 [使用高解析度指標建立目標追蹤政策，以加快回應速度](policy-creating-high-resolution-metrics.md)。

目標追蹤支援下列預先定義的指標：
+ `ASGAverageCPUUtilization`：Auto Scaling 群組的 CPU 平均使用率。
+ `ASGAverageNetworkIn`：Auto Scaling 群組在所有網路介面上收到的平均位元組數量。
+ `ASGAverageNetworkOut`：Auto Scaling 群組在所有網路介面上傳送出去的平均位元組數量。
+ `ALBRequestCountPerTarget` — Auto Scaling 群組每個目標的平均 Application Load Balancer 請求計數。

**重要**  
有關每個目標的 CPU 使用率、網路 I/O 和 Application Load Balancer 請求計數指標的其他寶貴資訊，請參閱《*Amazon EC2 使用者指南*》中的[列出執行個體主題的可用 CloudWatch 指標](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/viewing_metrics_with_cloudwatch.html)，以及《Application [ Application Load Balancer 使用者指南》中的 Application Load Balancer 主題的 CloudWatch 指標](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-cloudwatch-metrics.html)。 **

您可以在 CloudWatch 中透過指定自訂指標，選擇其他可用的 CloudWatch 指標或自己的指標。如需使用 為目標追蹤擴展政策指定自訂指標規格的範例 AWS CLI，請參閱 [的範例擴展政策 AWS CLI](examples-scaling-policies.md)。

選擇指標時請謹記以下事項：
+ 我們建議您只使用一分鐘或更低間隔可用的指標，以協助您更快地擴展以回應使用率變更。以較低間隔發佈的指標可讓目標追蹤政策更快地偵測和回應 Auto Scaling 群組使用率的變化。
+ 如果您選擇 Amazon EC2 發佈的預先定義指標，例如 CPU 使用率，建議您啟用詳細監控。根據預設，所有 Amazon EC2 指標會以五分鐘的間隔發佈，但可透過啟用詳細監控，將其設定為較低的一分鐘間隔。如需如何啟用詳細監控的資訊，請參閱 [設定 Auto Scaling 執行個體的監控](enable-as-instance-metrics.md)。
+ 並非所有的自訂指標都適用於目標追蹤。指標必須是有效的使用率指標，而且能夠表示執行個體的忙碌程度。指標值必須與 Auto Scaling 群組中的執行個體數成比例增加或減少。如此，指標資料便可依比例依執行個體數量擴增或縮減。例如，如果 Auto Scaling 群組的負載分佈於各執行個體之間，則 Auto Scaling 群組的 CPU 使用率是有效的 (也就是具有指標維度 `AutoScalingGroupName` 的 Amazon EC2 指標 `CPUUtilization`)。
+ 以下指標不適用於目標追蹤：
  + 面對 Auto Scaling 群組的負載平衡器所收到的請求數量 (也就是 Elastic Load Balancing 指標 `RequestCount`)。負載平衡器收到的請求數量不會根據 Auto Scaling 群組的使用率而改變。
  + 負載平衡器請求延遲 (也就是 Elastic Load Balancing 指標 `Latency`)。請求延遲會隨使用率提高而增加，但不一定會依比例變動。
  + CloudWatch Amazon SQS 佇列指標 `ApproximateNumberOfMessagesVisible`。佇列中的訊息數量可能不會隨處理佇列訊息之 Auto Scaling 群組的大小成比例地變更。然而，測量 Auto Scaling 群組中每個 EC2 執行個體佇列中訊息數量的自訂指標是可行的。如需詳細資訊，請參閱[以 Amazon SQS 為基礎的擴展政策](as-using-sqs-queue.md)。
+ 若要使用 `ALBRequestCountPerTarget` 指標，您必須指定 `ResourceLabel` 參數來識別與指標相關聯的負載平衡器目標群組。如需使用 指定目標追蹤擴展政策`ResourceLabel`參數的範例 AWS CLI，請參閱 [的範例擴展政策 AWS CLI](examples-scaling-policies.md)。
+ 當指標向 CloudWatch 真的發出 0 值時 (例如 `ALBRequestCountPerTarget`)，如果應用程式持續一段時間沒有流量，Auto Scaling 群組可能縮減到 0。若要讓 Auto Scaling 群組在沒有請求傳送到它時縮減為 0，該群組的容量下限必須設定為 0。
+ 您可以使用指標數學來合併現有的指標，而不是發布新的指標來用於您的擴展政策。如需詳細資訊，請參閱[使用指標數學建立目標追蹤擴展政策](ec2-auto-scaling-target-tracking-metric-math.md)。

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

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

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

## 定義執行個體暖機時間
<a name="as-target-tracking-scaling-warmup"></a>

您可以選擇性指定新啟動的執行個體暖機所需的秒數。在指定的暖機時間結束之前，執行個體不會計入 Auto Scaling 群組的彙總 EC2 執行個體指標。

當執行個體處於暖機期間時，只有在未暖機的執行個體指標值大於政策的目標使用率時，擴展政策才會向外擴展。

如果群組再次水平擴展，則仍在暖機的執行個體將計為下次水平擴展活動所需的容量一部分。這種做法的目的是連續的向外擴展 (但並非過度)。

當向外擴展活動正在進行時，所有由擴展政策啟動的向內擴展活動都會遭到封鎖，直到執行個體完成暖機。當執行個體完成暖機時，如果發生擴展事件，則在計算新的所需容量時，目前正在終止的任何執行個體都會計入群組的目前容量。所以，我們不會從 Auto Scaling 群組移除超過必要數量的執行個體。

**預設值**  
如果未設定任何值，擴展政策將使用預設值，這是為群組定義之[預設執行個體暖機](ec2-auto-scaling-default-instance-warmup.md)期的值。如果預設執行個體暖機期為 null，則會回到[預設冷卻時間](ec2-auto-scaling-scaling-cooldowns.md#set-default-cooldown)的值。我們建議您使用預設執行個體暖機期，以便在暖機期變更時更輕鬆地更新所有擴展政策。

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

使用目標追蹤擴展政策時，下列考量適用：
+ 請勿建立、編輯或刪除用於目標追蹤擴展政策的 CloudWatch 警示。Amazon EC2 Auto Scaling 會建立和管理與您的目標追蹤擴展政策相關聯的 CloudWatch 警示，並視需要編輯、取代或刪除它們，以自訂應用程式的擴展體驗及其不斷變化的使用率模式。
+ 目標追蹤擴展政策會在流量減少時逐漸縮減，在流量水平波動期間排定可用性優先順序。如果您想要更好的控制，步驟擴展政策可能是更好的選項。您可以暫時停用目標追蹤政策的縮減部分。這有助於維持成功部署的執行個體數量下限。
+ 如果指標缺少資料點，這會導致 CloudWatch 警示狀態變更為 `INSUFFICIENT_DATA`。發生這種情況時，Amazon EC2 Auto Scaling 無法擴展您的群組，直到找到新的資料點為止。
+ 如果指標在設計上是以稀疏的方式來報告，指標數學可能會有所幫助。例如，若要使用最新的值，請使用指標為 `m1` 的 `FILL(m1,REPEAT)` 函數。
+ 您可能會看到目標值和實際指標資料點之間有些差距。原因我們會在決定新增或移除多少執行個體時，透過向上或向下四捨五入保守地行動。如此一來，防止我們新增不足數量的執行個體，或移除太多的執行個體。然而，對於較小的 Auto Scaling 群組使用較少的執行個體，該群組的使用率可能與目標值相差甚遠。

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

  對於具有較多執行個體的大型 Auto Scaling 群組，使用率會分佈於較多的執行個體，在這種情況下，新增或移除執行個體所導致目標值和實際指標資料點之間的差距會比較小。
+ 目標追蹤擴展政策假設在指定的指標超過目標值時，應擴增您的 Auto Scaling 群組。當指定的指標低於目標值時，您無法使用目標追蹤擴展政策來橫向擴展 Auto Scaling 群組。

# 建立目標追蹤擴展政策
<a name="policy_creating"></a>

若要為您的 Auto Scaling 群組建立目標追蹤擴展政策，請使用下列其中一種方法。

開始之前，請確認您偏好的指標每隔 1 分鐘可用 (相比之下，Amazon EC2 指標的預設間隔為 5 分鐘)。

------
#### [ Console ]

**建立新的 Auto Scaling 群組的目標追蹤擴展政策**

1. 前往網址 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台，然後從導覽窗格中選擇 **Auto Scaling 群組**。

1. 選擇 **Create Auto Scaling group** (建立 Auto Scaling 群組)。

1. 在步驟 1、2 和 3 中，視需要選擇選項，並繼續進行 **Step 4: Configure group size and scaling policies** (步驟 4：設定群組大小和擴展政策)。

1. 在**擴展**下，透過更新**所需容量下限**和**所需容量上限**，指定要在兩者之間擴展的範圍。這兩個設定可讓您的 Auto Scaling 群組進行動態擴展。如需詳細資訊，請參閱[設定 Auto Scaling 群組的擴展限制](asg-capacity-limits.md)。

1. 在**自動擴展**下，選擇**目標追蹤擴展政策**。

1. 若要定義政策，請執行下列的動作：

   1. 指定政策的名稱。

   1. 為 **Metric type** (指標類型) 選擇指標。

      如果選擇了 **Application Load Balancer request count per target** (每個目標的 Application Load Balancer 請求計數)，則在 **Target group** (目標群組) 中選擇目標群組。

   1. 指定指標的 **Target value** (目標值)。

   1. （選用） 對於**執行個體暖機**期，視需要更新執行個體暖機期值。

   1. (選用) 選取 **Disable scale in to create only a scale-out policy** (停用縮減以僅建立擴增政策)。這可讓您建立所需不同類型的單獨縮減政策。

1. 繼續建立 Auto Scaling 群組。您的擴展政策會在建立 Auto Scaling 群組之後建立。

**建立現有 Auto Scaling 群組的目標追蹤擴展政策**

1. 前往網址 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台，然後從導覽窗格中選擇 **Auto Scaling 群組**。

1. 選取 Auto Scaling 群組旁的核取方塊。

   頁面底部會開啟一個分割窗格。

1. 確認已將擴展限制設定妥當。例如，如果群組已達到所需容量上限，則需要指定新的上限，以便進行橫向擴展。如需詳細資訊，請參閱[設定 Auto Scaling 群組的擴展限制](asg-capacity-limits.md)。

1. 在 **Automatic scaling** (自動擴展) 索引標籤的 **Dynamic scaling policies** (動態擴展政策) 中，選擇 **Create dynamic scaling policy** (建立動態擴展政策)。

1. 若要定義政策，請執行下列的動作：

   1. 對於**政策類型**，請保持**目標追蹤擴展**的預設值。

   1. 指定政策的名稱。

   1. 為 **Metric type** (指標類型) 選擇指標。您只能選擇一種指標類型。若要使用多個指標，請建立多個政策。

      如果選擇了 **Application Load Balancer request count per target** (每個目標的 Application Load Balancer 請求計數)，則在 **Target group** (目標群組) 中選擇目標群組。

   1. 指定指標的 **Target value** (目標值)。

   1. （選用） 對於**執行個體暖機**期，視需要更新執行個體暖機期值。

   1. (選用) 選取 **Disable scale in to create only a scale-out policy** (停用縮減以僅建立擴增政策)。這可讓您建立所需不同類型的單獨縮減政策。

1. 選擇**建立**。

------
#### [ AWS CLI ]

若要建立目標追蹤擴展政策，您可以使用下列範例來協助您開始使用。將每個*使用者輸入預留位置*替換為自己的資訊。

**注意**  
如需更多範例，請參閱[的範例擴展政策 AWS CLI](examples-scaling-policies.md)。

**建立目標追蹤擴展政策 (AWS CLI)**

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

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

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

1. 使用 [put-scaling-policy](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/put-scaling-policy.html) 命令與先前步驟中建立的 `config.json` 檔案來建立您的擴展政策。

   ```
   aws autoscaling put-scaling-policy --policy-name cpu50-target-tracking-scaling-policy \
     --auto-scaling-group-name my-asg --policy-type TargetTrackingScaling \
     --target-tracking-configuration file://config.json
   ```

   如果成功，此命令會傳回代表您建立的兩個 CloudWatch 警示的 ARN 和名稱。

   ```
   {
       "PolicyARN": "arn:aws:autoscaling:us-west-2:123456789012:scalingPolicy:228f02c2-c665-4bfd-aaac-8b04080bea3c:autoScalingGroupName/my-asg:policyName/cpu50-target-tracking-scaling-policy",
       "Alarms": [
           {
               "AlarmARN": "arn:aws:cloudwatch:us-west-2:123456789012:alarm:TargetTracking-my-asg-AlarmHigh-fc0e4183-23ac-497e-9992-691c9980c38e",
               "AlarmName": "TargetTracking-my-asg-AlarmHigh-fc0e4183-23ac-497e-9992-691c9980c38e"
           },
           {
               "AlarmARN": "arn:aws:cloudwatch:us-west-2:123456789012:alarm:TargetTracking-my-asg-AlarmLow-61a39305-ed0c-47af-bd9e-471a352ee1a2",
               "AlarmName": "TargetTracking-my-asg-AlarmLow-61a39305-ed0c-47af-bd9e-471a352ee1a2"
           }
       ]
   }
   ```

------

# 使用高解析度指標建立目標追蹤政策，以加快回應速度
<a name="policy-creating-high-resolution-metrics"></a>

目標追蹤支援高解析度 CloudWatch 指標，並以低於一分鐘的間隔發佈秒級資料點。設定目標追蹤政策，透過高解析度 CloudWatch 指標監控具有波動需求模式的應用程式使用率，例如用戶端服務 APIs、即時串流服務、電子商務網站和隨需資料處理。為了在符合容量與需求時達到更高的精確度，目標追蹤會使用這種精細的監控，更快速地偵測和回應不斷變化的 EC2 執行個體需求和使用率。

如需如何以高解析度發佈指標的詳細資訊，請參閱《*Amazon CloudWatch 使用者指南*》中的[發佈自訂指標](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/publishingMetrics.html)。若要存取和發佈 EC2 指標，例如高解析度 CPU 使用率，您可能想要使用 [CloudWatch 代理程式](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Install-CloudWatch-Agent.html)。

## AWS 區域
<a name="policy-creating-high-resolution-metrics-regions"></a>

除了 AWS 區域 之外，所有 都可以使用高解析度指標進行目標追蹤 AWS GovCloud (US) Regions。

## 具有高解析度指標的目標追蹤政策如何運作
<a name="policy-high-resolution-metrics-how-works"></a>

您可以透過定義要追蹤的指標和要為指標維護的目標值，來建立目標追蹤政策。若要擴展高解析度指標，請指定指標的名稱，並將目標追蹤觀察此指標的指標期間設定為低於 60 秒的值。目前支援的最低間隔為 10 秒。您可以比此更低的間隔發佈指標。

**注意**  
不支援大於 60 的指標期間。

您可以在單一 CloudWatch 指標上設定目標追蹤，或查詢多個 CloudWatch 指標，並使用數學表達式根據這些指標建立新的單一時間序列。這兩個選項都可讓您定義指標期間。

## 範例
<a name="high-resolution-metrics-examples"></a>

**範例 1**  
下列範例會根據高解析度 CloudWatch 指標建立目標追蹤政策。指標會以 10 秒解析度發佈。透過定義期間，您可以啟用目標追蹤，以 10 秒精細程度監控此指標。將每個*使用者輸入預留位置*替換為自己的資訊。

```
$ cat ~/config.json
{
  "TargetValue": 100.0,
  "CustomizedMetricSpecification": {
      "MetricName": "MyHighResolutionMetric",
      "Namespace": "MyNamespace",
      "Dimensions": [
        {
          "Name": "MyOptionalDimensionName",
          "Value": "MyOptionalMetricDimensionValue"
        }
      ],
      "Statistic": "Average",
      "Unit": "None"
      "Period": "10                  
  }
}
```

**範例 2**  
您可以使用指標數學表達式，將多個指標合併為單一時間序列以進行擴展。指標數學在將現有指標轉換為平均每個執行個體時特別有用。轉換指標至關重要，因為目標追蹤假設指標與 Auto Scaling 群組的容量成反比。因此，當容量增加時，指標應該會減少近乎相同的比例。

例如，假設您的指標代表應用程式要處理的待處理任務。您可以使用指標數學，將待定任務除以 Auto Scaling 群組的執行容量。Auto Scaling 會以 1 分鐘的精細程度發佈容量指標，因此此指標在一分鐘間隔內不會有任何值。如果您想要使用更高的解析度進行擴展，這可能會導致容量與待定任務指標之間的期間不相符。為了避免此不相符，建議您使用 FILL 表達式，以上一分鐘時間戳記中記錄的容量編號填入缺少的值。

下列範例使用指標數學將待定任務指標除以容量。在這段期間，我們會將這兩個指標設定為 10 秒。由於指標是以 1 分鐘的間隔發佈，因此我們在容量指標上使用 FILL 操作。

使用指標數學來修改多個指標

```
{
    "CustomizedMetricSpecification": {
        "Metrics": [
            {
                "Label": "Pending jobs to be processed",
                "Id": "m1",
                "MetricStat": {
                    "Metric": {
                        "MetricName": "MyPendingJobsMetric",
                        "Namespace": "Custom",
                    },
                    "Stat": "Sum"
                    "Period": 10
                },
                "ReturnData": false
            },
            {
                "Label": "Get the running instance capacity (matching the period to that of the m1)",
                "Id": "m2",
                "MetricStat": {
                    "Metric": {
                        "MetricName": "GroupInServiceInstances",
                        "Namespace": "AWS/AutoScaling",
                        "Dimensions": [
                            {
                                "Name": "AutoScalingGroupName",
                                "Value": "my-asg"
                            }
                        ]
                    },
                    "Stat": "Average"
                    "Period": 10
                },
                "ReturnData": false
            },
            {
                "Label": "Calculate the pending job per capacity (note the use of the FILL expression)",
                "Id": "e1",
                "Expression": "m1 / FILL(m2,REPEAT)",
                "ReturnData": true
            }
        ]
    },
    "TargetValue": 100
}
```

## 考量事項
<a name="high-resolution-considerations"></a>

使用目標追蹤和高解析度指標時，請考慮下列事項。
+ 為了確保您沒有可能導致不需要的自動擴展結果的遺失資料點，您的 CloudWatch 指標必須以與您指定期間相同的或更高解析度發佈。
+ 將目標值定義為您要為 Auto Scaling 群組維護per-instance-per-minute指標值。如果您使用的指標值可以根據指標的期間進行乘以，則設定適當的目標值至關重要。例如，任何以計數為基礎的指標，例如使用 SUM 統計資料的請求計數或待定任務，都會有不同的指標值，取決於所選的期間。您仍應假設您要根據每分鐘平均值設定目標。
+ 雖然使用 Amazon EC2 Auto Scaling 無需額外費用，但您必須支付 資源，例如 Amazon EC2 執行個體、CloudWatch 指標和 CloudWatch 警示。上述範例中建立的高解析度警示定價與標準 CloudWatch 警示不同。如需 CloudWatch 定價的詳細資訊，請參閱 [Amazon CloudWatch 定價](https://aws.amazon.com/cloudwatch/pricing/)。
+ 目標追蹤需要指標代表 EC2 執行個體的每個執行個體平均使用率。若要達成此目的，您可以使用[指標數學操作](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/using-metric-math.html)做為目標追蹤政策組態的一部分。將指標除以 Auto Scaling 群組的執行容量。請務必為您用來建立單一時間序列的每個指標定義相同的指標期間。如果這些指標以不同的間隔發佈，請在具有較高間隔的指標上使用 FILL 操作來填入遺失的資料點。

# 使用指標數學建立目標追蹤擴展政策
<a name="ec2-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 驗證指標數學表達式是否有效。

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

若要計算每個執行個體的 Amazon SQS 佇列待辦項目，請獲取佇列中可擷取的大致訊息數量，然後將該數字除以 Auto Scaling 群組的執行中容量 (即處於 `InService` 狀態的執行個體數量)。如需詳細資訊，請參閱[以 Amazon SQS 為基礎的擴展政策](as-using-sqs-queue.md)。

運算式的邏輯如下所示：

 `sum of (number of messages in the queue)/(number of InService instances)`

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


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

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


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

下圖說明此指標的架構：

![\[Amazon EC2 Auto Scaling 使用佇列架構圖表\]](http://docs.aws.amazon.com/zh_tw/autoscaling/ec2/userguide/images/sqs-as-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 group size (the number of InService instances)",
                   "Id": "m2",
                   "MetricStat": {
                       "Metric": {
                           "MetricName": "GroupInServiceInstances",
                           "Namespace": "AWS/AutoScaling",
                           "Dimensions": [
                               {
                                   "Name": "AutoScalingGroupName",
                                   "Value": "my-asg"
                               }
                           ]
                       },
                       "Stat": "Average"
                   },
                   "ReturnData": false
               },
               {
                   "Label": "Calculate the backlog per instance",
                   "Id": "e1",
                   "Expression": "m1 / m2",
                   "ReturnData": true
               }
           ]
       },
       "TargetValue": 100
   }
   ```

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

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

   ```
   aws autoscaling put-scaling-policy --policy-name sqs-backlog-target-tracking-scaling-policy \
     --auto-scaling-group-name my-asg --policy-type TargetTrackingScaling \
     --target-tracking-configuration file://config.json
   ```

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

   ```
   {
       "PolicyARN": "arn:aws:autoscaling:us-west-2:123456789012:scalingPolicy:228f02c2-c665-4bfd-aaac-8b04080bea3c:autoScalingGroupName/my-asg:policyName/sqs-backlog-target-tracking-scaling-policy",
       "Alarms": [
           {
               "AlarmARN": "arn:aws:cloudwatch:us-west-2:123456789012:alarm:TargetTracking-my-asg-AlarmHigh-fc0e4183-23ac-497e-9992-691c9980c38e",
               "AlarmName": "TargetTracking-my-asg-AlarmHigh-fc0e4183-23ac-497e-9992-691c9980c38e"
           },
           {
               "AlarmARN": "arn:aws:cloudwatch:us-west-2:123456789012:alarm:TargetTracking-my-asg-AlarmLow-61a39305-ed0c-47af-bd9e-471a352ee1a2",
               "AlarmName": "TargetTracking-my-asg-AlarmLow-61a39305-ed0c-47af-bd9e-471a352ee1a2"
           }
       ]
   }
   ```
**注意**  
如果此命令擲回錯誤，請確定您已在 AWS CLI 本機將 更新為最新版本。

# Amazon EC2 Auto Scaling 政策的步進和簡易擴展政策
<a name="as-scaling-simple-step"></a>

步驟擴展和簡單擴展政策會根據 CloudWatch 警示，以預先定義的增量來擴展 Auto Scaling 群組的容量。您可以定義個別的擴展政策，在流量達到警示閾值時擴增規模 (增加容量) 和縮減規模 (減少容量)。

如果您使用執行個體[權重](ec2-auto-scaling-mixed-instances-groups-instance-weighting.md)，則會根據執行個體或容量單位來測量 Auto Scaling 群組容量。此外，所需容量和目前容量之間有差異。
+ 所需容量 – 您想要在 群組中擁有的執行個體 （或容量單位） 數量。所需的容量可以手動調整，也可以使用擴展政策自動調整。
+ 目前容量 – 群組中已超過暖機和冷卻期間，且正在執行並可供使用的執行個體 （或容量單位） 數量。

透過步驟擴展和簡單擴展，您可以建立和管理叫用擴展程序的 CloudWatch 警示。違反警示時，Amazon EC2 Auto Scaling 會啟動與該警示相關聯的擴展政策。

強烈建議使用目標追蹤擴展政策，根據平均 CPU 使用率或每個目標的平均請求計數等指標進行擴展。容量增加時減少和容量減少時增加的指標，可用於使用目標追蹤依比例擴增或縮減執行個體數量。這有助於確保 Amazon EC2 Auto Scaling 緊密地遵循應用程式的需求曲線。如需詳細資訊，請參閱[目標追蹤擴展政策](as-scaling-target-tracking.md)。

**Contents**
+ [步進擴展政策的運作方式](#step-scaling-how-it-works)
+ [步進擴展的步進調整](#as-scaling-steps)
+ [擴展調整類型](#as-scaling-adjustment)
+ [執行個體暖機期](#as-step-scaling-warmup)
+ [考量事項](#step-scaling-considerations)
+ [建立橫向擴展的步驟擴展政策](step-scaling-create-scale-out-policy.md)
+ [建立向內擴展的步驟擴展政策](step-scaling-create-scale-in-policy.md)
+ [簡易擴展政策](simple-scaling-policies.md)

## 步進擴展政策的運作方式
<a name="step-scaling-how-it-works"></a>

若要使用步驟擴展，請先建立 CloudWatch 警示，以監控 Auto Scaling 群組的指標。定義指標、閾值和評估流量是否達到警示閾值的時段數。然後，建立步驟擴展政策，定義如何在超過警示閾值時擴展您的 群組。您可以針對擴展調整類型使用 Auto Scaling 群組或容量單位目前容量的百分比。如需詳細資訊，請參閱[擴展調整類型](#as-scaling-adjustment)。

在政策中新增步進調整內容。您可以根據流量達到警示閾值的程度，定義不同的步進調整幅度。例如：
+ 如果警示指標達到 60%，則橫向擴展 10 個執行個體
+ 如果警示指標達到 75%，則橫向擴展 30 個執行個體
+ 如果警示指標達到 85%，則橫向擴展 40 個執行個體

在指定的評估期間數目內違反警示閾值時，Amazon EC2 Auto Scaling 會套用政策中定義的步驟調整。警示狀態恢復 `OK` 後，才能依其他達標警示事件繼續調整。

每個執行個體都有一個暖機期，以防止擴展活動對短時間內發生的變更太過反應。您可以選擇性地設定擴展政策的暖機期。不過，我們建議您使用預設執行個體暖機期，以便在暖機期變更時更輕鬆地更新所有擴展政策。如需詳細資訊，請參閱[設定 Auto Scaling 群組的預設執行個體暖機期](ec2-auto-scaling-default-instance-warmup.md)。

簡單擴展政策類似於步進擴展政策，但它們是以單一擴展調整為基礎，每個擴展活動之間都有冷卻時間。如需詳細資訊，請參閱[簡易擴展政策](simple-scaling-policies.md)。

## 步進擴展的步進調整
<a name="as-scaling-steps"></a>

建立步進擴展政策時，您可以指定一或多個步進調整，這些調整會根據警示違規的程度自動動態調整執行個體數量。每項步進調整可指定下列項目：
+ 指標值下限
+ 指標值上限
+ 要擴展的數量，會以擴展調整類型為依據 

CloudWatch 會根據與 CloudWatch 警示相關聯的指標統計資料彙總指標資料點。超出警示閾值時，會呼叫適當的擴展政策。Amazon EC2 Auto Scaling 會將彙總類型套用於來自 CloudWatch 的最近指標資料點 (而不是原始指標資料)。它會將彙總指標值與步進調整定義的上限和下限進行比較，以決定要執行哪一項步進調整。

您可以指定相對於違規閾值的上限及下限。例如，假設您設定流量超過 50% 指標時，由 CloudWatch 發出警示並執行擴增政策。當流量低於 50% 指標時，系統發出第二個警示，並執行縮減政策。您對每個政策進行了一組步驟調整，調整類型為 `PercentChangeInCapacity`（或 主控台中的 **群組百分比**)：


**範例：擴增政策的步進調整**  

| **下限** | **上限** | **調整** | 
| --- | --- | --- | 
|  0  |  10  |  0  | 
|  10  |  20  |  10  | 
|  20  |  無  |  30  | 


**範例：縮減政策的步進調整**  

| **下限** | **上限** | **調整** | 
| --- | --- | --- | 
|  -10  |  0  |  0  | 
|  -20  |  -10  |  -10  | 
|  null  |  -20  |  -30  | 

這會建立以下擴展組態。

```
Metric value

-infinity          30%    40%          60%     70%             infinity
-----------------------------------------------------------------------
          -30%      | -10% | Unchanged  | +10%  |       +30%        
-----------------------------------------------------------------------
```

現在，假設您在同時具有目前容量和所需容量為 10 的 Auto Scaling 群組上使用此擴展組態。下列幾點摘要說明擴展組態相對於所需容量和目前群組容量的行為：
+ 當彙總指標值大於 40 且小於 60 時，將維持所需的容量和目前的容量。
+ 如果指標值達到 60，根據擴增政策的第二項步進調整 (增加 10 的執行個體的 10%)，群組所需的容量會增加 1 的執行個體而達到 11 個執行個體。在新執行個體執行且其指定的暖機時間已過期後，群組的目前容量會增加至 11 個執行個體。如果指標值在容量增加後仍增加到 70，則群組的所需容量會再增加 3 個執行個體，達到 14 個執行個體。這是根據擴增政策的第三步調整 (增加 11 個執行個體的 30%，即 3.3 個執行個體，無條件捨去為 3 個執行個體)。
+ 如果指標值為 40，根據縮減政策的第二項步進調整 (移除 14 個執行個體的 10%，即 1.4 個執行個體，無條件捨入到 1 個執行個體)，群組所需容量會減少 1 個執行個體而變成 13 個執行個體。如果指標值在容量減少後仍降至 30，則群組的所需容量會再減少 3 個執行個體，變成 10 個執行個體。這是根據縮減政策的第三步調整 (減去 13 個執行個體的 30%，即 3.9 個執行個體，無條件捨去為 3 個執行個體)。

當您為擴展政策指定步進調整時，請注意下列事項：
+ 如果您使用 AWS 管理主控台，您可以將上限和下限指定為絕對值。如果您使用 AWS CLI 或 開發套件，您可以指定相對於違規閾值的上限和下限。
+ 步進調整的範圍不得重疊或有間隙。
+ 僅其中一項步進調整的下限可為空值 (負無限大)。若某項步進調整的下限為負值，則必須有一項步進調整的下限為空值。
+ 僅其中一項步進調整的上限可為空值 (正無限大)。若某項步進調整的上限為正值，則必須有一項步進調整的上限為空值。
+ 同一項步進調整的上限及下限不得皆為空值。
+ 如果指標值高於違規閾值，則含下限而不含上限。如果指標值低於違規閾值，則不含下限而含上限。

## 擴展調整類型
<a name="as-scaling-adjustment"></a>

您可以根據選擇的擴展調整類型，定義執行最佳擴展動作的擴展政策。您可以將調整類型指定為 Auto Scaling 群組的目前容量百分比或容量單位。通常，除非您使用執行個體權重功能，否則容量單位代表一個執行個體。

Amazon EC2 Auto Scaling 支援以下擴展和簡易擴展的調整類型：
+ `ChangeInCapacity`：依照指定的數值，增加或減少群組目前的容量。正值即增加容量，負調整值則會減少容量。例如：如果群組目前的容量為 3 且調整值為 5，執行此政策時，會將容量增加 5 個容量單位，總共 8 個容量單位。
+ `ExactCapacity`：將群組的目前容量變更為指定的數值。此調整類型應指定非負值。例如：如果群組目前的容量為 3 且調整值為 5，執行此政策時，會將容量變更為 5 個容量單位。
+ `PercentChangeInCapacity`：依照指定的百分比，增加或減少群組目前的容量。正值即增加容量，負值則減少容量。例如，如果目前的容量為 10 且調整值為 10%，執行此政策時，會將容量增加 1 個容量單位，總共 11 個容量單位。
**注意**  
若結果值不是整數，會用無條件捨去計算之，如下所示：  
大於 1 的值無條件捨去取整。例如，`12.7` 捨入到 `12`。
0 至 1 之間的值捨入到 1。例如，`.67` 捨入到 `1`。
0 至 -1 之間的值捨入到 -1。例如，`-.58` 捨入到 `-1`。
小於 -1 的值無條件進位取整。例如，`-6.67` 捨入到 `-6`。

透過 `PercentChangeInCapacity`，您也可以使用 `MinAdjustmentMagnitude` 參數來指定要擴展之執行個體的數量下限。例如，假設您建立了一個增加 25% 的政策，並指定最小擴展量為 2 個執行個體。如果您有一個 Auto Scaling 群組具有 4 個執行個體和已執行的擴展政策，4 個執行個體的 25% 即 1 個執行個體。不過，由於您指定最小擴展量為 2，所以會增加 2 執行個體。

當您使用[執行個體權重](ec2-auto-scaling-mixed-instances-groups-instance-weighting.md)時，將`MinAdjustmentMagnitude`參數設定為非零值的效果會變更。此值以容量單位表示。若要設定要擴展的執行個體數量下限，請將此參數設為至少與最大執行個體權重一樣大的值。

如果您使用執行個體權重，請記住 Auto Scaling 群組的目前容量可能會視需要超過所需的容量。如果要減少的絕對數字，或要減少的百分比數量小於目前容量與所需容量之間的差異，則不會執行任何擴展動作。如果檢視超出警示閾值時擴展政策的結果，您必須將這些行為列入考量。例如，假設所需的容量為 30，而目前的容量為 32。超出警示閾值時，如果擴展政策將所需的容量減少 1，則不會採取任何擴展動作。

## 執行個體暖機期
<a name="as-step-scaling-warmup"></a>

對於步進擴展，您可以選擇性指定新啟動的執行個體暖機所需的秒數。在指定的暖機時間結束之前，執行個體不會計入 Auto Scaling 群組的彙總 EC2 執行個體指標。

當執行個體處於暖機期間時，只有在未暖機的執行個體指標值大於政策的警示高閾值時，擴展政策才會向外擴展。

如果群組再次水平擴展，則仍在暖機的執行個體將計為下次水平擴展活動所需的容量一部分。因此，多個警示違規落於相同步進調整範圍，促使單一擴展活動。這種做法的目的是連續的向外擴展 (但並非過度)。

舉例來說，假設您使用兩個步驟建立政策。第一步，當指標值達到 60 時，增加 10%；第二步，當指標值達到 70% 時，增加 30%。Auto Scaling 群組的所需容量和目前容量均為 10。當彙總指標值小於 60 時，所需容量和目前容量保持不變。假設指標值達到 60，因此新增 1 個執行個體 (10 個執行個體的 10%)。接著指標值達到 62，同時新的執行個體仍處於暖機狀態。擴展政策會根據目前容量 (仍為 10) 來計算新的所需容量。不過，群組的所需容量已經增加至 11 個執行個體，所以擴展政策不會進一步增加所需容量。如果指標值為 70，同時新執行個體仍處於預熱狀態，則我們應該新增 3 個執行個體 (10 個執行個體的 30%)。不過，群組所需的容量已經為 11，所以我們只新增 2 個執行個體，適用於新所需的容量為 13 個執行個體。

在進行水平擴展活動時，透過擴展政策啟動的所有縮減活動都會遭到封鎖，直到執行個體完成暖機。當執行個體完成暖機時，如果發生縮減事件，那麼在計算新的所需容量時，目前正在終止過程中的任何執行個體都會計入群組的目前容量。所以，我們不會從 Auto Scaling 群組移除超過必要數量的執行個體。舉例來說，執行個體正在終止時，如果發生警示時超出將所需容量減少 1 的相同步進調整範圍，則不會採取任何擴展動作。

**預設值**  
如果未設定任何值，擴展政策將使用預設值，這是為群組定義之[預設執行個體暖機](ec2-auto-scaling-default-instance-warmup.md)期的值。如果預設執行個體暖機期為 null，則會回到[預設冷卻時間](ec2-auto-scaling-scaling-cooldowns.md#set-default-cooldown)的值。

## 考量事項
<a name="step-scaling-considerations"></a>

使用步進和簡易擴展政策時，下列考量適用：
+ 考慮您是否能夠準確地預測應用程式上的步進調整，以便使用步進擴展。如果您的擴展指標可按比例提高或降低可擴展目標容量，我們建議您改用目標追蹤擴展政策。您仍然可以選擇使用步進擴展作為其他政策，以進行更進階的設定。例如，您可以設定使用率達到特定層級時更積極的回應。
+ 請務必在橫向擴展閾值和縮減閾值之間選擇足夠的邊際，以防止震盪。振盪不穩是指向內縮減和水平擴展無限循環的現象。也就是說，如果採取擴展動作，指標值將會改變，並反向展開另一次擴展動作。

# 建立橫向擴展的步驟擴展政策
<a name="step-scaling-create-scale-out-policy"></a>

若要為 Auto Scaling 群組建立橫向擴展的步驟擴展政策，請使用下列其中一種方法：

------
#### [ Console ]

**步驟 1：建立指標高閾值的 CloudWatch 警示**

1. 透過 [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) 開啟 CloudWatch 主控台。

1. 如有必要請變更 區域。請在導覽列中選擇 Auto Scaling 群組所在的區域。

1. 在導覽窗格中，選擇 **Alarms, All alarms** (警示，所有警示)，然後選擇 **Create alarm** (建立警示)。

1. 選擇 **Select metric (選取指標)**。

1. 在 **All metrics** (所有指標) 索引標籤上，選擇 **EC2**、**By Auto Scaling Group** (依據 Auto Scaling 群組)，然後在搜尋欄位中輸入 Auto Scaling 群組的名稱。然後，選取 `CPUUtilization` 並選擇 **Select metric** (選取指標)。**Specify metric and conditions** (指定指標和條件) 頁面隨即出現，顯示指標的圖表及其他資訊。

1. 針對 **Period** (期間)，選擇警示的評估期間，例如 1 分鐘。評估警示時，每個期間都會彙整為一個資料點。
**注意**  
期間越短會建立更敏感的警示。

1. 在 **Conditions** (條件) 下，執行下列動作：
   + 對於 **Threshold type** (閾值類型)，選擇 **Static** (靜態)。
   + 對於**每當`CPUUtilization`為 **時，指定您希望指標的值大於或等於閾值以違反警示。然後，在 **than** (比) 下，輸入您要設定為超標警示的閾值。

1. 在 **Additional configuration** (其他設定) 下，請執行下列動作：
   + 針對 **Datapoints to alarm** (要警示的資料點)，輸入資料點 (評估期間)，在此期間指標值必須符合警示的閾值條件。例如，連續兩個 5 分鐘即表示需時 10 分鐘才會呼叫警示狀態。
   + 對於 **Missing data treatment** (遺失資料處理)，選擇 **Treat missing data as bad (breaching threshold)** (將遺失資料視為不良 (違反閾值))。如需詳細資訊，請參閱《Amazon CloudWatch 使用者指南》**中的[設定 CloudWatch 警示如何處理遺失資料](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html#alarms-and-missing-data)。

1. 選擇**下一步**。

   **Configure actions** (設定動作) 頁面隨即顯示。

1. 在 **Notification (通知)** 下，選取 Amazon SNS 主題來在警示處於 `ALARM` 狀態、`OK` 狀態或 `INSUFFICIENT_DATA` 狀態時進行通知。

   若要讓警示針對相同的警示狀態或不同警示狀態傳送多個通知，請選擇 **Add notification (新增通知)**。

   若要讓警示不傳送通知，請選擇 **Remove (移動)**。

1. 您可以將 **Configure actions** (設定動作) 頁面的其他區段保留空白。將其他區段保留空白會建立警示，而不會將其與擴展政策建立關聯。然後，您可以從 Amazon EC2 Auto Scaling 主控台將此警示與擴展政策建立關聯。

1. 選擇**下一步**。

1. 輸入名稱 (例如 `Step-Scaling-AlarmHigh-AddCapacity`)，選擇性地輸入警示描述，然後選擇 **Next** (下一步)。

1. 選擇 **Create alarm** (建立警示)。

使用下列程序，在建立 CloudWatch 警示後從您離開的地方繼續。

**步驟 2：建立橫向擴展的步驟擴展政策**

1. 前往網址 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台，然後從導覽窗格中選擇 **Auto Scaling 群組**。

1. 選取 Auto Scaling 群組旁的核取方塊。

   頁面底部會開啟一個分割窗格。

1. 確認已將擴展限制設定妥當。例如，如果群組已達到所需容量上限，則需要指定新的上限，以便進行橫向擴展。如需詳細資訊，請參閱[設定 Auto Scaling 群組的擴展限制](asg-capacity-limits.md)。

1. 在 **Automatic scaling** (自動擴展) 索引標籤的 **Dynamic scaling policies** (動態擴展政策) 中，選擇 **Create dynamic scaling policy** (建立動態擴展政策)。

1. 針對**政策類型**，選擇**步驟擴展**，然後指定政策的名稱。

1. 如果是 **CloudWatch alarm** (CloudWatch 警示)，請選擇您的警示。如果您尚未建立警示，請選擇**建立 CloudWatch 警示**，並完成先前程序中的步驟 4 到步驟 14 來建立警示。

1. 使用 **Take the action** (採取動作) 指定此政策將進行的目前群組大小變更。您可以新增特定數量的執行個體，或現有群組大小的百分比，或將群組設為確切大小。

   例如，若要建立將群組容量增加 30% 的向外擴展政策，請選擇 `Add`，`30`在下一個欄位中輸入 ，然後選擇 `percent of group`。根據預設，此步驟調整的下限即為警示閾值，而上限為無限大正數 (\$1) 值。

1. 若要新增另一個步進，請選擇 **Add step** (新增步進)，然後定義擴展量，以及相對於警示閾值的步進下限與上限。

1. 若要設定擴展的執行個體數量下限，請更新 **Add capacity units in increments of at least** `1` **capacity units** (以至少 1 個容量單位的增量幅度來新增容量單位) 中的數值欄位。

1. （選用） 對於**執行個體暖機**期，視需要更新執行個體暖機期值。

1. 選擇**建立**。

------
#### [ AWS CLI ]

若要建立橫向擴展 （增加容量） 的步驟擴展政策，您可以使用下列範例命令。將每個*使用者輸入預留位置*替換為自己的資訊。

當您使用 時 AWS CLI，會先建立步進擴展政策，向 Amazon EC2 Auto Scaling 提供指示，說明如何在指標值增加時向外擴展。然後，您可以透過識別要監看的指標、定義警示的指標高閾值和其他詳細資訊，以及將警示與擴展政策建立關聯來建立警示。

**步驟 1：建立向外擴展的政策**  
使用以下 [put-scaling-policy](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/put-scaling-policy.html) 命令，建立名為 `my-step-scale-out-policy` 的步進擴展政策，其調整類型為 `PercentChangeInCapacity`，可依據以下步進調整增加群組容量 (假設 CloudWatch 警示閾值為 60%)：
+ 當指標值大於或等於 60% 但小於 75% 時，將執行個體數增加 10% 
+ 當指標值大於或等於 75% 但小於 85% 時，將執行個體數增加 20%
+ 當指標值大於或等於 85% 時，將執行個體數增加 30%

```
aws autoscaling put-scaling-policy \
  --auto-scaling-group-name my-asg  \
  --policy-name my-step-scale-out-policy \
  --policy-type StepScaling \
  --adjustment-type PercentChangeInCapacity \
  --metric-aggregation-type Average \
  --step-adjustments MetricIntervalLowerBound=0.0,MetricIntervalUpperBound=15.0,ScalingAdjustment=10 \
                     MetricIntervalLowerBound=15.0,MetricIntervalUpperBound=25.0,ScalingAdjustment=20 \
                     MetricIntervalLowerBound=25.0,ScalingAdjustment=30 \
  --min-adjustment-magnitude 1
```

記錄政策的 Amazon Resource Name (ARN)。您需要其來建立政策的 CloudWatch 警示。

```
{
    "PolicyARN": "arn:aws:autoscaling:region:123456789012:scalingPolicy:4ee9e543-86b5-4121-b53b-aa4c23b5bbcc:autoScalingGroupName/my-asg:policyName/my-step-scale-in-policy
}
```

**步驟 2：為指標高閾值建立 CloudWatch 警示**  
使用以下 CloudWatch [put-metric-alarm](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/cloudwatch/put-metric-alarm.html) 命令建立警示，依據 CPU 平均閾值在至少兩個連續的兩分鐘評估期間內達到 60% 時，增加 Auto Scaling 群組的大小。若要使用自訂指標，請於 `--metric-name` 中指定它的名稱，於 `--namespace` 中指定它的命名空間。

```
aws cloudwatch put-metric-alarm --alarm-name Step-Scaling-AlarmHigh-AddCapacity \
  --metric-name CPUUtilization --namespace AWS/EC2 --statistic Average \
  --period 120 --evaluation-periods 2 --threshold 60 \
  --comparison-operator GreaterThanOrEqualToThreshold \
  --dimensions "Name=AutoScalingGroupName,Value=my-asg" \
  --alarm-actions PolicyARN
```

------

# 建立向內擴展的步驟擴展政策
<a name="step-scaling-create-scale-in-policy"></a>

若要為 Auto Scaling 群組建立縮減的步驟擴展政策，請使用下列其中一種方法：

------
#### [ Console ]

**步驟 1：為指標低閾值建立 CloudWatch 警示**

1. 透過 [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) 開啟 CloudWatch 主控台。

1. 如有必要請變更 區域。請在導覽列中選擇 Auto Scaling 群組所在的區域。

1. 在導覽窗格中，選擇 **Alarms, All alarms** (警示，所有警示)，然後選擇 **Create alarm** (建立警示)。

1. 選擇 **Select metric (選取指標)**。

1. 在 **All metrics** (所有指標) 索引標籤上，選擇 **EC2**、**By Auto Scaling Group** (依據 Auto Scaling 群組)，然後在搜尋欄位中輸入 Auto Scaling 群組的名稱。然後，選取 `CPUUtilization` 並選擇 **Select metric** (選取指標)。**Specify metric and conditions** (指定指標和條件) 頁面隨即出現，顯示指標的圖表及其他資訊。

1. 針對 **Period** (期間)，選擇警示的評估期間，例如 1 分鐘。評估警示時，每個期間都會彙整為一個資料點。
**注意**  
期間越短會建立更敏感的警示。

1. 在 **Conditions** (條件) 下，執行下列動作：
   + 對於 **Threshold type** (閾值類型)，選擇 **Static** (靜態)。
   + 對於**每當`CPUUtilization`為 **時，指定您希望指標的值小於或等於閾值，以違反警示。然後，在 **than** (比) 下，輸入您要設定為超標警示的閾值。
**重要**  
若要讓警示與縮減政策 （指標低） 搭配使用，請確定您未選擇大於或等於閾值。

1. 在 **Additional configuration** (其他設定) 下，請執行下列動作：
   + 針對 **Datapoints to alarm** (要警示的資料點)，輸入資料點 (評估期間)，在此期間指標值必須符合警示的閾值條件。例如，連續兩個 5 分鐘即表示需時 10 分鐘才會呼叫警示狀態。
   + 對於 **Missing data treatment** (遺失資料處理)，選擇 **Treat missing data as bad (breaching threshold)** (將遺失資料視為不良 (違反閾值))。如需詳細資訊，請參閱《Amazon CloudWatch 使用者指南》**中的[設定 CloudWatch 警示如何處理遺失資料](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html#alarms-and-missing-data)。

1. 選擇**下一步**。

   **Configure actions** (設定動作) 頁面隨即顯示。

1. 在 **Notification (通知)** 下，選取 Amazon SNS 主題來在警示處於 `ALARM` 狀態、`OK` 狀態或 `INSUFFICIENT_DATA` 狀態時進行通知。

   若要讓警示針對相同的警示狀態或不同警示狀態傳送多個通知，請選擇 **Add notification (新增通知)**。

   若要讓警示不傳送通知，請選擇 **Remove (移動)**。

1. 您可以將 **Configure actions** (設定動作) 頁面的其他區段保留空白。將其他區段保留空白會建立警示，而不會將其與擴展政策建立關聯。然後，您可以從 Amazon EC2 Auto Scaling 主控台將此警示與擴展政策建立關聯。

1. 選擇**下一步**。

1. 輸入名稱 (例如 `Step-Scaling-AlarmLow-RemoveCapacity`)，選擇性地輸入警示描述，然後選擇 **Next** (下一步)。

1. 選擇 **Create alarm** (建立警示)。

使用下列程序在建立 CloudWatch 警示後，從您離開的地方繼續。

**步驟 2：建立縮減的步驟擴展政策**

1. 前往網址 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台，然後從導覽窗格中選擇 **Auto Scaling 群組**。

1. 選取 Auto Scaling 群組旁的核取方塊。

   頁面底部會開啟一個分割窗格。

1. 確認已將擴展限制設定妥當。例如，如果您群組的所需容量已達最低容量，則需要指定新的最低容量才能縮減。如需詳細資訊，請參閱[設定 Auto Scaling 群組的擴展限制](asg-capacity-limits.md)。

1. 在 **Automatic scaling** (自動擴展) 索引標籤的 **Dynamic scaling policies** (動態擴展政策) 中，選擇 **Create dynamic scaling policy** (建立動態擴展政策)。

1. 針對**政策類型**，選擇**步驟擴展**，然後指定政策的名稱。

1. 如果是 **CloudWatch alarm** (CloudWatch 警示)，請選擇您的警示。如果您尚未建立警示，請選擇**建立 CloudWatch 警示**，並完成先前程序中的步驟 4 到步驟 14 來建立警示。

1. 使用 **Take the action** (採取動作) 指定此政策將進行的目前群組大小變更。您可以移除特定數量的執行個體，或現有群組大小的百分比，或將群組設為確切大小。

   例如，若要建立縮減政策以將群組容量減少兩個執行個體，請選擇 `Remove`，`2`在下一個欄位中輸入 ，然後選擇 `capacity units`。根據預設，此步進調整的上限即為警示閾值，而下限為無限小負數 (-) 值。

1. 若要新增另一個步進，請選擇 **Add step** (新增步進)，然後定義擴展量，以及相對於警示閾值的步進下限與上限。

1. 選擇**建立**。

------
#### [ AWS CLI ]

若要建立縮減 （減少容量） 的步驟擴展政策，您可以使用下列範例命令。將每個*使用者輸入預留位置*替換為自己的資訊。

當您使用 時 AWS CLI，會先建立步進擴展政策，向 Amazon EC2 Auto Scaling 提供指示，說明如何在指標值減少時縮減規模。然後，您可以透過識別要監看的指標、定義警示的指標低閾值和其他詳細資訊，以及將警示與擴展政策建立關聯，來建立警示。

**步驟 1：建立縮減的政策**  
使用以下 [put-scaling-policy](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/put-scaling-policy.html) 命令，建立名為 `my-step-scale-in-policy` 的步進擴展政策，其調整類型為 `ChangeInCapacity`，會在關聯的 CloudWatch 警示超出指標低閾值時將群組的容量減少 2 個執行個體。

```
aws autoscaling put-scaling-policy \
  --auto-scaling-group-name my-asg  \
  --policy-name my-step-scale-in-policy \
  --policy-type StepScaling \
  --adjustment-type ChangeInCapacity \
  --step-adjustments MetricIntervalUpperBound=0.0,ScalingAdjustment=-2
```

記錄政策的 Amazon Resource Name (ARN)。您需要其來建立政策的 CloudWatch 警示。

```
{
    "PolicyARN": "arn:aws:autoscaling:region:123456789012:scalingPolicy:ac542982-cbeb-4294-891c-a5a941dfa787:autoScalingGroupName/my-asg:policyName/my-step-scale-out-policy
}
```

**步驟 2：建立指標低閾值的 CloudWatch 警示**  
使用以下 CloudWatch [put-metric-alarm](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/cloudwatch/put-metric-alarm.html) 命令建立警示，依據 CPU 平均閾值在至少兩個連續的兩分鐘評估期間內達到 40% 時，減少 Auto Scaling 群組的大小。若要使用自訂指標，請於 `--metric-name` 中指定它的名稱，於 `--namespace` 中指定它的命名空間。

```
aws cloudwatch put-metric-alarm --alarm-name Step-Scaling-AlarmLow-RemoveCapacity \
  --metric-name CPUUtilization --namespace AWS/EC2 --statistic Average \
  --period 120 --evaluation-periods 2 --threshold 40 \
  --comparison-operator LessThanOrEqualToThreshold \
  --dimensions "Name=AutoScalingGroupName,Value=my-asg" \
  --alarm-actions PolicyARN
```

------

# 簡易擴展政策
<a name="simple-scaling-policies"></a>

下列範例示範如何使用 CLI 命令來建立簡單的擴展政策。它們會保留在本文件中，做為任何想要使用它們之客戶的參考，但我們建議您改用目標追蹤或步進擴展政策。

與步進擴展政策類似，簡易擴展政策會要求您為擴展政策建立 CloudWatch 警示。在您建立的政策中，您還必須定義是否要新增或移除執行個體，以及要將群組設定為確切大小。

步驟擴展政策和簡單擴展政策之間的主要差異之一，是您在步驟擴展政策中取得的步驟調整。透過步進擴展，您可以根據您指定的步進調整，對群組的大小進行更大或更小的變更。

簡單的擴展政策也必須等待進行中的擴展活動或運作狀態檢查取代完成，以及[冷卻時間](ec2-auto-scaling-scaling-cooldowns.md)結束，才能回應其他警示。相反地，使用步進擴展時，即使正在進行擴展活動或運作狀態檢查取代，政策仍會繼續回應其他警示。這表示 Amazon EC2 Auto Scaling 會在收到警示訊息時評估所有警示違規。因此，我們建議您改用步進擴展政策，即使您只有單一擴展調整。

Amazon EC2 Auto Scaling 最初支援的只有簡易擴展政策。如果您在引入目標追蹤和步驟擴展政策之前建立了擴展政策，您的政策會被視為簡單的擴展政策。

## 為向外擴展建立簡單的擴展政策
<a name="simple-scaling-create-scale-out-policy"></a>

使用以下 [put-scaling-policy](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/put-scaling-policy.html) 命令建立名為 `my-simple-scale-out-policy` 的簡易擴展政策，其調整類型為 `PercentChangeInCapacity`，會在關聯的 CloudWatch 警示超出指標高閾值時將群組容量增加 30%。

```
aws autoscaling put-scaling-policy --policy-name my-simple-scale-out-policy \
  --auto-scaling-group-name my-asg --scaling-adjustment 30 \
  --adjustment-type PercentChangeInCapacity
```

記錄政策的 Amazon Resource Name (ARN)。您需要其來建立政策的 CloudWatch 警示。

## 為縮減建立簡單的擴展政策
<a name="simple-scaling-create-scale-in-policy"></a>

使用以下 [put-scaling-policy](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/put-scaling-policy.html) 命令建立名為 `my-simple-scale-in-policy` 的簡易擴展政策，其調整類型為 `ChangeInCapacity`，會在關聯的 CloudWatch 警示超出指標低閾值時將群組容量減少一個執行個體。

```
aws autoscaling put-scaling-policy --policy-name my-simple-scale-in-policy \
  --auto-scaling-group-name my-asg --scaling-adjustment -1 \
  --adjustment-type ChangeInCapacity --cooldown 180
```

記錄政策的 Amazon Resource Name (ARN)。您需要其來建立政策的 CloudWatch 警示。

# 擴展 Amazon EC2 Auto Scaling 冷卻時間
<a name="ec2-auto-scaling-scaling-cooldowns"></a>

**重要**  
依最佳實務，建議您不要使用簡易擴展政策和擴展冷卻時間。目標追蹤擴展政策或步進擴展政策的擴展效能更佳。針對隨擴展指標減少或增加而依比例變更您 Auto Scaling 群組大小的擴展政策，我們建議使用[目標追蹤](as-scaling-target-tracking.md)而非簡易擴展或步進擴展。

當您為 Auto Scaling 群組建立簡易擴展政策時，我們建議您同時設定擴展冷卻時間。

在 Auto Scaling 群組啟動或終止執行個體後，其會先等待冷卻時間結束，然後才能啟動簡易擴展政策啟動的任何進一步擴展活動。冷卻時間的目的是讓您的 Auto Scaling 群組穩定，並防止它在先前擴展活動的效果顯示之前啟動或終止其他執行個體。

例如，假設 CPU 使用率的簡易擴展政策建議啟動兩個執行個體。Amazon EC2 Auto Scaling 會啟動兩個執行個體，然後暫停擴展活動，直到冷卻時間結束。在冷卻時間結束後，任何簡易擴展政策啟動的擴展活動都可以繼續。如果 CPU 使用率再次違反高警示閾值，Auto Scaling 群組會再次水平擴展，且冷卻時間也會再次作用。但是，如果兩個執行個體已足夠降低指標值，群組便會維持目前的大小。

**Topics**
+ [考量事項](#cooldown-considerations)
+ [生命週期關聯可能會導致額外延遲](#cooldowns-lifecycle-hooks)
+ [變更預設冷卻時間](#set-default-cooldown)
+ [為特定的簡單擴展政策設定冷卻時間](#cooldowns-scaling-specific)

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

下列考量適用於使用簡易擴展政策和擴展冷卻：
+ 目標追蹤和步進擴展政策可以立即啟動水平擴展活動，而無需等待冷卻時間結束。反之，每當 Auto Scaling 群組啟動執行個體時，個別執行個體都會有暖機期。如需詳細資訊，請參閱[設定 Auto Scaling 群組的預設執行個體暖機期](ec2-auto-scaling-default-instance-warmup.md)。
+ 當橫向擴展活動正在進行時，會封鎖所有目標追蹤和步進擴展向內擴展活動，直到執行個體完成暖機。當 Auto Scaling 群組處於冷卻時間時，縮減活動也可能延遲。
+ 當已排定的動作在已排定的時間開始時，它還會立即啟動擴展活動，而無須等候冷卻時間結束。
+ 如果執行個體狀態不佳，Amazon EC2 Auto Scaling 不會等待冷卻時間結束，然後再取代此運作狀態不佳的執行個體。
+ 當啟動或終止多個執行個體時，冷卻時間 (預設冷卻時間或擴展政策特定冷卻時間) 會在最後一個執行個體完成啟動或終止時，開始生效。
+ 在手動擴展 Auto Scaling 群組時，預設並不會等待冷卻時間完成。不過，當您使用 AWS CLI 或 SDK 手動擴展時，您可以覆寫此行為並遵循預設冷卻時間。
+ 依預設，Elastic Load Balancing 會等待 300 秒以完成取消註冊 (連接耗盡) 程序。如果該群組在 Elastic Load Balancing 負載平衡器之後，其會等待終止執行個體取消註冊，再開始冷卻時間。

## 生命週期關聯可能會導致額外延遲
<a name="cooldowns-lifecycle-hooks"></a>

如果叫用 [lifecycle hook](lifecycle-hooks.md)，冷卻時間會在您完成生命週期動作後或逾時期間結束後開始。例如，假設有一個 Auto Scaling 群組，其具備可用於執行個體啟動的 lifecycle hook 的。當應用程式提高需求，群組啟動執行個體以增加容量。由於具備一個 lifecycle hook，執行個體進入等待狀態，且擴展活動會由於簡易擴展政策而暫停。當執行個體進入 `InService` 狀態時，冷卻時間開始。在冷卻時間結束後，會繼續簡易擴展政策活動。

啟用 Elastic Load Balancing 時，為了縮減規模，當為終止選取的執行個體開始連線耗盡 （取消註冊延遲） 時，冷卻時間就會開始。冷卻時間不會等待連線耗盡完成，也不會等待生命週期掛鉤完成其動作。這表示只要縮減事件的結果反映在 群組的容量中，任何因簡單擴展政策而導致的擴展活動都可以繼續。否則，等待完成所有三個活動 (連接耗盡、lifecycle hook 和冷卻時間) 會大幅增加 Auto Scaling 群組暫停擴展所需的時間。

## 變更預設冷卻時間
<a name="set-default-cooldown"></a>

一開始在 Amazon EC2 Auto Scaling 主控台中建立 Auto Scaling 群組時，您無法設定預設冷卻時間。依預設，此冷卻時間期間設為 300 秒 (5 分鐘)。如有需要，您可以在建立群組後進行更新。

**變更預設冷卻時間 (主控台)**  
建立 Auto Scaling 群組後，在 **Details** (詳細資訊) 索引標籤上，依次選取 **Advanced configurations** (進階組態)、**Edit** (編輯)。對於 **Default cooldown** (預設冷卻時間)，根據您的執行個體啟動時間或其他應用程式需求來選擇時間量。

**變更預設冷卻時間 (AWS CLI)**  
使用以下命令變更新的或現有 Auto Scaling 群組的預設冷卻時間。如果未定義預設冷卻時間，則使用預設值 300 秒。
+ [create-auto-scaling-group](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/create-auto-scaling-group.html)
+ [update-auto-scaling-group](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/update-auto-scaling-group.html)

要確認預設冷卻時間的值，請使用 [describe-auto-scaling-groups](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/describe-auto-scaling-groups.html) 命令。

## 為特定的簡單擴展政策設定冷卻時間
<a name="cooldowns-scaling-specific"></a>

依預設，所有簡易擴展政策都會使用為 Auto Scaling 群組定義的預設冷卻時間。如要設定特定簡易擴展政策的冷卻時間，請在建立或更新政策時使用選用的冷卻參數。在為政策指定冷卻時間時，它會覆寫預設冷卻時間。

擴展政策特定冷卻時間的常見用途之一是擴展政策。由於該政策終止執行個體，Amazon EC2 Auto Scaling 需要更少的時間來確定是否要終止額外的執行個體。終止執行個體的操作應會比啟動執行個體更快。因此，預設的 300 秒冷卻時間過長。在這種情況下，擴展政策特定的冷卻時間，其縮減政策的值較低，可以透過允許 群組更快地縮減規模，協助您降低成本。

要在主控台中建立或更新簡易擴展政策，請在建立群組後選擇 **Automatic scaling** (自動擴展) 索引標籤。若要使用 建立或更新簡單的擴展政策 AWS CLI，請使用 [put-scaling-policy](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/put-scaling-policy.html) 命令。如需詳細資訊，請參閱[步進和簡易擴展政策](as-scaling-simple-step.md)。

# 以 Amazon SQS 為基礎的擴展政策
<a name="as-using-sqs-queue"></a>

**重要**  
下列資訊和步驟說明在將佇列屬性作為自訂指標發佈到 CloudWatch 之前，如何使用 `ApproximateNumberOfMessages` 佇列屬性計算每個執行個體的 Amazon SQS 佇列待辦項目。但是，您現在可以使用指標數學來節省發佈自己指標的成本和精力。如需詳細資訊，請參閱[使用指標數學建立目標追蹤擴展政策](ec2-auto-scaling-target-tracking-metric-math.md)。

您可以擴展 Auto Scaling 群組，以回應 Amazon Simple Queue Service (Amazon SQS) 佇列中系統負載的變更。若要進一步了解如何使用 Amazon SQS，請參閱《[Amazon Simple Queue Service 開發人員指南](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/)》。

在某些情境下，您可能會考慮進行擴展，以回應 Amazon SQS 佇列中的活動。例如，假設您有一個 web 應用程式，可讓使用者上傳影像及在線上使用這些影像。在此情境下，每個影像都需要調整大小和編碼，才能進行發佈。應用程式會在 Auto Scaling 群組內的 EC2 執行個體上執行，並且會設為處理您的典型上傳速率。運作狀態不佳的執行個體會中止且取代，為維持目前執行個體數量。應用程式會將影像的新點陣圖資料置放在 SQS 佇列中以進行處理。它會處理影像，然後發佈處理後的影像，供使用者瀏覽。如果要上傳的影像數量不會隨時間變化，此案例的架構便能夠良好的運作。但如果上傳的數量會隨時間變更，建議您考慮使用動態擴展來擴展您 Auto Scaling 群組的容量。

**Topics**
+ [搭配正確的指標使用目標追蹤](#scale-sqs-queue-custom-metric)
+ [限制](#scale-sqs-queue-limitations)
+ [根據 Amazon SQS 設定擴展](scale-sqs-queue-cli.md)
+ [Amazon SQS 和執行個體縮減保護](#scale-sqs-queue-scale-in-protection)

## 搭配正確的指標使用目標追蹤
<a name="scale-sqs-queue-custom-metric"></a>

如果您使用以自訂 Amazon SQS 佇列指標為基礎的目標追蹤擴展政策，動態擴展可以更有效地調整至您應用程式的需求曲線。如需為目標追蹤選擇指標的詳細資訊，請參閱 [選擇 Metrics (指標)](as-scaling-target-tracking.md#target-tracking-choose-metrics)。

使用如 `ApproximateNumberOfMessagesVisible` 等 CloudWatch Amazon SQS 指標進行目標追蹤的問題在於，佇列中的訊息數不能根據處理佇列訊息的 Auto Scaling 群組大小依比例進行變更。這是因為您 SQS 佇列中的訊息數不只會定義所需要的執行個體數。Auto Scaling 群組中的執行個體數會受到多個因素影響，包括其處理訊息所花費的時間，以及可接受的延遲量 (佇列延遲)。

為解決這些狀況，可使用帶有目標值的 *backlog per instance* (每個執行個體的待處理項目) 指標，作為要維持的 *acceptable backlog per instance* (每個執行個體的可接受待處理項目)。您可以透過以下列方式計算這些數字：
+ **每個執行個體的待處理項目**：如要計算每個執行個體的待處理項目，請從 `ApproximateNumberOfMessages` 佇列屬性開始，以判斷 SQS 佇列的長度 (可從佇列供擷取使用的訊息數)。將此數量除以機群的執行容量 (對 Auto Scaling 群組而言是處於 `InService` 狀態的執行個體數量)，求出每個執行個體的待處理項目。
+ **每個執行個體的可接受待處理項目**：如要計算您的目標值，請先判斷您應用程式針對延遲可接受的應用程式。然後，將可接受延遲值，除以 EC2 執行個體處理訊息所需的平均時間。

例如，假設您目前有一個 Auto Scaling 群組，其中包含 10 個執行個體，且佇列 (`ApproximateNumberOfMessages`) 中的可見訊息數量為 1500。如果每個訊息的平均處理時間為 0.1 秒，最長可接受的延遲為 10 秒，則每個執行個體的可接受待處理項目 10/0.1，等於 100 個訊息。這表示 100 是目標追蹤政策的目標值。當每個執行個體的待處理項目達到目標值時，就會發生橫向擴展事件。因為每個執行個體的待處理項目數量已經為 150 個訊息 (1500 個訊息/10 個執行個體)，您的群組便會橫向擴展，並橫向擴展五個執行個體來維持與目標值的比例。

下列程序示範如何發佈自訂指標及建立目標追蹤擴展政策，設定您的 Auto Scaling 群組來根據這些計算進行擴展。

**重要**  
請記住，若要降低成本，請改用指標數學。如需詳細資訊，請參閱[使用指標數學建立目標追蹤擴展政策](ec2-auto-scaling-target-tracking-metric-math.md)。

這組態有三個重要部分：
+ 用來管理 EC2 執行個體的 Auto Scaling 群組，主要目的在處理來自 SQS 佇列中的訊息。
+ 傳送給 Amazon CloudWatch 的自訂指標，用來 Auto Scaling 群組每個 EC2 執行個體佇列中的訊息數量。
+ 目標追蹤擴展政策設定 Auto Scaling 群組會根據自訂指標和設定的目標值來進行擴展。CloudWatch 警示呼叫擴展政策。

下圖說明此組態的架構。

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


## 限制
<a name="scale-sqs-queue-limitations"></a>

您必須使用 AWS CLI 或 SDK 將自訂指標發佈至 CloudWatch。然後，您可以使用 監控指標 AWS 管理主控台。

在下列各節中，您會 AWS CLI 針對需要執行的任務使用 。例如，若要取得反映佇列目前使用情況的指標資料，您可以使用 SQS [get-queue-attributes](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sqs/get-queue-attributes.html) 命令。

# 根據 Amazon SQS 設定擴展
<a name="scale-sqs-queue-cli"></a>

下列程序說明如何根據 Amazon SQS 設定自動擴展。您將了解如何建立 CloudWatch 自訂指標、如何使用 設定目標追蹤政策 AWS CLI，以及如何測試您的組態。

開始之前，請確定您已 AWS CLI [安裝](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)並[設定](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html) 。此外，您必須擁有要使用的 Amazon SQS 佇列。下列任務假設您已有佇列 （標準或 FIFO)、Auto Scaling 群組，以及執行使用佇列之應用程式的 EC2 執行個體。

如需有關 Amazon SQS 主題的詳細資訊，請參閱《[Amazon Simple Queue Service 開發人員指南](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/)》。

**Topics**
+ [步驟 1：建立 CloudWatch 自訂指標](#create-sqs-cw-alarms-cli)
+ [步驟 2：建立目標追蹤擴展政策](#create-sqs-policies-cli)
+ [步驟 3：測試您的擴展政策](#validate-sqs-scaling-cli)

## 步驟 1：建立 CloudWatch 自訂指標
<a name="create-sqs-cw-alarms-cli"></a>

自訂指標是您定義使用指標名稱和命名空間定義的。自訂指標命名空間無法以 `AWS/` 為開頭。如需更多發佈自訂指標的詳細資訊，請參閱《Amazon CloudWatch 使用者指南》**中的[發佈自訂指標](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/publishingMetrics.html)主題。

遵循此程序，首先從 AWS 您的帳戶讀取資訊來建立自訂指標。然後，如先前小節所建議，計算每個執行個體的待處理項目指標。最後，以 1 分鐘粒度將此數值發佈到 CloudWatch。我們強烈建議在可能的情況下使用 1 分鐘粒度擴展指標，確保能夠更快地回應系統負載中的變更。

**建立 CloudWatch 自訂指標 (AWS CLI)**

1. 使用 SQS [get-queue-attributes](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sqs/get-queue-attributes.html) 命令，取得佇列中等待的訊息數量 (`ApproximateNumberOfMessages`)。

   ```
   aws sqs get-queue-attributes --queue-url https://sqs.region.amazonaws.com/123456789/MyQueue \
     --attribute-names ApproximateNumberOfMessages
   ```

1. 使用 [describe-auto-scaling-group](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/describe-auto-scaling-groups.html) 命令，取得群組的執行容量，此數值是處於 `InService` 生命週期狀態的執行個體數量。此命令傳回的 Auto Scaling 群組的執行個體及其生命週期狀態。

   ```
   aws autoscaling describe-auto-scaling-groups --auto-scaling-group-names my-asg
   ```

1. 透過將可從群組擷取的大約訊息數除以機群的執行容量，來計算每個執行個體的待處理項目。

1. 建立每分鐘執行一次的指令碼，以擷取每個執行個體值的待處理項目，並將其發佈到 CloudWatch 自訂指標。發佈 Auto Scaling 時，需要指定指標的名稱、命名空間、單位、值以及零個或多個維度。維度由維度名稱和維度值組成。

   若要發佈自訂指標，請用偏好的指標名稱、指標值、命名空間 (只要不是以「`AWS`」開頭即可) 和維度 (選擇性) 取代以*斜體*顯示的預留位置值，然後執行下列 [put-metric-data](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/cloudwatch/put-metric-data.html) 命令。

   ```
   aws cloudwatch put-metric-data --metric-name MyBacklogPerInstance --namespace MyNamespace \
     --unit None --value 20 --dimensions MyOptionalMetricDimensionName=MyOptionalMetricDimensionValue
   ```

在您的應用程式發送所需的指標後，資料會傳送到 CloudWatch。CloudWatch 主控台中會顯示指標。您可以登入 AWS 管理主控台 並導覽至 CloudWatch 頁面來存取它。然後，導覽至指標頁面或是使用搜尋方塊進行搜尋以檢視指標。如需檢視指標的詳細資訊，請參閱《Amazon CloudWatch 使用者指南》**中的[檢視可用指標](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/viewing_metrics_with_cloudwatch.html)。

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

您建立的指標現在可以新增至目標追蹤擴展政策。

**建立目標追蹤擴展政策 (AWS CLI)**

1. 針對主目錄中名為 `config.json` 的 JSON 檔案的擴展政策和自訂指標規範，使用以下 `cat` 命令來儲存其目標值。將每個*使用者輸入預留位置*替換為自己的資訊。對於 `TargetValue`，計算每個執行個體的可接受待處理項目指標，然後在這裡輸入。要計算這個數值，需要決定一般延遲值，然後以處理訊息所花的平均時間將其除之，如之前章節所述。

   如果您沒有為在步驟 1 中建立的指標指定任何維度，請勿在自訂指標規範中包含任何維度。

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

1. 使用 [put-scaling-policy](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/put-scaling-policy.html) 命令與先前步驟中建立的 `config.json` 檔案來建立您的擴展政策。

   ```
   aws autoscaling put-scaling-policy --policy-name sqs100-target-tracking-scaling-policy \
     --auto-scaling-group-name my-asg --policy-type TargetTrackingScaling \
     --target-tracking-configuration file://~/config.json
   ```

   這會建立兩個警示：一個用於擴增，而另一個用於縮減。這也會傳回向 CloudWatch 註冊的政策 Amazon Resource Name (ARN)，每當超出指標閾值時，CloudWatch 即會使用 ARN 來呼叫擴展。

## 步驟 3：測試您的擴展政策
<a name="validate-sqs-scaling-cli"></a>

設定完成後，確認您的擴展政策可正常運作。您可以利用提高 SQS 佇列中的訊息數量來測試該政策，然後驗證 Auto Scaling 群組是否有啟動一個額外的 EC2 執行個體。您也可以利用減低 SQS 佇列中的訊息數量來測試縮減政策，然後驗證 Auto Scaling 群組是否有終止一個 EC2 執行個體。

**測試擴增函數**

1. 請遵循[建立 Amazon SQS 標準佇列、傳送訊息](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/creating-sqs-standard-queues.html)或[建立 Amazon SQS FIFO 佇列，以及傳送訊息](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/creating-sqs-fifo-queues.html)以將訊息新增至佇列中的步驟。請確定您已調升佇列中的訊息數量，因此每個執行個體的待處理項目指標才會達到目標值。

   這變更可能需要幾分鐘的時間來呼叫警示。

1. 使用 [describe-auto-scaling-group](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/describe-auto-scaling-groups.html) 命令，驗證群組是否已啟動執行個體。

   ```
   aws autoscaling describe-auto-scaling-groups --auto-scaling-group-name my-asg
   ```

**測試縮減函數**

1. 依照[接收和刪除訊息 （主控台）](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/step-receive-delete-message.html) 中的步驟，從佇列刪除訊息。請確定您已調降佇列中的訊息數量，因此每個執行個體的待處理項目指標才會低於目標值。

   這變更可能需要幾分鐘的時間來呼叫警示。

1. 使用 [describe-auto-scaling-group](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/describe-auto-scaling-groups.html) 命令，驗證群組是否已終止執行個體。

   ```
   aws autoscaling describe-auto-scaling-groups --auto-scaling-group-name my-asg
   ```

## Amazon SQS 和執行個體縮減保護
<a name="scale-sqs-queue-scale-in-protection"></a>

在執行個體終止時尚未處理的訊息會傳回 SQS 佇列，由仍在執行的執行個體處理。對於執行長時間執行任務的應用程式，您可以選擇性地使用執行個體縮減保護，控制 Auto Scaling 群組縮減時要終止哪些佇列工作者。

下列虛擬程式碼顯示可保護長時間執行、佇列導向的工作者處理程序免於縮減終止的一種方法。

```
while (true)
{
  SetInstanceProtection(False);
  Work = GetNextWorkUnit();
  SetInstanceProtection(True);
  ProcessWorkUnit(Work);
  SetInstanceProtection(False);
}
```

如需詳細資訊，請參閱[設計您的應用程式以正常處理執行個體終止](gracefully-handle-instance-termination.md)。

# 驗證 Auto Scaling 群組的擴展活動
<a name="as-verify-scaling-activity"></a>

在 Amazon EC2 主控台的 Amazon EC2 Auto Scaling 區段中，Auto Scaling 群組的 **Activity history** (活動歷史記錄) 可以讓您檢視進行中的擴展活動的目前狀態。擴展活動完成後，您可以查看其是否成功。建立 Auto Scaling 群組或向現有群組新增擴展條件時，此功能特別實用。

當您向 Auto Scaling 群組新增目標追蹤、步驟或簡單擴展政策時，Amazon EC2 Auto Scaling 會立即開始針對該指標評估政策。當指標超過閾值達到指定的評估期間數，指標警示會進入 ALARM 狀態。這表示擴展政策可能會在建立之後立即產生擴展活動。Amazon EC2 Auto Scaling 調整所需容量以回應擴展政策之後，即可在您的帳戶中驗證擴展活動。如果要接收來自 Amazon EC2 Auto Scaling 的電子郵件通知，通知您有關擴展活動的資訊，則請遵循 [Amazon EC2 Auto Scaling 的 Amazon SNS 通知選項 Amazon EC2 Auto Scaling](ec2-auto-scaling-sns-notifications.md) 中的指示。

**提示**  
在下列程序中，您可以查看 Auto Scaling 群組的 **Activity history** (活動歷史記錄) 和 **Instances** (執行個體) 部分。在這兩個部分中，已顯示了指定的資料欄。要顯示隱藏的資料欄列或變更顯示的資料列，請選擇每個部分右上角的齒輪圖示以開啟偏好設定模式，視需要更新設定，然後選擇 **Confirm** (確認)。

**檢視 Auto Scaling 群組的擴展活動 (主控台)**

1. 前往網址 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台，然後從導覽窗格中選擇 **Auto Scaling 群組**。

1. 在螢幕上方的導覽列中，選擇您在建立 Auto Scaling 群組時所在的區域。

1. 選取 Auto Scaling 群組旁的核取方塊。

   頁面底部會開啟一個分割窗格。

1. 在 **Activity** (活動) 索引標籤的 **Activity history** (活動歷史記錄) 中，**Status** (狀態) 欄位會顯示 Auto Scaling 群組是否已成功啟動或終止執行個體，或擴展活動是否仍在進行中。

1. (選用) 如果您有大量擴展活動，則可以選擇活動歷史記錄頂部邊緣的 **>** 圖示以查看擴展活動的下一頁。

1. 在 **Instance management** (執行個體管理) 索引標籤 **Instances** (執行個體) 下的 **Lifecycle** (生命週期) 欄會包含執行個體的狀態。在執行個體啟動並完成任何 lifecycle hook 後，它的生命週期狀態會變更為 `InService`。**Health status** (運作狀態) 欄會顯示對執行個體進行 EC2 執行個體運作狀態檢查的結果。

**檢視 Auto Scaling 群組的擴展活動 (AWS CLI)**  
使用以下 [describe-scaling-activities](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/describe-scaling-activities.html) 命令。

```
aws autoscaling describe-scaling-activities --auto-scaling-group-name my-asg
```

以下為範例輸出。

擴展活動依開始時間排序。首先描述仍在進行中的活動。

```
{
  "Activities": [
    {
      "ActivityId": "5e3a1f47-2309-415c-bfd8-35aa06300799",
      "AutoScalingGroupName": "my-asg",
      "Description": "Terminating EC2 instance: i-06c4794c2499af1df",
      "Cause": "At 2020-02-11T18:34:10Z a monitor alarm TargetTracking-my-asg-AlarmLow-b9376cab-18a7-4385-920c-dfa3f7783f82 in state ALARM triggered policy my-target-tracking-policy changing the desired capacity from 3 to 2.  At 2020-02-11T18:34:31Z an instance was taken out of service in response to a difference between desired and actual capacity, shrinking the capacity from 3 to 2.  At 2020-02-11T18:34:31Z instance i-06c4794c2499af1df was selected for termination.",
      "StartTime": "2020-02-11T18:34:31.268Z",
      "EndTime": "2020-02-11T18:34:53Z",
      "StatusCode": "Successful",
      "Progress": 100,
      "Details": "{\"Subnet ID\":\"subnet-5ea0c127\",\"Availability Zone\":\"us-west-2a\"...}",
      "AutoScalingGroupARN": "arn"
    },
...
  ]
}
```

如需輸出中欄位的說明，請參閱《Amazon EC2 Auto Scaling API 參考》**中的[活動](https://docs.aws.amazon.com/autoscaling/ec2/APIReference/API_Activity.html)。

如需協助擷取已刪除群組的擴展活動，以及可能會遇到的錯誤類型和處理方式的相關資訊，請參閱 [對 Amazon EC2 Auto Scaling 中的問題進行故障診斷](CHAP_Troubleshooting.md)。

# 停用 Auto Scaling 群組的擴展政策
<a name="as-enable-disable-scaling-policy"></a>

本主題說明如何暫時停用擴展政策，使其不會啟動變更 Auto Scaling 群組包含的執行個體數量。停用擴展政策時，會保留組態詳細資訊，以便您快速重新啟用政策。比起在不需要時暫時刪除政策，然後稍後重新建立，這個方法比較容易。

停用擴展政策時，Auto Scaling 群組不會針對停用擴展政策時違規的指標警示進行擴增或縮減。不過，任何仍在進行中的擴展活動都不會停止。

請注意，停用的擴展政策仍會計入您可以加入 Auto Scaling 群組的擴展政策數量的配額。

**停用擴展政策 (主控台)**

1. 前往網址 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台，然後從導覽窗格中選擇 **Auto Scaling 群組**。

1. 選取 Auto Scaling 群組旁的核取方塊。

   頁面底部會開啟一個分割窗格。

1. 在 **Automatic scaling** (自動擴展) 索引標籤中，在 **Dynamic scaling policies** (動態擴展政策) 中，選取所需擴展政策右上角的核取方塊。

1. 捲動至 **Dynamic scaling policies** (動態擴展政策) 區段，然後選擇 **Actions** (動作)、**Disable** (停用)。

當您準備好重新啟用擴展政策時，請重複這些步驟，然後選擇 **Actions** (動作)、**Enable** (啟用)。重新啟用擴展政策之後，如果目前有任何警示處於 ALARM 狀態，您的 Auto Scaling 群組可能會立即啟動擴展動作。

**停用擴展政策 (AWS CLI)**  
使用 [put-scaling-policy](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/put-scaling-policy.html) 命令與 `--no-enabled` 選項，如下所示。指定命令中的所有選項，就像您在建立政策時指定這些選項一樣。

```
aws autoscaling put-scaling-policy --auto-scaling-group-name my-asg \
   --policy-name my-scaling-policy --policy-type TargetTrackingScaling \
   --estimated-instance-warmup 360 \
   --target-tracking-configuration '{ "TargetValue": 70, "PredefinedMetricSpecification": { "PredefinedMetricType": "ASGAverageCPUUtilization" } }' \ 
   --no-enabled
```

**重新啟用擴展政策 (AWS CLI)**  
使用 [put-scaling-policy](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/put-scaling-policy.html) 命令與 `--enabled` 選項，如下所示。指定命令中的所有選項，就像您在建立政策時指定這些選項一樣。

```
aws autoscaling put-scaling-policy --auto-scaling-group-name my-asg \
   --policy-name my-scaling-policy --policy-type TargetTrackingScaling \
   --estimated-instance-warmup 360 \
   --target-tracking-configuration '{ "TargetValue": 70, "PredefinedMetricSpecification": { "PredefinedMetricType": "ASGAverageCPUUtilization" } }' \ 
   --enabled
```

**描述擴展政策 (AWS CLI)**  
使用 [describe-policies](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/describe-policies.html) 命令，驗證擴展政策的啟用狀態。

```
aws autoscaling describe-policies --auto-scaling-group-name my-asg \
   --policy-names my-scaling-policy
```

以下為範例輸出。

```
{
    "ScalingPolicies": [
        {
            "AutoScalingGroupName": "my-asg",
            "PolicyName": "my-scaling-policy",
            "PolicyARN": "arn:aws:autoscaling:us-west-2:123456789012:scalingPolicy:1d52783a-b03b-4710-bb0e-549fd64378cc:autoScalingGroupName/my-asg:policyName/my-scaling-policy",
            "PolicyType": "TargetTrackingScaling",
            "StepAdjustments": [],
            "Alarms": [
                {
                    "AlarmName": "TargetTracking-my-asg-AlarmHigh-9ca53fdd-7cf5-4223-938a-ae1199204502",
                    "AlarmARN": "arn:aws:cloudwatch:us-west-2:123456789012:alarm:TargetTracking-my-asg-AlarmHigh-9ca53fdd-7cf5-4223-938a-ae1199204502"
                },
                {
                    "AlarmName": "TargetTracking-my-asg-AlarmLow-7010c83d-d55a-4a7a-abe0-1cf8b9de6d6c",
                    "AlarmARN": "arn:aws:cloudwatch:us-west-2:123456789012:alarm:TargetTracking-my-asg-AlarmLow-7010c83d-d55a-4a7a-abe0-1cf8b9de6d6c"
                }
            ],
            "TargetTrackingConfiguration": {
                "PredefinedMetricSpecification": {
                    "PredefinedMetricType": "ASGAverageCPUUtilization"
                },
                "TargetValue": 70.0,
                "DisableScaleIn": false
            },
            "Enabled": true
        }
    ]
}
```

# 刪除 Auto Scaling 群組的擴展政策
<a name="deleting-scaling-policy"></a>

在您不再需要擴展政策之後，可以將其刪除。根據擴展政策的類型，您可能也需要刪除 CloudWatch 警示。刪除目標追蹤擴展政策也會刪除任何相關聯的 CloudWatch 警示。刪除步進擴展政策或簡易擴展政策會刪除基礎警示動作，但不會刪除 CloudWatch 警示，即使其不再有相關聯的動作，也是如此。

**刪除擴展政策 (主控台)**

1. 前往網址 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台，然後從導覽窗格中選擇 **Auto Scaling 群組**。

1. 選取 Auto Scaling 群組旁的核取方塊。

   頁面底部會開啟一個分割窗格。

1. 在 **Automatic scaling** (自動擴展) 索引標籤中，在 **Dynamic scaling policies** (動態擴展政策) 中，選取所需擴展政策右上角的核取方塊。

1. 捲動至 **Dynamic scaling policies** (動態擴展政策) 區段，然後選擇 **Actions** (動作)、**Delete** (刪除)。

1. 出現確認提示時，選擇 **Yes, Delete** (是，刪除)。

1. (選用) 如果您刪除步進擴展政策或簡易擴展政策，請執行下列動作來刪除與政策相關聯的 CloudWatch 警示。您可以略過這些子步驟來保留警示，以供日後使用。

   1. 透過 [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) 開啟 CloudWatch 主控台。

   1. 在導覽窗格上，選擇 **Alarms (警示)**。

   1. 選擇警示 (例如，`Step-Scaling-AlarmHigh-AddCapacity`)，然後依序選擇 **Action** (動作)、**Delete** (刪除)。

   1. 出現確認提示時，請選擇**刪除**。

**取得 Auto Scaling 群組的擴展政策 (AWS CLI)**  
刪除擴展政策之前，請使用以下 [describe-policies](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/describe-policies.html) 命令來查看為該 Auto Scaling 群組建立了哪些擴展政策。您可以在刪除政策和 CloudWatch 警示時使用輸出。

```
aws autoscaling describe-policies --auto-scaling-group-name my-asg
```

您可以使用 `--query` 參數，依擴展政策類型篩選結果。以下的 `query` 語法適用於 Linux 或 macOS。在 Windows 上，單引號需改為雙引號。

```
aws autoscaling describe-policies --auto-scaling-group-name my-asg 
  --query 'ScalingPolicies[?PolicyType==`TargetTrackingScaling`]'
```

以下為範例輸出。

```
[
    {
        "AutoScalingGroupName": "my-asg",
        "PolicyName": "cpu50-target-tracking-scaling-policy",
        "PolicyARN": "PolicyARN",
        "PolicyType": "TargetTrackingScaling",
        "StepAdjustments": [],
        "Alarms": [
            {
                "AlarmARN": "arn:aws:cloudwatch:us-west-2:123456789012:alarm:TargetTracking-my-asg-AlarmHigh-fc0e4183-23ac-497e-9992-691c9980c38e",
                "AlarmName": "TargetTracking-my-asg-AlarmHigh-fc0e4183-23ac-497e-9992-691c9980c38e"
            },
            {
                "AlarmARN": "arn:aws:cloudwatch:us-west-2:123456789012:alarm:TargetTracking-my-asg-AlarmLow-61a39305-ed0c-47af-bd9e-471a352ee1a2",
                "AlarmName": "TargetTracking-my-asg-AlarmLow-61a39305-ed0c-47af-bd9e-471a352ee1a2"
            }
        ],
        "TargetTrackingConfiguration": {
            "PredefinedMetricSpecification": {
                "PredefinedMetricType": "ASGAverageCPUUtilization"
            },
            "TargetValue": 50.0,
            "DisableScaleIn": false
        },
        "Enabled": true
    }
]
```

**刪除擴展政策 (AWS CLI)**  
使用以下 [delete-policy](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/delete-policy.html) 命令。

```
aws autoscaling delete-policy --auto-scaling-group-name my-asg \
  --policy-name cpu50-target-tracking-scaling-policy
```

**刪除 CloudWatch 警示 (AWS CLI)**  
對於步進和簡易擴展政策，請使用 [delete-alarms](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/cloudwatch/delete-alarms.html) 命令來刪除與政策相關聯的 CloudWatch 警示。您可以略過此步驟來保留警示，以供日後使用。您可以同時刪除一或多個警示。例如，使用下列命令來刪除 `Step-Scaling-AlarmHigh-AddCapacity` 和 `Step-Scaling-AlarmLow-RemoveCapacity` 警示。

```
aws cloudwatch delete-alarms --alarm-name Step-Scaling-AlarmHigh-AddCapacity Step-Scaling-AlarmLow-RemoveCapacity
```

# 的範例擴展政策 AWS CLI
<a name="examples-scaling-policies"></a>

您可以透過 AWS 管理主控台、 AWS Command Line Interface (AWS CLI) 或 SDKs 建立 Amazon EC2 Auto Scaling 的擴展政策。

下列範例示範如何使用put-scaling-policy 命令為 Amazon EC2 Auto Scaling 建立擴展政策。 AWS CLI [put-scaling-policy](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/put-scaling-policy.html) 將每個*使用者輸入預留位置*替換為自己的資訊。

若要開始使用 撰寫擴展政策 AWS CLI，請參閱 [目標追蹤擴展政策](as-scaling-target-tracking.md)和 中的簡介練習[步進和簡易擴展政策](as-scaling-simple-step.md)。

**範例 1：套用具備預先定義指標規格的目標追蹤擴展政策**

```
aws autoscaling put-scaling-policy --policy-name cpu50-target-tracking-scaling-policy \
  --auto-scaling-group-name my-asg --policy-type TargetTrackingScaling \
  --target-tracking-configuration file://config.json
{
  "TargetValue": 50.0,
  "PredefinedMetricSpecification": {
    "PredefinedMetricType": "ASGAverageCPUUtilization"
  }
}
```

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

**注意**  
如果檔案不在目前的目錄中，請輸入檔案的完整路徑。如需從檔案讀取 AWS CLI 參數值的詳細資訊，請參閱 AWS Command Line Interface 《 使用者指南》中的[從檔案載入 AWS CLI 參數](https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-parameters-file.html)。

**範例 2：套用具備自訂指標規格的目標追蹤擴展政策**

```
aws autoscaling put-scaling-policy --policy-name sqs100-target-tracking-scaling-policy \
  --auto-scaling-group-name my-asg --policy-type TargetTrackingScaling \
  --target-tracking-configuration file://config.json
{
  "TargetValue": 100.0,
  "CustomizedMetricSpecification": {
    "MetricName": "MyBacklogPerInstance",
    "Namespace": "MyNamespace",
    "Dimensions": [{
      "Name": "MyOptionalMetricDimensionName",
      "Value": "MyOptionalMetricDimensionValue"
    }],
    "Statistic": "Average",
    "Unit": "None"
  }
}
```

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

**範例 3：只針對擴增套用目標追蹤擴展政策**

```
aws autoscaling put-scaling-policy --policy-name alb1000-target-tracking-scaling-policy \
  --auto-scaling-group-name my-asg --policy-type TargetTrackingScaling \
  --target-tracking-configuration file://config.json
{
  "TargetValue": 1000.0,
  "PredefinedMetricSpecification": {
    "PredefinedMetricType": "ALBRequestCountPerTarget",
    "ResourceLabel": "app/my-alb/778d41231b141a0f/targetgroup/my-alb-target-group/943f017f100becff"
  },
  "DisableScaleIn": true
}
```

**範例 4：針對擴增套用步進擴展政策**

```
aws autoscaling put-scaling-policy \
  --auto-scaling-group-name my-asg  \
  --policy-name my-step-scale-out-policy \
  --policy-type StepScaling \
  --adjustment-type PercentChangeInCapacity \
  --metric-aggregation-type Average \
  --step-adjustments MetricIntervalLowerBound=10.0,MetricIntervalUpperBound=20.0,ScalingAdjustment=10 \
                     MetricIntervalLowerBound=20.0,MetricIntervalUpperBound=30.0,ScalingAdjustment=20 \
                     MetricIntervalLowerBound=30.0,ScalingAdjustment=30 \
  --min-adjustment-magnitude 1
```

記錄政策的 Amazon Resource Name (ARN)。在建立 CloudWatch 警示時，您將需要 ARN。

**範例 5：針對縮減套用步進擴展政策**

```
aws autoscaling put-scaling-policy \
  --auto-scaling-group-name my-asg  \
  --policy-name my-step-scale-in-policy \
  --policy-type StepScaling \
  --adjustment-type ChangeInCapacity \
  --step-adjustments MetricIntervalUpperBound=0.0,ScalingAdjustment=-2
```

記錄政策的 Amazon Resource Name (ARN)。在建立 CloudWatch 警示時，您將需要 ARN。

**範例 6：針對擴增套用簡易擴展政策**

```
aws autoscaling put-scaling-policy --policy-name my-simple-scale-out-policy \
  --auto-scaling-group-name my-asg --scaling-adjustment 30 \
  --adjustment-type PercentChangeInCapacity --min-adjustment-magnitude 2
```

記錄政策的 Amazon Resource Name (ARN)。在建立 CloudWatch 警示時，您將需要 ARN。

**範例 7：針對縮減套用簡易擴展政策**

```
aws autoscaling put-scaling-policy --policy-name my-simple-scale-in-policy \
  --auto-scaling-group-name my-asg --scaling-adjustment -1 \
  --adjustment-type ChangeInCapacity --cooldown 180
```

記錄政策的 Amazon Resource Name (ARN)。在建立 CloudWatch 警示時，您將需要 ARN。