本文介紹如何通過EventBridge主動訂閱ECS事件,將其投遞至指定下遊服務。
背景資訊
EventBridge作為阿里雲上的事件中樞,提供統一的事件中心,以標準化的CloudEvents 1.0協議串連雲產品和應用、應用和應用,協助雲產品、SaaS產品以及您管理業務領域內產生的事件。EventBridge致力於保障上遊雲產品事件的品質,同時提供更好的事件訂閱體驗,提高資料訂閱投遞的可靠性,SLA資料可靠性99.99999999%,服務可用性99.95%。
相比調用ECS的API介面DescribeInstanceHistoryEvents
以定時輪詢方式查詢ECS服務是否有新的事件產生,EventBridge通過主動訂閱的方式,有以下幾個優點:
時效性更高:一旦訂閱監聽到指定的ECS事件產生,能夠在毫秒級觸發指定操作。
成本更低:不需要定時輪詢檢查事件是否產生,避免不必要的開銷。
適用情境
訂閱指定的ECS事件,觸發DingTalk、簡訊、郵箱通知等。
將指定的ECS事件,通過公網或者VPC網路推送到下遊HTTP/HTTPS服務。
匯總多個雲帳號下的ECS事件。
指定的ECS事件發生時,通過Function Compute觸發特定動作。
當ECS事件時延較高、事件量較大時,將其投遞至MNS來訂閱事件。
前提條件
建立DingTalk機器人,記錄Webhook地址和密鑰。
建立Message ServiceMNS隊列,更多資訊,請參見開通Message ServiceMNS並授權和建立隊列。
步驟一:選用雲端服務專用事件匯流排
雲端服務專用事件匯流排即default匯流排,是EventBridge預設建立的匯流排,阿里雲上各個雲產品會即時將產品內產生的事件,通過多種渠道即時投遞到default匯流排,您可以在default匯流排上尋找和訂閱各個雲產品的事件。
- 登入事件匯流排EventBridge控制台,在左側導覽列,單擊事件匯流排。
- 在頂部功能表列,選擇地區。
在事件匯流排頁面,單擊default。
步驟二:建立ECS事件訂閱規則
在事件匯流排頁面,單擊左側導覽列的事件規則,然後單擊建立規則。
在建立規則面板,完成以下操作。
在配置基本資料頁簽,在名稱文字框輸入規則名稱,在描述文字框輸入規則的描述,然後單擊下一步。
在配置事件模式頁簽,完成以下配置,然後單擊下一步。
單擊頁簽。
在事件來源下拉式清單選擇acs.ecs。
在事件類型下拉式清單選擇需要訂閱的事件類型。可同時選擇訂閱多個事件類型。
在事件模式調試中,可查看訂閱的事件類型的樣本。例如,事件類型選擇ecs.Instance.StateChange 執行個體生命週期狀態變化時,對應的樣本如下。
{ "id": "45ef4dewdwe1-7c35-447a-bd93-fab****", "source": "acs.ecs", "specversion": "1.0", "subject": "acs.ecs:cn-hangzhou:123456789098****:215672", "time": "2020-11-19T21:04:41Z", "type": "ecs:Instance:StateChange", "aliyunaccountid": "123456789098****", "aliyunpublishtime": "2020-11-19T21:04:42Z", "aliyuneventbusname": "default", "aliyunregionid": "cn-hangzhou", "aliyunpublishaddr": "172.25.XX.XX", "data": { "instanceName": "iZ0jl0kyquo46h****", "instanceType": "ecs.c6.large", "privateIpAddress": "172.21.XX.XX", "publicIpAddress": "8.37.XX.XX", "resourceId": "i-0jl0kyquo46****", "resourceType": "ALIYUN::ECS::Instance", "spotStrategy": "SpotWithPriceLimit", "state": "Running" } }
在配置事件目標頁簽,選擇不同的服務類型,設定推送情境。
情境一:推送至MNS
使用MNS來訂閱事件適用於對事件時延要求較高、事件量較大的情境。MNS費用詳情請參見價格說明。
:選擇Message ServiceMNS。
:選擇已建立的隊列。
:選擇完整事件。
:選擇是。開啟Base 64 編碼,會協助您將資料編碼後投遞至目標Message ServiceMNS中的隊列。
服務類型為MNS時,可通過NetworkInterfaceDemo.zip監聽MNS訊息擷取事件。
情境二:推送至DingTalk
:選擇DingTalk。
:輸入DingTalk機器人的Webhook地址。
:輸入DingTalk機器人密鑰。
:您可以通過EventBridge的模板能力,將上面事件中的參數推送給DingTalk機器人,例如,推送ECS執行個體的名稱(instanceName)和運行狀態(state),配置如下:
:通過JsonPath指定需要擷取的事件中的欄位資訊,並設定變數名稱。
{ "instanceName":"$.data.instanceName", "state":"$.data.state" }
:按照DingTalk機器人需要的格式定義模板,並在模板中引入上面定義的變數。
{ "msgtype": "text", "text": { "content": "${instanceName} state is ${state}" } }
情境三:推送至下遊HTTP服務
:選擇HTTP或者HTTPS。
:配置接收事件的URL地址。
:配置接收事件的內容格式。EventBridge支援將事件轉換後,按需要的格式推送給HTTP目標端,目前支援四種轉換格式:完整事件、部分事件、固定值、模板。更多資訊,請參見事件內容轉換。
:
:通過公網訪問目標URL地址。
:如果目標URL的地址未暴露公網,可以選擇專用網路,需設定VPC ID、VSwitch ID和安全性群組ID。
情境四:推送後觸發動作
如果希望指定ECS事件發生時,觸發某個更加個人化的動作,可以將服務類型設定為Function Compute。把事件推送到指定的函數,在Function Compute裡通過代碼編輯個人化的操作。
:選擇Function Compute。
:Function Compute裡建立的服務名稱。
:Function Compute裡建立的函數名稱。
:配置接收事件的內容格式。EventBridge支援將事件轉換後,按需要的格式推送給Function Compute。目前支援四種轉換格式:完整事件、部分事件、固定值、模版。詳細資料,請參見事件內容轉換。
:
同步:Function Compute接收到事件,並且函數成功處理完事件後則響應成功。
非同步:Function Compute成功接收到事件後,則認為響應成功。
更多資訊,請參見路由到Function Compute。
情境五:匯總多個雲帳號下的ECS事件
EventBridge支援將不同帳號、不同地區下的ECS事件匯總到同一個地區的同一個帳號下的事件匯流排,需要選擇服務類型為EventBridge事件匯流排。
:
:投遞給當前帳號的其他匯流排。
:投遞給其他帳號的匯流排。如需選擇跨帳號投遞,需要進行帳號授權,詳細資料,請參見路由到事件匯流排EventBridge。
:支援中國內地跨地區投遞和國外地區之間相互投遞。
:要投遞的目標匯流排名稱。
:預設投遞完整事件且不可更改。
在配置事件目標頁簽下方,您可以根據業務需要配置重試和死信策略。詳情請參見重試和死信。
更多情境,請參見目標服務類型。
步驟三:觸發事件
本文以ecs.Instance.StateChange 執行個體生命週期狀態變化
事件類型為例,觸發事件需要修改ECS執行個體的運行狀態。
登入ECS管理主控台。
在左側導覽列,選擇 。
在頂部功能表列,選擇目標資源所在的地區。
在目標ECS執行個體右側操作列,選擇
,修改執行個體的運行狀態。
步驟四:查看投遞結果
查詢ECS是否產生事件。
EventBridge支援根據時間範圍、事件類型、訂閱規則名稱、事件ID(與ECS事件ID一致)來查詢搜尋產生的ECS事件。操作步驟,請參見查詢事件。
查詢ECS事件的訂閱投遞結果。
通過上一步查詢到的事件ID,可以單擊事件ID右側操作列的事件軌跡查看事件推送軌跡,軌跡包含推送的目標、狀態、次數、時間。
事件的監控警示
您可以在的EventBridge監控大盤中看到建立的ECS事件訂閱任務的調用次數,推送成功率、推送延遲等。根據具體業務情境訴求配置警示策略。
在左側導覽列,單擊雲產品監控。
在雲產品監控頁面,選擇
。在頁面上方選擇地區,單擊default匯流排右側操作列的監控圖表。
您可以在監控頁面為EventBridge的資源設定警示規則。當資源符合警示規則時,CloudMonitor自動發送警示通知。操作步驟,請參見設定警示規則。
重試和死信
事件寫入EventBus之後,EventBridge保障事件能被推送到下遊至少一次。當下遊事件接收端出現異常(如宕機、服務不可用、網路抖動等),導致接收端無法正常接收事件時,EventBridge支援多種方式處理這些異常,包括:重試策略、容錯策略、無效信件佇列。您可以在步驟二:建立ECS事件訂閱規則中,配置重試和死信策略,保障事件會被正確投遞。
重試策略
當下遊接收端無法正常接收事件時,EventBridge推送給下遊會發生異常,這種情況,您可以配置EventBridge重試推送下遊接收端的策略,最大程度保障推送成功。
退避重試(重試3次,每次重試的時間間隔是10秒到20秒之間的隨機值。)
指數衰減重試(重試176次,每次重試的間隔時間指數遞增至512秒,總計重試時間為1天。每次重試的具體間隔為:1,2,4,8,...512秒。)
死信處理策略
當達到預設的重試策略的重試次數上限之後,如果事件依舊未成功投遞,EventBridge預設會丟棄該事件。如果您希望保留該事件,可以配置將這些事件發送到無效信件佇列。目前EventBridge支援的無效信件佇列包括:ApsaraMQ for RocketMQ、Message Service、ApsaraMQ for Kafka、EventBridge。
容錯策略
如果您有事件順序情境的訴求,當發生異常時,需要暫停任務,直到該事件成功推送,否則會出現事件亂序,此時需要選擇禁止容錯。如果是非順序情境,建議優先選擇允許容錯,以提供最大並發推送能力。
允許容錯(允許異常容錯,當異常發生時不會阻塞執行,超過重試策略後會根據配置將訊息投遞至無效信件佇列或直接丟棄。)
禁止容錯(不允許容錯,當異常發生並超過重試策略配置時會阻塞執行)。