全部產品
Search
文件中心

Auto Scaling:通過函數自訂ECS執行個體縮容策略

更新時間:Oct 01, 2024

如果您對於縮容哪些執行個體有一定要求(例如需要優先縮容CPU負載最小的執行個體),您可以通過Function Compute來自訂設定執行個體移出策略。在Auto Scaling執行縮容活動時,系統可以根據設定的執行個體移出策略,自動選擇某些特定的執行個體進行縮容。

背景資訊

Auto Scaling支援多種執行個體移出策略,伸縮組觸發縮容活動時,系統可以根據執行個體建立的時間、執行個體對應的伸縮配置版本等篩選條件設定優先權來縮容執行個體。更多資訊,請參見設定伸縮組的執行個體終止策略

如果您對於縮容的執行個體有更多要求,可以結合自身業務特性,利用Function Compute來自訂設定執行個體移出策略。樣本情境:

  • 情境一:優先縮容CPU負載最小的執行個體,以減少對業務本身的影響。

  • 情境二:基於業務自身調度系統,優先縮容空閑執行個體,保證業務的同時降低使用成本。

前提條件

操作步驟

步驟一:建立函數

阿里雲Function Compute控制台目前存在兩個版本(即Function ComputeFC 2.0和Function ComputeFC 3.0),本操作使用Function Compute2.0版本。

  1. 登入Function ComputeFC控制台

    如果您已進入Function ComputeFC 3.0的控制台,請單擊返回Function Compute2.0進入Function Compute2.0版本的控制台。

    Function Compute2.0.jpg

  2. 在左側導覽列,單擊服務及函數

  3. 在頂部功能表列,選擇地區。

  4. 建立服務。

    1. 服務列表頁面,單擊建立服務

    2. 在彈出面板中,完成服務配置,然後單擊確定

      本文採用以下配置作為樣本,未提及的參數保持預設即可。更多資訊,請參見建立服務

      參數

      樣本

      說明

      服務名稱

      test-service

      輸入阿里雲Function Compute服務的名稱。格式要求請參考介面提示。

      描述

      test

      輸入Function Compute服務的描述。

      日誌功能

      啟用

      是否啟用阿里雲Log Service。啟用後,可以通過Log Service查詢函數的執行日誌,便於您進行代碼調試、故障分析和資料分析等。

  5. 建立函數。

    1. 單擊服務名稱,單擊左側的函數管理進入函數管理頁面。

    2. 單擊建立函數

    3. 建立函數頁面,完成函數配置,然後單擊建立

      本文選擇使用內建運行時建立方式來建立函數,採用以下配置作為樣本,未提及的參數保持預設即可。更多資訊,請參見建立函數

      參數

      樣本

      說明

      基本設定

      函數名稱

      test-fc

      輸入函數名稱。格式要求請參考介面提示。

      請求處理常式類型

      處理事件請求

      支援以下兩種請求方式:

      • 處理事件請求:用於處理事件請求的函數。

      • 處理HTTP請求:用於處理HTTP請求或WebSocket請求的函數。

      函數代碼

      運行環境

      Python 3.9

      選擇代碼的運行環境。

      代碼上傳方式

      使用範例程式碼

      Hello, world! 樣本

      選擇上傳函數代碼到Function Compute的方式。

  6. 編寫並部署函數代碼。

    1. 單擊函數名稱,進入函數詳情頁面。

    2. 函數代碼頁簽下,在代碼編輯器中編輯index.py,然後單擊部署代碼

      您可以基於自身業務特性引入特定篩選策略,例如:擷取各執行個體的CPU使用率或者查詢自身業務調度系統等。

      本文採用以下代碼作為樣本,可以實現基於傳入的縮容執行個體數量(Capacity)、執行個體ID列表(InstanceId)等篩選縮容的執行個體。

      # -*- coding: utf-8 -*-
      import logging
      import json
      
      
      def handler(event, context):
          evt = json.loads(event)
          logger = logging.getLogger()
          logger.info(evt)
          removeCount = 0
          if "CapacityToRemove" in evt:
              for cp in evt["CapacityToRemove"]:
                  logger.info(cp["Capacity"])
                  removeCount += int(cp["Capacity"])
          instances_to_terminate = []
          if "Instances" in evt:
              for i in evt["Instances"]:
                  instances_to_terminate.append(i["InstanceId"])
          response = {
              'InstanceIds': instances_to_terminate[:removeCount]
          }
          logger.info(response)
          return response
      
  7. (可選)測試函數。

    1. 函數代碼頁簽下,單擊測試函數右側的表徵圖表徵圖,從下拉式清單中選擇配置測試參數

    2. 輸入測試代碼,然後單擊確定

      本文採用以下代碼作為測試樣本,其中ScalingGroupId表示要操作的伸縮組,CapacityToRemove表示從cn-beijing-g可用性區域移出1台ECS執行個體,Instances表示當前可移出的執行個體列表。

      {
      	"ScalingGroupARN": "acs:ess:cn-beijing:160998252992****.scalinggroup/asg-2zei8mzn72rb115k****",
      	"ScalingGroupId": "asg-2zei8mzn72rb115k****",
      	"CapacityToRemove": [{
      		"ZoneId": "cn-beijing-g",
      		"Capacity": 1
      	}],
      	"Instances": [{
      			"InstanceId": "i-2zeinb37ovdsx6l0****",
      			"ZoneId": "cn-beijing-g",
      			"InstanceType": "ecs.g7.xlarge",
      			"ChargeType": "PostPaid"
      		},
      		{
      			"InstanceId": "i-2zeinb37ovdsx6l0****",
      			"ZoneId": "cn-beijing-g",
      			"InstanceType": "ecs.g7.xlarge",
      			"ChargeType": "PostPaid"
      		},
      		{
      			"InstanceId": "i-2zeinb37ovdsx6l0****",
      			"ZoneId": "cn-beijing-g",
      			"InstanceType": "ecs.g7.xlarge",
      			"ChargeType": "PostPaid"
      		}
      	],
      	"AdjustmentType": "SystemScaleIn"
      }
    3. 單擊測試函數

    4. 返回結果頁簽,查看測試結果。

      基於測試代碼執行函數的預期返回如下,表示伸縮組縮容時會移出1台執行個體ID排在第一位的執行個體。

      {
          "InstanceIds": [
              "i-2zeinb37ovdsx6l0****"
          ]
      }
  8. 在頁面頂部位置,單擊發布版本,然後單擊確定

