前言
由于搶占式執行個體天然具有被中斷的風險,并且在執行個體中斷前至少5分鐘,系統會向您發送中斷消息。是以如果您的應用對中斷敏感,就需要格外注意如下兩點:
• 恰當地接收中斷事件
• 合理地進行中斷
關于第一點, 本文總結了幾種接收中斷事件的方式,歡迎各位體驗接入。
方式1: 雲監控對接, 事件觸發方式
所有搶占式執行個體中斷消息都會作為系統事件, 投遞到
雲監控。雲監控提供了強大的能力, 您可以在雲監控訂閱該事件, 并将事件投遞到需要的消費的地方, 例如:
• 投遞到MQ消息隊列, 友善與您系統對接, 并執行相應代碼
• 投遞到SLS日志服務, 友善進行中斷統計
• 投遞到郵件/釘釘/短信等通道, 友善您能收到提醒.
• 投遞到自定義的函數中, 友善進行中斷處理
• 等等...

第一步: 配置執行個體中斷事件
1. 建立事件報警
"
" > "事件監控" > "報警規則" > "系統事件" > "建立事件報警"
2. 選擇合适事件
事件類型: "搶占式執行個體中斷通知"
第二步: 投遞執行個體中斷事件
1. 投遞到消息隊列(MNS)
(1)建立消息隊列(MNS)
• 進入 消息隊列控制台 • 建立&配置隊列
(2)投遞搶占式執行個體中斷消息到MNS
(3)應用接入MNS SDK
此步驟不再贅述, 具體參見
MNS文檔2. 投遞到函數計算
(1)建立中斷處理函數
函數計算控制台->建立函數->事件函數->配置函數(此處以python2.7為例)
(2)編寫中斷處理函數
函數樣例代碼如下:
# -*- coding: utf-8 -*-
import logging
import json, random, string, time
LOGGER = logging.getLogger()
clt = None
def handler(event, context):
'''
{
"product": "ECS",
"resourceId": "acs:ecs:cn-shanghai:1331602849963181:instance/i-abcdef",
"level": "WARN",
"instanceName": "instanceName",
"regionId": "cn-hangzhou",
"name": "Instance:PreemptibleInstanceInterruption",
"content": {
"instanceId": "i-abcdef",
"action": "delete"
},
"status": "Normal"
}
'''
evt = json.loads(event)
content = evt.get("content");
regionId = evt.get("regionId");
instanceId = content.get("instanceId");
LOGGER.info( regionId + " " + instanceId + " termination ongoing");
3. 測試中斷處理函數
使用如下觸發事件樣例, 進行"Invoke"測試:
{
"product": "ECS",
"resourceId": "acs:ecs:cn-shanghai:1331602849963181:instance/i-abcdef",
"level": "WARN",
"instanceName": "instanceName",
"regionId": "cn-hangzhou",
"name": "Instance:PreemptibleInstanceInterruption",
"content": {
"instanceId": "i-abcdef",
"action": "delete"
},
"status": "Normal"
}
第三步: 模拟投遞消息, 進行鍊路調試
前兩步對接完成之後, 怎麼能驗證代碼是正确的呢? 雲監控提供強大的調試功能, 能模拟消息産生, 友善進行調試:
搶占式執行個體中斷消息, 模拟内容如下:
{
"product": "ECS",
"resourceId": "acs:ecs:cn-shanghai:1331602849963181:instance/i-abcdef",
"level": "WARN",
"instanceName": "instanceName",
"regionId": "cn-hangzhou",
"name": "Instance:PreemptibleInstanceInterruption",
"content": {
"instanceId": "i-abcdef",
"action": "delete"
},
"status": "Normal"
}
方式2: 直接API對接, 輪詢方式
具體請參見:
查詢搶占式執行個體中斷事件一文。