博客 / 詳情

返回

阿里雲事件生態再升級:使用 EventBridge 驅動全量雲產品

作者: 昶風

引言

用户使用阿里雲每天都會有大量的事件產生,例如雲資源的增刪改查、配置的變更、應用的水位報警等。這些事件部分是由用户業務操作觸發產生,部分是由系統檢測自動產生,這些離散的事件實時反映着用户雲上資源的狀態,稍加挖掘便可以產生實用的價值。阿里雲 EventBridge 作為雲上事件樞紐,早已集成了雲上產品的各類事件,用户開通 EventBridge 後使用內置的雲服務專用總線就可以監聽這些事件,無需創建任何額外資源。

同時,阿里雲各個雲服務提供了 open API 以滿足用户對雲上資源管理的需求。對於期待搭建事件驅動架構(EDA)應用的雲上用户而言,通過事件來觸發調用雲服務 open API 進行資源管理的能力將是業務能力版圖中不可或缺的一部分。

為了增強 EventBridge 對雲產品的驅動能力,EventBridge 在近期上線了 open API target,open API target 可以驅動所有云產品 openAPI,使得用户能夠基於 EventBridge 來觸發雲產品 open API 以管理自己的雲上資源。

至此,EventBridge 實現了對雲服務事件的閉環處理,雲服務事件的產生、接收、加工等都可以使用 EventBridge 來完成,幫助用户低成本實現雲上事件與資源的管控。

 title=

雲服務專用總線與阿里雲官方事件源

事件總線 EventBridge 是阿里雲提供的一款無服務器事件總線服務,支持阿里雲服務、自定義應用、SaaS 應用以標準化、中心化的方式接入,並能夠以標準化的 CloudEvents 1.0 協議在這些應用之間路由事件,可以幫助用户輕鬆構建鬆耦合、分佈式的事件驅動架構。

在 EventBridge 架構中,事件的流轉過程是這樣的:首先事件由事件源產生,隨後被投遞到事件總線,經過濾轉換處理後最終投遞給事件目標。事件源是事件的生產者,事件總線是事件在 EventBridge 中的承載者。EventBridge 目前已經支持了阿里雲服務產生的各類事件,用户通過一些簡單的配置即可獲取。

為了保證資源隔離,在事件總線和事件源層面,EventBridge 將雲服務事件與用户自定義事件做了隔離處理,我們分別稱之為雲服務專用總線與阿里雲官方事件源。

 title=

雲服務專用事件總線

在事件總線層面,EventBridge 目前支持的事件總線類型有 2 種:雲服務事件總線和自定義事件總線。

自定義事件總線是需要用户自行創建並管理的事件總線,用於接收自定義應用或存量消息數據的事件。自定義應用或存量消息數據的事件只能發佈到自定義總線。

而云服務專用事件總線是一個無需創建且不可修改的內置事件總線,用於接收阿里雲官方事件源的事件。阿里雲官方事件源的事件只能發佈到雲服務專用總線。

對於雲服務事件,EventBridge 真正做到了開箱即用,用户使用雲服務專用事件總線即可與眾多雲服務的事件生態打通。

阿里雲官方事件源

EventBridge 將雲服務事件統一收斂到一個事件源,稱之為阿里雲官方事件源。

官方事件源支持了目前阿里雲幾乎所有類型的雲服務,按照分類而言包括但不限於彈性計算、存儲、數據庫、安全、大數據、人工智能、網絡與 CDN、視頻服務、容器、中間件、開發運維、域名和網站、物聯網、企業應用與服務等。

