根據 Amazon SQS 設定擴展 - Amazon EC2 Auto Scaling

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

根據 Amazon SQS 設定擴展

本節說明如何根據 Amazon SQS 設定擴展規模。

步驟 1:建立 CloudWatch 自訂量度

自訂指標是您定義使用指標名稱和命名空間定義的。自訂指標命名空間無法以 AWS/ 為開頭。有關發佈自訂指標的詳細資訊,請參閱 Amazon CloudWatch 使用者指南中的發佈自訂指主題。

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

建立 CloudWatch 自訂量度 (AWS CLI)
  1. 使用 SQS get-queue-attributes命令取得佇列中等待的訊息數目 (ApproximateNumberOfMessages)。

    aws sqs get-queue-attributes --queue-url https://sqs.region.amazonaws.com/123456789/MyQueue \ --attribute-names ApproximateNumberOfMessages
  2. 使用指describe-auto-scaling-groups令取得群組的執行容量,即生命InService週期狀態中的執行個體數目。此命令傳回的 Auto Scaling 群組的執行個體及其生命週期狀態。

    aws autoscaling describe-auto-scaling-groups --auto-scaling-group-names my-asg
  3. 透過將可從群組擷取的大約訊息數除以機群的執行容量,來計算每個執行個體的待處理項目。

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

    若要發佈自訂量度,請將預留位置值以斜體取代為偏好的量度名稱、量度值、命名空間 (只要不是以 "AWS「開頭) 和維度 (選用)」,然後執行下列put-metric-data命令。

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

在您的應用程式發出所需的指標之後,資料就會傳送至 CloudWatch。該指標在控制 CloudWatch 台中可見。您可以通過登錄 AWS Management Console 並導航到 CloudWatch 頁面來訪問它。然後,導覽至指標頁面或是使用搜尋方塊進行搜尋以檢視指標。如需檢視指標的相關資訊,請參閱 Amazon CloudWatch 使用者指南中的檢視可用指

步驟 2:建立目標追蹤擴展政策

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

建立目標追蹤擴展政策 (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" } }
  2. 使用命put-scaling-policy令以及您在上一個步驟中建立的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

    這會建立兩個警示:一個用於擴增,而另一個用於縮減。它還會傳回註冊的政策的 Amazon 資源名稱 (ARN),當指標閾值違反時 CloudWatch,該政策 CloudWatch 會使用此名稱呼叫擴展。

步驟 3:測試您的擴展政策

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

測試擴增函數
  1. 請遵循建立 Amazon SQS 標準佇列和傳送訊息建立 Amazon SQS FIFO 佇列,然後傳送訊息以將訊息新增至佇列中的步驟進行操作。請確定您已調升佇列中的訊息數量,因此每個執行個體的待處理項目指標才會達到目標值。

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

  2. 使用指describe-auto-scaling-groups令驗證群組是否已啟動執行個體。

    aws autoscaling describe-auto-scaling-groups --auto-scaling-group-name my-asg
在函數中測試刻度
  1. 依照接收和刪除訊息 (主控台) 中的步驟,刪除佇列中的訊息。請確定您已調降佇列中的訊息數量,因此每個執行個體的待處理項目指標才會低於目標值。

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

  2. 使用指describe-auto-scaling-groups令驗證群組是否已終止執行個體。

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