步驟二:配置伸縮組的執行個體移出策略

以下步驟以建立伸縮組為例,介紹如何自訂配置伸縮組的執行個體移出策略。如果您已有伸縮組,可直接修改伸縮組的執行個體移出策略。

  1. 登入Auto Scaling控制台

  2. 建立伸縮組。

    1. 伸縮組管理頁面,單擊建立伸縮組

    2. 完成伸縮組配置,單擊建立

      本文使用以下參數配置作為樣本,未提及的參數可保持預設。更多資訊,請參見配置伸縮組

      執行個體移出策略.png

      參數

      樣本

      說明

      伸縮組名稱

      test

      輸入伸縮組名稱。格式要求請參考介面提示。

      伸縮群組類型

      ECS

      指定伸縮組內的執行個體類型。

      本文以ECS為例,表示伸縮組內的執行個體類型為ECS執行個體。

      組內執行個體配置資訊來源

      從零開始建立

      選擇建立執行個體的配置模板。

      本文以從零開始建立為例,表示先不指定自動建立執行個體的模板。伸縮組建立完成後,您需要繼續建立伸縮配置。

      執行個體移出策略

      自訂策略

      • 服務:test-service

      • 版本:LATEST

      • 函數:test-fc

      配置縮容活動時,從伸縮組中移出執行個體的策略。

      請選擇自訂策略,然後選擇步驟一建立的函數。

      組內最小執行個體數

      0

      設定伸縮組內執行個體數量的下限。當前執行個體數量低於下限時,伸縮組會自動添加執行個體,使得伸縮組內的執行個體數量等於下限。

      組內最大執行個體數

      5

      設定伸縮組內執行個體數量的上限。當前執行個體數量超過上限時,伸縮組會自動移出執行個體,使得伸縮組內的執行個體數量等於上限。

      開啟期望執行個體數組內期望執行個體數

      開啟,3

      開啟期望執行個體數功能,並配置期望執行個體數。伸縮組會自動將執行個體數量維持在期望執行個體數。

  3. 建立伸縮配置。具體操作,請參見建立伸縮配置(ECS執行個體)

  4. 啟用伸縮組。具體操作,請參見啟用或停用伸縮組

    由於樣本的伸縮組的期望執行個體數配置為3,因此啟用伸縮組後,會自動建立3台ECS執行個體。

步驟三:驗證縮容效果

  1. 觸發縮容活動,並確認縮容執行個體的資訊。

    1. 修改伸縮組的期望執行個體數,觸發縮容活動。具體操作,請參見查看或修改伸縮組

      重要

      您也可以通過定時任務、警示任務或者手動執行伸縮規則等方式觸發縮容活動。但通過修改伸縮組最大、最小執行個體數而觸發的縮容活動,無法應用通過Function Compute自訂設定的執行個體移出策略。

      本文以將期望執行個體數修改為2作為驗證樣本。由於之前伸縮組內已有3台ECS執行個體,因此會自動觸發縮容活動,移出1台ECS執行個體,使得執行個體數與修改後的期望執行個體數一致。

    2. 查看伸縮活動詳情,確認縮容執行個體的資訊。具體操作,請參見查看伸縮活動詳情

      樣本如下,縮容的執行個體ID為i-2ze2qdthrkpf****tldq

      自訂縮容.png

  2. 查看函數的調用日誌,確認縮容活動觸發函數調用的記錄資訊。

    1. Function ComputeFC控制台服務列表頁面,單擊服務名稱。

    2. 函數管理頁面,單擊函數名稱。

    3. 在函數詳情頁面,單擊調用日誌頁簽。

    4. 請求列表頁簽的調用請求列表中,找到縮容啟用時間點對應的請求,單擊請求ID。

    5. 在彈出的請求詳情頁面,單擊日誌詳情,查看縮容活動觸發函數調用的日誌記錄。

      樣本如下,從日誌中可以看出觸發縮容活動時,Auto Scaling向Function Compute傳入了需要縮容的執行個體數和當前伸縮組內的執行個體ID列表,經過函數篩選後要縮容的執行個體ID為i-2ze2qdthrkpf****tldq,這與實際縮容的執行個體ID一致。

      Function Compute日誌.png