天天看點

搶占式執行個體接收中斷消息指南前言方式1: 雲監控對接, 事件觸發方式第三步: 模拟投遞消息, 進行鍊路調試方式2: 直接API對接, 輪詢方式

前言

由于搶占式執行個體天然具有被中斷的風險,并且在執行個體中斷前至少5分鐘,系統會向您發送中斷消息。是以如果您的應用對中斷敏感,就需要格外注意如下兩點:

• 恰當地接收中斷事件

• 合理地進行中斷

關于第一點, 本文總結了幾種接收中斷事件的方式,歡迎各位體驗接入。

方式1: 雲監控對接, 事件觸發方式

所有搶占式執行個體中斷消息都會作為系統事件, 投遞到

雲監控

。雲監控提供了強大的能力, 您可以在雲監控訂閱該事件, 并将事件投遞到需要的消費的地方, 例如:

• 投遞到MQ消息隊列, 友善與您系統對接, 并執行相應代碼

• 投遞到SLS日志服務, 友善進行中斷統計

• 投遞到郵件/釘釘/短信等通道, 友善您能收到提醒.

• 投遞到自定義的函數中, 友善進行中斷處理

• 等等...

搶占式執行個體接收中斷消息指南前言方式1: 雲監控對接, 事件觸發方式第三步: 模拟投遞消息, 進行鍊路調試方式2: 直接API對接, 輪詢方式

第一步: 配置執行個體中斷事件

1. 建立事件報警

"

" > "事件監控" > "報警規則" > "系統事件" > "建立事件報警"

搶占式執行個體接收中斷消息指南前言方式1: 雲監控對接, 事件觸發方式第三步: 模拟投遞消息, 進行鍊路調試方式2: 直接API對接, 輪詢方式

2. 選擇合适事件

事件類型: "搶占式執行個體中斷通知"

搶占式執行個體接收中斷消息指南前言方式1: 雲監控對接, 事件觸發方式第三步: 模拟投遞消息, 進行鍊路調試方式2: 直接API對接, 輪詢方式

第二步: 投遞執行個體中斷事件

1. 投遞到消息隊列(MNS)

(1)建立消息隊列(MNS)

• 進入 消息隊列控制台 • 建立&配置隊列
搶占式執行個體接收中斷消息指南前言方式1: 雲監控對接, 事件觸發方式第三步: 模拟投遞消息, 進行鍊路調試方式2: 直接API對接, 輪詢方式

(2)投遞搶占式執行個體中斷消息到MNS

搶占式執行個體接收中斷消息指南前言方式1: 雲監控對接, 事件觸發方式第三步: 模拟投遞消息, 進行鍊路調試方式2: 直接API對接, 輪詢方式

(3)應用接入MNS SDK

此步驟不再贅述, 具體參見

MNS文檔

2. 投遞到函數計算

(1)建立中斷處理函數

函數計算控制台

->建立函數->事件函數->配置函數(此處以python2.7為例)

搶占式執行個體接收中斷消息指南前言方式1: 雲監控對接, 事件觸發方式第三步: 模拟投遞消息, 進行鍊路調試方式2: 直接API對接, 輪詢方式

(2)編寫中斷處理函數

搶占式執行個體接收中斷消息指南前言方式1: 雲監控對接, 事件觸發方式第三步: 模拟投遞消息, 進行鍊路調試方式2: 直接API對接, 輪詢方式

函數樣例代碼如下:

# -*- 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"
}
           
搶占式執行個體接收中斷消息指南前言方式1: 雲監控對接, 事件觸發方式第三步: 模拟投遞消息, 進行鍊路調試方式2: 直接API對接, 輪詢方式
搶占式執行個體接收中斷消息指南前言方式1: 雲監控對接, 事件觸發方式第三步: 模拟投遞消息, 進行鍊路調試方式2: 直接API對接, 輪詢方式

第三步: 模拟投遞消息, 進行鍊路調試

前兩步對接完成之後, 怎麼能驗證代碼是正确的呢? 雲監控提供強大的調試功能, 能模拟消息産生, 友善進行調試:

搶占式執行個體接收中斷消息指南前言方式1: 雲監控對接, 事件觸發方式第三步: 模拟投遞消息, 進行鍊路調試方式2: 直接API對接, 輪詢方式

搶占式執行個體中斷消息, 模拟内容如下:

{
    "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對接, 輪詢方式

具體請參見:

查詢搶占式執行個體中斷事件

一文。