作者: 昶風
引言
用户使用阿里雲每天都會有大量的事件產生,例如雲資源的增刪改查、配置的變更、應用的水位報警等。這些事件部分是由用户業務操作觸發產生,部分是由系統檢測自動產生,這些離散的事件實時反映着用户雲上資源的狀態,稍加挖掘便可以產生實用的價值。阿里雲 EventBridge 作為雲上事件樞紐,早已集成了雲上產品的各類事件,用户開通 EventBridge 後使用內置的雲服務專用總線就可以監聽這些事件,無需創建任何額外資源。
同時,阿里雲各個雲服務提供了 open API 以滿足用户對雲上資源管理的需求。對於期待搭建事件驅動架構(EDA)應用的雲上用户而言,通過事件來觸發調用雲服務 open API 進行資源管理的能力將是業務能力版圖中不可或缺的一部分。
為了增強 EventBridge 對雲產品的驅動能力,EventBridge 在近期上線了 open API target,open API target 可以驅動所有云產品 openAPI,使得用户能夠基於 EventBridge 來觸發雲產品 open API 以管理自己的雲上資源。
至此,EventBridge 實現了對雲服務事件的閉環處理,雲服務事件的產生、接收、加工等都可以使用 EventBridge 來完成,幫助用户低成本實現雲上事件與資源的管控。
雲服務專用總線與阿里雲官方事件源
事件總線 EventBridge 是阿里雲提供的一款無服務器事件總線服務,支持阿里雲服務、自定義應用、SaaS 應用以標準化、中心化的方式接入,並能夠以標準化的 CloudEvents 1.0 協議在這些應用之間路由事件,可以幫助用户輕鬆構建鬆耦合、分佈式的事件驅動架構。
在 EventBridge 架構中,事件的流轉過程是這樣的:首先事件由事件源產生,隨後被投遞到事件總線,經過濾轉換處理後最終投遞給事件目標。事件源是事件的生產者,事件總線是事件在 EventBridge 中的承載者。EventBridge 目前已經支持了阿里雲服務產生的各類事件,用户通過一些簡單的配置即可獲取。
為了保證資源隔離,在事件總線和事件源層面,EventBridge 將雲服務事件與用户自定義事件做了隔離處理,我們分別稱之為雲服務專用總線與阿里雲官方事件源。
雲服務專用事件總線
在事件總線層面,EventBridge 目前支持的事件總線類型有 2 種:雲服務事件總線和自定義事件總線。
自定義事件總線是需要用户自行創建並管理的事件總線,用於接收自定義應用或存量消息數據的事件。自定義應用或存量消息數據的事件只能發佈到自定義總線。
而云服務專用事件總線是一個無需創建且不可修改的內置事件總線,用於接收阿里雲官方事件源的事件。阿里雲官方事件源的事件只能發佈到雲服務專用總線。
對於雲服務事件,EventBridge 真正做到了開箱即用,用户使用雲服務專用事件總線即可與眾多雲服務的事件生態打通。
阿里雲官方事件源
EventBridge 將雲服務事件統一收斂到一個事件源,稱之為阿里雲官方事件源。
官方事件源支持了目前阿里雲幾乎所有類型的雲服務,按照分類而言包括但不限於彈性計算、存儲、數據庫、安全、大數據、人工智能、網絡與 CDN、視頻服務、容器、中間件、開發運維、域名和網站、物聯網、企業應用與服務等。
對於雲服務事件,其類型包含以下幾類:
- 操作審計事件:阿里雲服務通過操作審計接入作為事件源發佈到事件總線 EventBridge 的事件類型。操作審計事件類型有:
- API 調用事件。主要指開發者通過 API 主動對相關資源進行 CRUD 調用的事件,大量阿里雲控制枱基於 API 開發,對應的操作行為也會記錄為 ApiCall 事件。
- 部分控制枱或售賣頁的管控事件。由於這些控制枱或售賣頁並不是基於 API 來開發的,因此操作審計會將此類事件類型記錄為 ConsoleOperation 或 ConsoleCall。此類事件的名稱並不一定是 API 名稱,但能夠傳達基本操作行為的含義。
- 阿里雲平台對用户資源執行的管控事件。由阿里雲發起的操作,比如實例續費、到期釋放。例如,在創建 ECS 實例時,設置了實例自動釋放時間,那到時就會產生 type:AliyunServiceEvent 的事件,這個事件不是主動調用的,而是阿里雲平台調用的,此類事件就是 AliyunServiceEvent 事件。目前此類事件主要存在於預付費實例的到期自動釋放事件。
- 配置審計事件:阿里雲服務通過配置審計接入作為事件源發佈到事件總線 EventBridge 的事件類型。配置審計事件類型有:
- 配置變更歷史。配置審計將產生的資源變更事件進行推送。
- 資源不合規事件。當檢測到資源不合規時,配置審計會將相關資源不合規的事件進行投遞。
- 雲監控事件:阿里雲服務通過雲監控接入作為事件源發佈到事件總線EventBridge的事件類型。
- 採集事件:只要開通相應的阿里雲服務,就可以自動接入事件總線 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。
使用介紹
在使用 open API target 時,需要提供以下參數:
- 雲服務名稱
- 雲服務 API 版本
- API 名稱
- API 參數列表
- 調用 API 角色
以上雲產品相關信息可以通過查詢對應雲產品 sdk 文檔來獲取。
針對調用 API 角色,其實是允許 EventBridge 以這個角色的身份去調用 open API。用户需要創建一個自定義角色,並將其授信給事件總線 EventBridge。角色的權限方面則可以按照需要去進行設置,在權限最小的原則基礎上,確保當前權限內容可以滿足調用 target 所指定的 open API。
使用示例
下面舉個例子介紹如何通過 open API target 創建 RocketMQ topic 資源。
- 首先需要準備一個事件源,這裏為了便於測試,我們使用一個 source;
- 選擇一個事件總線,點擊“創建規則”;
- 填入事件規則名稱與描述
- 在配置事件模式部分選擇準備的 http 事件源
- 在配置事件目標時,在“雲產品接口觸發”中選擇 RocketMQ,版本選擇“2019-02-14”,接口類型選擇“OnsGroupCreate”。API 參數按照需求填寫,注意這裏參數即可以填寫常量,也可以使用 jsonPath 從事件中獲取。在角色配置一欄選擇授信給 EventBridge 的角色,在這裏此角色的權限策略已經滿足調用此接口的條件。
- 點擊“創建”,完成 open API target 創建工作。
- 隨後使用 http source 發送事件,事件內容如下:
{
"InstanceId": "MQ_INST_****_BXvPp0bx",
"GroupId": "GID_openAPITest"
}
- 觀察事件軌跡&MQ 控制枱查看,可以發現事件成功投遞,對應 Group 成功創建
至此,我們成功通過 EventBridge 調用了雲服務 RocketMQ 的 open API。
最佳實踐
按需創建快照
快照是雲盤數據在某一時刻的完整拷貝或鏡像。快照作為雲盤的數據拷貝,天然適合災備場景,也可以用於製作鏡像,完成環境複製。針對誤操作導致的應用崩潰,快照的存在也可以幫助用户對業務數據進行快速回滾,降低誤操作帶來的影響。
ECS 提供了週期性創建快照的能力,但對於部分客户而言,按需創建快照或許是一個更為現實的需求。例如針對業務開發上線階段,對快照的需求可能較為迫切,此時可能需要在每次發佈前都保存快照,以便問題排查和數據回滾。但進入業務維護階段,創建快照的需求可能並不頻繁。
如圖所示,用户在 EventBridge 控制枱創建 http source 與 open API target,其中 open API target 具體為創建 ECS 鏡像。當業務進行部署時,用户可以通過 http source 來投遞事件到 EventBridge,最終觸發快照創建。投遞事件的邏輯也可以在業務中進行更加自定義的定製,例如僅在大版本更新時才去進行 webhook 觸發等。這樣一來,用户無需引入ECS 相關 open API,且對鏡像的創建操作也真正的做到了按需進行。
測試環境資源管理
針對雲上測試場景,有時需要先創建一些資源,待測試完成之後,再對這些資源進行刪除。
假定測試訂單處理場景是這樣的:用户在函數計算上部署了測試下單服務與訂單處理服務,測試下單服務將發送一定數目的訂單數據發送至 RocketMQ,訂單處理消費 MQ 中的數據。服務配置信息等從數據庫中讀取。
測試前需要以下前提條件:
- 在數據庫中插入測試數據
- 創建 RocketMQ topic 以做訂單異步處理
測試結束後需要清理回收的資源:
- 數據庫中刪除測試數據;
- 清理掉剛剛測試創建的 topic;
如圖,要滿足上述測試場景,用户可以按照類似方式使用 EventBridge:
- 創建資源初始化規則,此規則包含 2 個 target,open API target 用於創建 rocketmq topic,而 mysql target 則用於初始化測試數據;
- 創建資源清理規則,此規則和資源初始化規則類似,區別在於此處的 target 執行的是資源清理邏輯;
- 創建測試啓動規則,此規則的 target 是函數計算服務,用户通知測試下單服務開啓測試流程。
在上述規則創建完成之後,用户僅需要在投遞事件到對應規則即可完成測試工作的各個階段。
運維自動化
運維工作的場景之一就是監控項配置,下面是一些運維時常見的場景。
- 某些業務發佈期間會觸發監控項報警,運維人員可能需要臨時關閉報警,以避免不必要的短信、電話內容帶來誤判,等待發布結束之後再開啓報警;
- 當有員工加入或者離職時,人事系統需要將此用户從報警聯繫中添加或者移除,這樣保證新加入員工可以及時獲取報警信息,同時也避免了業務運維狀況信息泄露給離職人員;
- 當有新業務部署時,需要增加主機監控,監測業務進程指標。
使用 EventBridge + 雲監控 CMS 就可以實現上述運維工作的自動化。
如圖,在 EventBridge 上配置好 CMS 相關的 open API target。針對業務系統,在業務部署前後向 EventBridge 投遞相應事件,完成報警項的關閉與開啓,同時自動配置主機監控。針對人事系統,在員工離職與入職環節增加事件投遞這一步驟,進而觸發報警聯繫人的更新。這樣,用户僅需在 EventBridge 上進行簡單的操作,即可實現對監控能力的運維自動化。
感興趣的小夥伴們可以掃描下方二維碼加入釘釘羣討論(羣號:44552972)
點擊此處,進入 EventBridge 官網瞭解更多信息~