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