對於雲服務事件,其類型包含以下幾類:

  1. 操作審計事件:阿里雲服務通過操作審計接入作為事件源發佈到事件總線 EventBridge 的事件類型。操作審計事件類型有:
  • API 調用事件。主要指開發者通過 API 主動對相關資源進行 CRUD 調用的事件,大量阿里雲控制枱基於 API 開發,對應的操作行為也會記錄為 ApiCall 事件。 
  • 部分控制枱或售賣頁的管控事件。由於這些控制枱或售賣頁並不是基於 API 來開發的,因此操作審計會將此類事件類型記錄為 ConsoleOperation 或 ConsoleCall。此類事件的名稱並不一定是 API 名稱,但能夠傳達基本操作行為的含義。 
  • 阿里雲平台對用户資源執行的管控事件。由阿里雲發起的操作,比如實例續費、到期釋放。例如,在創建 ECS 實例時,設置了實例自動釋放時間,那到時就會產生 type:AliyunServiceEvent 的事件,這個事件不是主動調用的,而是阿里雲平台調用的,此類事件就是 AliyunServiceEvent 事件。目前此類事件主要存在於預付費實例的到期自動釋放事件。 
  1. 配置審計事件:阿里雲服務通過配置審計接入作為事件源發佈到事件總線 EventBridge 的事件類型。配置審計事件類型有:
  • 配置變更歷史。配置審計將產生的資源變更事件進行推送。
  • 資源不合規事件。當檢測到資源不合規時,配置審計會將相關資源不合規的事件進行投遞。
  1. 雲監控事件:阿里雲服務通過雲監控接入作為事件源發佈到事件總線EventBridge的事件類型。 
  2. 採集事件:只要開通相應的阿里雲服務,就可以自動接入事件總線 EventBridge,事件總線 EventBridge 即可採集的事件。
阿里雲官方事件源使用示例可以參考:
https://help.aliyun.com/docum...

利用 EventBridge 驅動雲產品 open API

基礎概念

阿里雲官方事件源解決了獲取雲上事件的問題,使得用户可以感知雲上資源的變化。但對於部分用户而言,感知並不是最終目的,他們更期望的是可以進一步對雲上的資源進行操作。為了達到這一目的,用户可以在自己的業務代碼中使用雲服務的 openAPI 來實現,但當業務所使用雲服務數目很多時,開發和後續運維成本將會陡然上升。

為了補足在雲服務資源管控方面的能力,EventBridge 在近期上線了 open API target,使得 EventBridge 具有驅動所有云產品 open API 的能力。用户可以使用現有事件來觸發 open API 調用,進而進行雲資源的管理。open API target 允許用户將阿里雲服務的 open API 作為事件目標。具體而言,它類似一個“觸發器”,當有滿足條件的事件到來時,open API target 會按照用户預先設定的參數去調用雲服務 open API。

 title=

使用介紹

在使用 open API target 時,需要提供以下參數:

  • 雲服務名稱
  • 雲服務 API 版本
  • API 名稱
  • API 參數列表
  • 調用 API 角色 
以上雲產品相關信息可以通過查詢對應雲產品 sdk 文檔來獲取。

針對調用 API 角色,其實是允許 EventBridge 以這個角色的身份去調用 open API。用户需要創建一個自定義角色,並將其授信給事件總線 EventBridge。角色的權限方面則可以按照需要去進行設置,在權限最小的原則基礎上,確保當前權限內容可以滿足調用 target 所指定的 open API。

 title=

 title=

使用示例

下面舉個例子介紹如何通過 open API target 創建 RocketMQ topic 資源。

  1. 首先需要準備一個事件源,這裏為了便於測試,我們使用一個 source;
  2. 選擇一個事件總線,點擊“創建規則”;

 title=

  1. 填入事件規則名稱與描述

 title=

  1. 在配置事件模式部分選擇準備的 http 事件源

 title=

  1. 在配置事件目標時,在“雲產品接口觸發”中選擇 RocketMQ,版本選擇“2019-02-14”,接口類型選擇“OnsGroupCreate”。API 參數按照需求填寫,注意這裏參數即可以填寫常量,也可以使用 jsonPath 從事件中獲取。在角色配置一欄選擇授信給 EventBridge 的角色,在這裏此角色的權限策略已經滿足調用此接口的條件。

 title=

 title=

  1. 點擊“創建”,完成 open API target 創建工作。

 title=

  1. 隨後使用 http source 發送事件,事件內容如下:
{
 "InstanceId": "MQ_INST_****_BXvPp0bx",
 "GroupId": "GID_openAPITest"
}
  1. 觀察事件軌跡&MQ 控制枱查看,可以發現事件成功投遞,對應 Group 成功創建

 title=

 title=

