云產(chǎn)品事件觸發(fā)器能夠?qū)崿F(xiàn)通過阿里云產(chǎn)品事件觸發(fā)函數(shù)執(zhí)行,這些事件主要包括云監(jiān)控事件、審計事件、云服務器事件、阿里云物聯(lián)網(wǎng)IoT事件和部分云產(chǎn)品運維事件等云產(chǎn)品事件。本文以云服務器為例,介紹如何在控制臺創(chuàng)建阿里云產(chǎn)品事件觸發(fā)器、配置函數(shù)入口參數(shù)和編寫代碼等。

功能簡介

您在函數(shù)計算控制臺提交創(chuàng)建觸發(fā)器的請求后,函數(shù)計算根據(jù)觸發(fā)器的配置信息,將自動在阿里云官方事件總線default下創(chuàng)建一個事件規(guī)則服務名稱-函數(shù)名稱-觸發(fā)器名稱。創(chuàng)建完成后,您可以在函數(shù)計算控制臺查看觸發(fā)器信息,也可以在事件總線EventBridge控制臺查看自動創(chuàng)建的事件規(guī)則信息。當事件源指定類型的事件投遞到事件總線時,將觸發(fā)該觸發(fā)器關聯(lián)的函數(shù)執(zhí)行一次。

注意事項

  • 事件總線EventBridge的云服務專用事件總線default上最多只能創(chuàng)建10個事件規(guī)則,超過10個之后將無法再創(chuàng)建云產(chǎn)品事件觸發(fā)器。
  • 云產(chǎn)品事件觸發(fā)器不支持通過Serverless Devs工具創(chuàng)建。

前提條件

步驟一:創(chuàng)建觸發(fā)器

  1. 登錄函數(shù)計算控制臺,在左側(cè)導航欄,單擊服務及函數(shù)
  2. 在頂部菜單欄,選擇地域,然后在服務列表頁面,單擊目標服務操作列的函數(shù)管理
  3. 在函數(shù)詳情頁面,單擊觸發(fā)器管理頁簽,從版本或別名下拉列表選擇要創(chuàng)建觸發(fā)器的版本或別名,然后單擊創(chuàng)建觸發(fā)器
  4. 在創(chuàng)建觸發(fā)器面板,填寫相關信息。然后單擊確定
    參數(shù) 操作 本文示例
    觸發(fā)器類型 選擇云服務器 云服務器
    名稱 填寫自定義的觸發(fā)器名稱。 ecs-trigger
    版本或別名 默認值為LATEST,如果您需要創(chuàng)建其他版本或別名的觸發(fā)器,首先您需要在函數(shù)詳情頁的右上角切換到該版本或別名。關于版本和別名的簡介,請參見管理版本管理別名 LATEST
    事件類型 選擇自定義事件類型選中全部事件類型。如果選擇自定義事件類型,您可以選擇云服務器的一個或多個事件類型。 保留云盤
    事件模式內(nèi)容 不支持手動編輯,您在事件類型參數(shù)中選擇事件類型后,事件模式內(nèi)容自動填充。關于事件模式的信息,請參見事件模式
    {
        "source": [
            "acs.ecs"
        ],
        "type": [
            "ecs:Disk:ConvertToPostpaidCompleted"
        ]
    }
    調(diào)用方式 選擇函數(shù)調(diào)用方式,取值說明如下:
    • 同步調(diào)用:默認調(diào)用方式,事件觸發(fā)函數(shù)執(zhí)行,等待函數(shù)調(diào)用完成后,函數(shù)計算返回執(zhí)行結(jié)果。更多信息,請參見同步調(diào)用
    • 異步調(diào)用:適用于調(diào)度延時較長的函數(shù),事件觸發(fā)函數(shù)執(zhí)行后,函數(shù)計算立即返回響應結(jié)果并且確保函數(shù)至少被成功執(zhí)行一次,但不會返回具體執(zhí)行結(jié)果。更多信息,請參見功能概覽
    同步調(diào)用

    創(chuàng)建完成后,在觸發(fā)器名稱列表中顯示已創(chuàng)建的觸發(fā)器。如需對創(chuàng)建的觸發(fā)器進行修改或刪除,具體操作,請參見觸發(fā)器管理

步驟二:配置函數(shù)入口參數(shù)

云服務器ECS的事件會以event的形式作為輸入?yún)?shù)傳遞給函數(shù),您可以手動將event傳給函數(shù)模擬觸發(fā)事件。

  1. 在函數(shù)詳情頁面,單擊函數(shù)代碼頁簽,然后單擊xialatubiao圖標,從下拉列表中,選擇配置測試參數(shù)
  2. 配置測試參數(shù)面板,選擇創(chuàng)建新測試事件編輯已有測試事件頁簽,填寫事件名稱和事件內(nèi)容。然后單擊確定

    event格式如下所示。關于支持的所有官方事件源的事件內(nèi)容,請參見阿里云官方事件源

    {
        "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中涉及的參數(shù)解釋如下表所示。
    參數(shù) 類型 示例值 描述
    datacontenttype String application/json;charset=utf-8 參數(shù)data的內(nèi)容形式。datacontenttype只支持application/json格式。
    aliyunaccountid String 123456789098**** 阿里云賬號ID。
    data Struct
    {
            "result": "accomplished",
            "diskId": "d-bp11ba7acc69nkta****"
    }
    事件內(nèi)容。JSON對象,內(nèi)容由發(fā)起事件的服務決定。CloudEvents可能包含事件發(fā)生時由事件生產(chǎn)者給定的上下文,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協(xié)議版本。
    aliyuneventbusname String default 接收事件的事件總線名稱。
    id String 70c0414c-b260-4923-b584-1d6e5646**** 事件ID。
    time Timestamp 2021-01-18T11:58:31.125+08:00 事件產(chǎn)生的時間。
    aliyunregionid String cn-hangzhou 接收事件的地域。
    aliyunpublishaddr String 172.25.XX.XX 接收事件的服務器地址。

步驟三:編寫函數(shù)代碼并測試

完成云服務器觸發(fā)器的創(chuàng)建之后,您可以開始編寫函數(shù)代碼并測試以驗證代碼的正確性。在實際操作過程中,當阿里云官方事件源云服務器ECS產(chǎn)生的事件通過事件總線EventBridge投遞到函數(shù)計算時,觸發(fā)器會自動觸發(fā)函數(shù)的執(zhí)行。

  1. 在函數(shù)詳情頁面,單擊函數(shù)代碼頁簽,在代碼編輯器中編寫代碼,然后單擊部署代碼

    本文以Node.js函數(shù)代碼為例。

    '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參數(shù),對event進行處理。
      callback(null, 'return result');
    }
  2. 單擊函數(shù)代碼頁簽的測試函數(shù)
    執(zhí)行完成后,您可以在函數(shù)代碼頁簽的上方查看執(zhí)行結(jié)果。

更多信息

如需對創(chuàng)建的觸發(fā)器進行修改或刪除,具體操作,請參見觸發(fā)器管理