

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

# 根據 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
   ```