至此,我們成功通過 EventBridge 調用了雲服務 RocketMQ 的 open API。

最佳實踐

按需創建快照

快照是雲盤數據在某一時刻的完整拷貝或鏡像。快照作為雲盤的數據拷貝,天然適合災備場景,也可以用於製作鏡像,完成環境複製。針對誤操作導致的應用崩潰,快照的存在也可以幫助用户對業務數據進行快速回滾,降低誤操作帶來的影響。

ECS 提供了週期性創建快照的能力,但對於部分客户而言,按需創建快照或許是一個更為現實的需求。例如針對業務開發上線階段,對快照的需求可能較為迫切,此時可能需要在每次發佈前都保存快照,以便問題排查和數據回滾。但進入業務維護階段,創建快照的需求可能並不頻繁。

 title=

如圖所示,用户在 EventBridge 控制枱創建 http source 與 open API target,其中 open API target 具體為創建 ECS 鏡像。當業務進行部署時,用户可以通過 http source 來投遞事件到 EventBridge,最終觸發快照創建。投遞事件的邏輯也可以在業務中進行更加自定義的定製,例如僅在大版本更新時才去進行 webhook 觸發等。這樣一來,用户無需引入ECS  相關 open API,且對鏡像的創建操作也真正的做到了按需進行。

測試環境資源管理

針對雲上測試場景,有時需要先創建一些資源,待測試完成之後,再對這些資源進行刪除。

假定測試訂單處理場景是這樣的:用户在函數計算上部署了測試下單服務與訂單處理服務,測試下單服務將發送一定數目的訂單數據發送至 RocketMQ,訂單處理消費 MQ 中的數據。服務配置信息等從數據庫中讀取。

測試前需要以下前提條件:

  1. 在數據庫中插入測試數據
  2. 創建 RocketMQ topic 以做訂單異步處理

測試結束後需要清理回收的資源:

  1. 數據庫中刪除測試數據;
  2. 清理掉剛剛測試創建的 topic;

 title=

如圖,要滿足上述測試場景,用户可以按照類似方式使用 EventBridge:

  • 創建資源初始化規則,此規則包含 2 個 target,open API target 用於創建 rocketmq topic,而 mysql target 則用於初始化測試數據;  
  • 創建資源清理規則,此規則和資源初始化規則類似,區別在於此處的 target 執行的是資源清理邏輯; 
  • 創建測試啓動規則,此規則的 target 是函數計算服務,用户通知測試下單服務開啓測試流程。 

在上述規則創建完成之後,用户僅需要在投遞事件到對應規則即可完成測試工作的各個階段。

運維自動化

運維工作的場景之一就是監控項配置,下面是一些運維時常見的場景。

  1. 某些業務發佈期間會觸發監控項報警,運維人員可能需要臨時關閉報警,以避免不必要的短信、電話內容帶來誤判,等待發布結束之後再開啓報警;
  2. 當有員工加入或者離職時,人事系統需要將此用户從報警聯繫中添加或者移除,這樣保證新加入員工可以及時獲取報警信息,同時也避免了業務運維狀況信息泄露給離職人員;
  3. 當有新業務部署時,需要增加主機監控,監測業務進程指標。

使用 EventBridge + 雲監控 CMS 就可以實現上述運維工作的自動化。

 title=

如圖,在 EventBridge 上配置好 CMS 相關的 open API target。針對業務系統,在業務部署前後向 EventBridge 投遞相應事件,完成報警項的關閉與開啓,同時自動配置主機監控。針對人事系統,在員工離職與入職環節增加事件投遞這一步驟,進而觸發報警聯繫人的更新。這樣,用户僅需在 EventBridge 上進行簡單的操作,即可實現對監控能力的運維自動化。

感興趣的小夥伴們可以掃描下方二維碼加入釘釘羣討論(羣號:44552972)

 title=

點擊此處,進入 EventBridge 官網瞭解更多信息~

user avatar data_ai 頭像
1 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.