雲產品事件觸發程序能夠實現通過阿里雲產品事件觸發函數執行,這些事件主要包括CloudMonitor事件、審計事件、雲端服務器事件、阿里雲物聯網IoT事件和部分雲產品營運事件等雲產品事件。本文以雲端服務器為例,介紹如何在控制台建立阿里雲產品事件觸發程序、配置函數入口參數和編寫代碼等。
功能簡介
您在Function Compute控制台提交建立觸發器的請求後,Function Compute根據觸發器的配置資訊,將自動在阿里雲官方事件匯流排default下建立一個事件規則函數名稱-觸發器名稱。建立完成後,您可以在Function Compute控制台查看觸發器資訊,也可以在事件匯流排EventBridge控制台查看自動建立的事件規則資訊。當事件來源指定類型的事件投遞到事件匯流排時,將觸發該觸發器關聯的函數執行一次。
注意事項
事件匯流排EventBridge的雲端服務專用事件匯流排default上最多隻能建立10個事件規則,超過10個之後將無法再建立雲產品事件觸發程序。
雲產品事件觸發程序不支援通過Serverless Devs工具建立。
前提條件
事件匯流排EventBridge:開通事件匯流排EventBridge並授權
Function Compute:建立函數
步驟一:建立觸發器
登入Function Compute控制台,在左側導覽列,單擊函數。
在頂部功能表列,選擇地區,然後在函數頁面,單擊目標函數。
在函數詳情頁面,選擇配置頁簽,在左側導覽列,單擊觸發器,然後單擊建立觸發器。
在建立觸發程序面板,填寫相關資訊,然後單擊確定。
配置項
操作
本文樣本
觸發器類型
選擇Elastic Compute Service。
Elastic Compute Service
名稱
填寫自訂的觸發器名稱。
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'); }
單擊測試函數。
更多資訊
如需對建立的觸發器進行修改或刪除,具體操作,請參見觸發器管理。