通過函數(shù)自定義ECS實例縮容策略
如果您對于縮容哪些實例有一定要求(例如需要優(yōu)先縮容CPU負(fù)載最小的實例),您可以通過函數(shù)計算來自定義設(shè)置實例移出策略。在彈性伸縮執(zhí)行縮容活動時,系統(tǒng)可以根據(jù)設(shè)置的實例移出策略,自動選擇某些特定的實例進行縮容。
背景信息
彈性伸縮支持多種實例移出策略,伸縮組觸發(fā)縮容活動時,系統(tǒng)可以根據(jù)實例創(chuàng)建的時間、實例對應(yīng)的伸縮配置版本等篩選條件設(shè)置優(yōu)先級來縮容實例。更多信息,請參見設(shè)置伸縮組的實例終止策略。
如果您對于縮容的實例有更多要求,可以結(jié)合自身業(yè)務(wù)特性,利用函數(shù)計算來自定義設(shè)置實例移出策略。示例場景:
場景一:優(yōu)先縮容CPU負(fù)載最小的實例,以減少對業(yè)務(wù)本身的影響。
場景二:基于業(yè)務(wù)自身調(diào)度系統(tǒng),優(yōu)先縮容空閑實例,保證業(yè)務(wù)的同時降低使用成本。
前提條件
已開通阿里云函數(shù)計算服務(wù),并完成相關(guān)授權(quán)。更多信息,請參見步驟一:開通函數(shù)計算服務(wù)。
已開通日志服務(wù),并完成相關(guān)授權(quán)。更多信息,請參見快速入門。
操作步驟
步驟一:創(chuàng)建函數(shù)
阿里云函數(shù)計算控制臺目前存在兩個版本(即函數(shù)計算FC 2.0和函數(shù)計算FC 3.0),本操作使用函數(shù)計算2.0版本。
如果您已進入函數(shù)計算FC 3.0的控制臺,請單擊返回函數(shù)計算2.0進入函數(shù)計算2.0版本的控制臺。
在左側(cè)導(dǎo)航欄,單擊服務(wù)及函數(shù)。
在頂部菜單欄,選擇地域。
創(chuàng)建服務(wù)。
在服務(wù)列表頁面,單擊創(chuàng)建服務(wù)。
在彈出面板中,完成服務(wù)配置,然后單擊確定。
本文采用以下配置作為示例,未提及的參數(shù)保持默認(rèn)即可。更多信息,請參見創(chuàng)建服務(wù)。
參數(shù)
示例
說明
服務(wù)名稱
test-service
輸入阿里云函數(shù)計算服務(wù)的名稱。格式要求請參考界面提示。
描述
test
輸入函數(shù)計算服務(wù)的描述。
日志功能
啟用
是否啟用阿里云日志服務(wù)。啟用后,可以通過日志服務(wù)查詢函數(shù)的執(zhí)行日志,便于您進行代碼調(diào)試、故障分析和數(shù)據(jù)分析等。
創(chuàng)建函數(shù)。
單擊服務(wù)名稱,單擊左側(cè)的函數(shù)管理進入函數(shù)管理頁面。
單擊創(chuàng)建函數(shù)。
在創(chuàng)建函數(shù)頁面,完成函數(shù)配置,然后單擊創(chuàng)建。
本文選擇使用內(nèi)置運行時創(chuàng)建方式來創(chuàng)建函數(shù),采用以下配置作為示例,未提及的參數(shù)保持默認(rèn)即可。更多信息,請參見創(chuàng)建函數(shù)。
參數(shù)
示例
說明
基本設(shè)置
函數(shù)名稱
test-fc
輸入函數(shù)名稱。格式要求請參考界面提示。
請求處理程序類型
處理事件請求
支持以下兩種請求方式:
處理事件請求:用于處理事件請求的函數(shù)。
處理HTTP請求:用于處理HTTP請求或WebSocket請求的函數(shù)。
函數(shù)代碼
運行環(huán)境
Python 3.9
選擇代碼的運行環(huán)境。
代碼上傳方式
使用示例代碼
Hello, world! 示例
選擇上傳函數(shù)代碼到函數(shù)計算的方式。
編寫并部署函數(shù)代碼。
單擊函數(shù)名稱,進入函數(shù)詳情頁面。
在函數(shù)代碼頁簽下,在代碼編輯器中編輯index.py,然后單擊部署代碼。
您可以基于自身業(yè)務(wù)特性引入特定篩選策略,例如:獲取各實例的CPU使用率或者查詢自身業(yè)務(wù)調(diào)度系統(tǒng)等。
本文采用以下代碼作為示例,可以實現(xiàn)基于傳入的縮容實例數(shù)量(
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
(可選)測試函數(shù)。
在函數(shù)代碼頁簽下,單擊測試函數(shù)右側(cè)的圖標(biāo),從下拉列表中選擇配置測試參數(shù)。
輸入測試代碼,然后單擊確定。
本文采用以下代碼作為測試示例,其中
ScalingGroupId
表示要操作的伸縮組,CapacityToRemove
表示從cn-beijing-g
可用區(qū)移出1臺ECS實例,Instances
表示當(dāng)前可移出的實例列表。{ "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" }
單擊測試函數(shù)。
在返回結(jié)果頁簽,查看測試結(jié)果。
基于測試代碼執(zhí)行函數(shù)的預(yù)期返回如下,表示伸縮組縮容時會移出1臺實例ID排在第一位的實例。
{ "InstanceIds": [ "i-2zeinb37ovdsx6l0****" ] }
在頁面頂部位置,單擊發(fā)布版本,然后單擊確定。
步驟二:配置伸縮組的實例移出策略
以下步驟以新建伸縮組為例,介紹如何自定義配置伸縮組的實例移出策略。如果您已有伸縮組,可直接修改伸縮組的實例移出策略。
登錄彈性伸縮控制臺。
創(chuàng)建伸縮組。
在伸縮組管理頁面,單擊創(chuàng)建伸縮組。
完成伸縮組配置,單擊創(chuàng)建。
本文使用以下參數(shù)配置作為示例,未提及的參數(shù)可保持默認(rèn)。更多信息,請參見配置伸縮組。
參數(shù)
示例
說明
伸縮組名稱
test
輸入伸縮組名稱。格式要求請參考界面提示。
伸縮組類型
ECS
指定伸縮組內(nèi)的實例類型。
本文以ECS為例,表示伸縮組內(nèi)的實例類型為ECS實例。
組內(nèi)實例配置信息來源
從零開始創(chuàng)建
選擇創(chuàng)建實例的配置模板。
本文以從零開始創(chuàng)建為例,表示先不指定自動創(chuàng)建實例的模板。伸縮組創(chuàng)建完成后,您需要繼續(xù)創(chuàng)建伸縮配置。
實例移出策略
自定義策略
服務(wù):test-service
版本:LATEST
函數(shù):test-fc
配置縮容活動時,從伸縮組中移出實例的策略。
請選擇自定義策略,然后選擇步驟一創(chuàng)建的函數(shù)。
組內(nèi)最小實例數(shù)
0
設(shè)置伸縮組內(nèi)實例數(shù)量的下限。當(dāng)前實例數(shù)量低于下限時,伸縮組會自動添加實例,使得伸縮組內(nèi)的實例數(shù)量等于下限。
組內(nèi)最大實例數(shù)
5
設(shè)置伸縮組內(nèi)實例數(shù)量的上限。當(dāng)前實例數(shù)量超過上限時,伸縮組會自動移出實例,使得伸縮組內(nèi)的實例數(shù)量等于上限。
開啟期望實例數(shù)、組內(nèi)期望實例數(shù)
開啟,3
開啟期望實例數(shù)功能,并配置期望實例數(shù)。伸縮組會自動將實例數(shù)量維持在期望實例數(shù)。
創(chuàng)建伸縮配置。具體操作,請參見創(chuàng)建伸縮配置(ECS實例)。
啟用伸縮組。具體操作,請參見啟用或停用伸縮組。
由于示例的伸縮組的期望實例數(shù)配置為3,因此啟用伸縮組后,會自動創(chuàng)建3臺ECS實例。
步驟三:驗證縮容效果
觸發(fā)縮容活動,并確認(rèn)縮容實例的信息。
修改伸縮組的期望實例數(shù),觸發(fā)縮容活動。具體操作,請參見查看或修改伸縮組。
重要您也可以通過定時任務(wù)、報警任務(wù)或者手動執(zhí)行伸縮規(guī)則等方式觸發(fā)縮容活動。但通過修改伸縮組最大、最小實例數(shù)而觸發(fā)的縮容活動,無法應(yīng)用通過函數(shù)計算自定義設(shè)置的實例移出策略。
本文以將期望實例數(shù)修改為2作為驗證示例。由于之前伸縮組內(nèi)已有3臺ECS實例,因此會自動觸發(fā)縮容活動,移出1臺ECS實例,使得實例數(shù)與修改后的期望實例數(shù)一致。
查看伸縮活動詳情,確認(rèn)縮容實例的信息。具體操作,請參見查看伸縮活動詳情。
示例如下,縮容的實例ID為
i-2ze2qdthrkpf****tldq
。
查看函數(shù)的調(diào)用日志,確認(rèn)縮容活動觸發(fā)函數(shù)調(diào)用的記錄信息。
在函數(shù)計算FC控制臺的服務(wù)列表頁面,單擊服務(wù)名稱。
在函數(shù)管理頁面,單擊函數(shù)名稱。
在函數(shù)詳情頁面,單擊調(diào)用日志頁簽。
在請求列表頁簽的調(diào)用請求列表中,找到縮容活動時間點對應(yīng)的請求,單擊請求ID。
在彈出的請求詳情頁面,單擊日志詳情,查看縮容活動觸發(fā)函數(shù)調(diào)用的日志記錄。
示例如下,從日志中可以看出觸發(fā)縮容活動時,彈性伸縮向函數(shù)計算傳入了需要縮容的實例數(shù)和當(dāng)前伸縮組內(nèi)的實例ID列表,經(jīng)過函數(shù)篩選后要縮容的實例ID為
i-2ze2qdthrkpf****tldq
,這與實際縮容的實例ID一致。