全部產品
Search
文件中心

Function Compute:配置雲產品事件觸發程序

更新時間:Jul 06, 2024

雲產品事件觸發程序能夠實現通過阿里雲產品事件觸發函數執行,這些事件主要包括CloudMonitor事件、審計事件、雲端服務器事件、阿里雲物聯網IoT事件和部分雲產品營運事件等雲產品事件。本文以雲端服務器為例,介紹如何在控制台建立阿里雲產品事件觸發程序、配置函數入口參數和編寫代碼等。

功能簡介

您在Function Compute控制台提交建立觸發器的請求後,Function Compute根據觸發器的配置資訊,將自動在阿里雲官方事件匯流排default下建立一個事件規則函數名稱-觸發器名稱。建立完成後,您可以在Function Compute控制台查看觸發器資訊,也可以在事件匯流排EventBridge控制台查看自動建立的事件規則資訊。當事件來源指定類型的事件投遞到事件匯流排時,將觸發該觸發器關聯的函數執行一次。

注意事項

  • 事件匯流排EventBridge的雲端服務專用事件匯流排default上最多隻能建立10個事件規則,超過10個之後將無法再建立雲產品事件觸發程序。

  • 雲產品事件觸發程序不支援通過Serverless Devs工具建立。

前提條件

步驟一:建立觸發器

  1. 登入Function Compute控制台,在左側導覽列,單擊函數

  2. 在頂部功能表列,選擇地區,然後在函數頁面,單擊目標函數。

  3. 在函數詳情頁面,選擇配置頁簽,在左側導覽列,單擊觸發器,然後單擊建立觸發器

  4. 在建立觸發程序面板,填寫相關資訊,然後單擊確定

    配置項

    操作

    本文樣本

    觸發器類型

    選擇Elastic Compute Service

    Elastic Compute Service

    名稱

    填寫自訂的觸發器名稱。

    ecs-trigger

    版本或別名

    預設值為LATEST,如果您需要建立其他版本或別名的觸發器,首先您需要在函數詳情頁的右上方切換到該版本或別名。關於版本和別名的簡介,請參見版本管理別名管理

    LATEST

    事件類型

    選擇自訂事件類型選中全部事件類型。如果選擇自訂事件類型,您可以選擇雲端服務器的一個或多個事件類型。

    保留雲端硬碟

    事件模式內容

    不支援手動編輯,您在事件類型參數中選擇事件類型後,事件模式內容自動填滿。關於事件模式的資訊,請參見事件模式

    {
        "source": [
            "acs.ecs"
        ],
        "type": [
            "ecs:Disk:ConvertToPostpaidCompleted"
        ]
    }

    調用方式

    選擇函數調用方式,取值說明如下:

    • 同步調用:預設調用方式,事件觸發函數執行,等待函數調用完成後,Function Compute返回執行結果。更多資訊,請參見同步調用

    • 非同步呼叫:適用於調度延時較長的函數,事件觸發函數執行後,Function Compute立即返迴響應結果並且確保函數至少被成功執行一次,但不會返回具體執行結果。更多資訊,請參見功能概覽

    同步調用

    觸發器啟用狀態

    建立觸發器後是否立即啟用。預設勾選啟用觸發器,即建立觸發器後立即啟用觸發器。

    啟用觸發器

    建立完成後,在觸發器名稱列表中顯示已建立的觸發器。如需對建立的觸發器進行修改或刪除,具體操作,請參見觸發器管理

步驟二:配置函數入口參數

Elastic Compute Service的事件會以event的形式作為輸入參數傳遞給函數,您可以手動將event傳給函數類比觸發事件。

  1. 在函數詳情頁面的代碼頁簽,單擊測試函數右側的image.png表徵圖,從下拉式清單中,選擇配置測試參數

  2. 配置測試參數面板,選擇建立新測試事件編輯已有測試事件,填寫事件名稱和事件內容,然後單擊確定。

    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時,觸發器會自動觸發函數的執行。

  1. 在函數詳情頁面的代碼頁簽,在代碼編輯器中編寫代碼,然後單擊部署代碼

    本文以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');
    }
  2. 單擊測試函數

更多資訊

如需對建立的觸發器進行修改或刪除,具體操作,請參見觸發器管理