雲產品事件觸發程序能夠實現通過阿里雲產品事件觸發函數執行,這些事件主要包括CloudMonitor事件、審計事件、雲端服務器事件、阿里雲物聯網IoT事件和部分雲產品營運事件等雲產品事件。本文以雲端服務器為例,介紹如何在控制台建立阿里雲產品事件觸發程序、配置函數入口參數和編寫代碼等。
功能簡介
您在Function Compute控制台提交建立觸發器的請求後,Function Compute根據觸發器的配置資訊,將自動在阿里雲官方事件匯流排default下建立一個事件規則服務名稱-函數名稱-觸發器名稱。建立完成後,您可以在Function Compute控制台查看觸發器資訊,也可以在事件匯流排EventBridge控制台查看自動建立的事件規則資訊。當事件來源指定類型的事件投遞到事件匯流排時,將觸發該觸發器關聯的函數執行一次。
注意事項
- 事件匯流排EventBridge的雲端服務專用事件匯流排default上最多隻能建立10個事件規則,超過10個之後將無法再建立雲產品事件觸發程序。
- 雲產品事件觸發程序不支援通過Serverless Devs工具建立。
前提條件
- 事件匯流排EventBridge
- Function Compute
步驟一:建立觸發器
- 登入Function Compute控制台,在左側導覽列,單擊服務及函數。
- 在頂部功能表列,選擇地區,然後在服務列表頁面,單擊目標服務操作列的函數管理。
在函數詳情頁面,單擊觸發器管理頁簽,從版本或別名下拉式清單選擇要建立觸發器的版本或別名,然後單擊建立觸發器。
- 在建立觸發程序面板,填寫相關資訊。然後單擊確定。
參數 操作 本文樣本 觸發器類型 選擇雲端服務器。 雲端服務器 名稱 填寫自訂的觸發器名稱。 ecs-trigger 版本或別名 預設值為LATEST,如果您需要建立其他版本或別名的觸發器,首先您需要在函數詳情頁的右上方切換到該版本或別名。關於版本和別名的簡介,請參見管理版本和管理別名。 LATEST 事件類型 選擇自訂事件類型或選中全部事件類型。如果選擇自訂事件類型,您可以選擇雲端服務器的一個或多個事件類型。 保留雲端硬碟 事件模式內容 不支援手動編輯,您在事件類型參數中選擇事件類型後,事件模式內容自動填滿。關於事件模式的資訊,請參見事件模式。 { "source": [ "acs.ecs" ], "type": [ "ecs:Disk:ConvertToPostpaidCompleted" ] }調用方式 選擇函數調用方式,取值說明如下: 同步調用 建立完成後,在觸發器名稱列表中顯示已建立的觸發器。如需對建立的觸發器進行修改或刪除,具體操作,請參見觸發器管理。
步驟二:配置函數入口參數
Elastic Compute Service的事件會以event的形式作為輸入參數傳遞給函數,您可以手動將event傳給函數類比觸發事件。
- 在函數詳情頁面,單擊函數代碼頁簽,然後單擊測試函數右側
表徵圖,從下拉式清單中,選擇配置測試參數。 - 在配置測試參數面板,選擇建立新測試事件或編輯已有測試事件頁簽,填寫事件名稱和事件內容。然後單擊確定。
event格式如下所示。關於支援的所有官方事件來源的事件內容,請參見阿里雲官方事件來源。{ "datacontenttype": "application/json;charset=utf-8", "aliyunaccountid": "123456789098****", "data": { "result": "accomplished", "diskId": "d-bp11ba7acc69nkta****" }, "subject": "acs:ecs:cn-hangzhou:123456789098****:disk/d-bp11ba7acc69nkta****", "source": "acs.ecs", "type": "ecs:Disk:ConvertToPostpaidCompleted", "aliyunpublishtime": "2021-01-18T03:58:31.762Z", "specversion": "1.0", "aliyuneventbusname": "default", "id": "70c0414c-b260-4923-b584-1d6e5646****", "time": "2021-01-18T11:58:31.125+08:00", "aliyunregionid": "cn-hangzhou", "aliyunpublishaddr": "172.25.XX.XX" }event中涉及的參數解釋如下表所示。參數 類型 樣本值 描述 datacontenttype String application/json;charset=utf-8 參數data的內容形式。datacontenttype只支援application/json格式。 aliyunaccountid String 123456789098**** 阿里雲帳號ID。 data Struct { "result": "accomplished", "diskId": "d-bp11ba7acc69nkta****" }事件內容。JSON對象,內容由發起事件的服務決定。CloudEvents可能包含事件發生時由事件生產者給定的上下文,data中封裝了這些資訊。 subject String acs:ecs:cn-hangzhou:123456789098****:disk/d-bp11ba7acc69nkta**** 事件主題。 source String acs.ecs 事件來源。 type String ecs:Disk:ConvertToPostpaidCompleted 事件類型。 aliyunpublishtime Timestamp 2021-01-18T03:58:31.762Z 接收事件的時間。 specversion String 1.0 CloudEvents協議版本。 aliyuneventbusname String default 接收事件的事件匯流排名稱。 id String 70c0414c-b260-4923-b584-1d6e5646**** 事件ID。 time Timestamp 2021-01-18T11:58:31.125+08:00 事件產生的時間。 aliyunregionid String cn-hangzhou 接收事件的地區。 aliyunpublishaddr String 172.25.XX.XX 接收事件的伺服器位址。
步驟三:編寫函數代碼並測試
完成雲端服務器觸發器的建立之後,您可以開始編寫函數代碼並測試以驗證代碼的正確性。在實際操作過程中,當阿里雲官方事件來源Elastic Compute Service產生的事件通過事件匯流排EventBridge投遞到Function Compute時,觸發器會自動觸發函數的執行。
- 在函數詳情頁面,單擊函數代碼頁簽,在代碼編輯器中編寫代碼,然後單擊部署代碼。
本文以Node.js函數代碼為例。
'use strict'; /* To enable the initializer feature please implement the initializer function as below: exports.initializer = (context, callback) => { console.log('initializing'); callback(null, ''); }; */ exports.handler = (event, context, callback) => { console.log("event: %s", event); //解析event參數,對event進行處理。 callback(null, 'return result'); } 單擊函數代碼頁簽的測試函數。
執行完成後,您可以在函數字碼頁簽的上方查看執行結果。
更多資訊
如需對建立的觸發器進行修改或刪除,具體操作,請參見觸發器管理。